1. 分别在主从服务器上安装mysql
主服务器的(master) Ip:192.168.31.140
从服务器的(slave) Ip:192.168.31.186
2.修改主服务器上my.cnf文件
2.1 设置服务器id,为1表示主服务器,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
server-id=1
2.2 需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
log_bin=/var/log/mysql/mysql-bin.log
2.3 需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-do-db=imtest
*注意:主从服务器的bind-address = 127.0.0.1需要注释掉(从服务器注释不注释都可以)
授权用户:root只能从192.168.31.182这个IP访问主服务器192.168.31.143上面的数据库,并且只具有数据库备份的权限
grant replication slave on *.* to 'root'@'192.168.31.186' identified by '123456' with grant option;
配置完成后service mysql restart
mysql -u root -p #进入mysql控制台
show master status; 查看主服务器,出现以下类似信息
3.配置MySQL从服务器的my.cnf文件
3.1 设置服务器id,为2表示从服务器,
server-id=2
3.2 启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
log-bin=mysql-bin
3.3 需要同步的数据库名
replicate-do-db=imtest
service mysql restart
MySQL 5.1.7版本之后,已经不支持把master配置属性写入my.cnf配置文件中了,只需要把同步的数据库和要忽略的数据库写入即可。
mysql -u root -p #进入MySQL控制台
slave stop; #停止slave同步进程
change master to master_host='192.168.31.140',master_user='root',master_password='123456',
master_log_file='mysql-bin.000004',master_log_pos=527; #执行同步语句
(其中master_log_file和master_log_pos是从主服务器的show master status得出)
slave start; #开启slave同步进程
SHOW SLAVE STATUS\G #查看slave同步信息,出现以下内容
注意查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上这两个参数的值为Yes,即说明配置成功!
4.测试
在主服务器建表
use imtest;
create table student(
id int(30) primary key not null,
name varchar(30) not null,
age varchar(30) not null);
发现主从服务器都有student表产生,说明配置成功。
第二步:安装配置MySQL-Proxy
1. 安装脚本lua
#apt-get install lua5.1
MySQL-Proxy的读写分离主要是通过rw-splitting.lua脚本实现的,因此需要安装lua。
2.安装MySQL-Proxy #apt-get install mysql-proxy
当前获取到的版本是:mysql-proxy 0.8.1(查看版本命令:#mysql-proxy -V)
3.修改rw-splitting.lua
配置并使用rw-splitting.lua读写分离脚本,脚本目录是 /usr/share/mysql-proxy,修改读写分离脚本rw-splitting.lua,修改默认连接数,进行快速测试,如果不修改连接数的话要达到连接数为4时才会启用读写分离 #vim /usr/share/mysql-proxy/rw-splitting.lua这是因为mysql-proxy会检测客户端连接,当连接没有超过min_idle_connections预设值时, 不会进行读写分离, 即查询操作会发生到Master上
4.在代理机器上执行
sudo mysql-proxy --proxy-read-only-backend-addresses=192.168.31.186:3306 --proxy-backend-addresses=192.168.31.140:3306 --admin-lua-script=/usr/share/mysql-proxy/rw-splitting.lua --proxy-lua-script=/usr/share/mysql-proxy/rw-splitting.lua >/var/log/mysql-proxy/mysql-proxy.log --admin-username=root --admin-password=123456&
mysql-proxy --proxy-read-only-backend-addresses——数据库只读的地址
proxy-backend-addresses —— 数据更新的地址
当运行sudo mysql-proxy 上面语句后,查询进程没有4040的时候,需要重启mysql ( sudo /etc/init.d/mysql restart) 之后再输入proxy设置。
netstat -ant
tcp 0 0 0.0.0.0:4040 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:4041 0.0.0.0:* LISTEN