MySQL主从的配置

 第一步:主从配置

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;  查看主服务器,出现以下类似信息


MySQL主从的配置
 

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同步信息,出现以下内容


MySQL主从的配置
 

注意查看:

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)


MySQL主从的配置


   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


MySQL主从的配置
 

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
说明启动成功

5.查看数据库连接

#netstat -ant 可以看到一个连接
MySQL主从的配置
 6.测试读写分离:

#mysql -u root -p -P4040 -h 192.168.31.186必须指定-h参数,不然报下面错误:

显示数据列表mysql> show databases;

如果你是搭建MySQL-Proxy成功的话,你上面查看到的数据库列表应该是192.168.31.186服务器上的数据库列表。(可以在140和186分别创建不同的数据库进行测试)

相关推荐