一、如何配置MYSQL的主从复制?
1. 两台数据库服务器,IP分别为 192.168.216.128 和 192.168.216.129,在服务器上装MySQL(我的配置版本为5.7.24)
2. 打开 192.168.216.128 服务器上的MySQL的配置文件 /etc/my.cnf (路径根据自己服务器的情况来看),
log-bin=mysql-bin #开启二进制日志 server-id=1 #主数据库端ID号 log_slave_updates=1 #将从服务器从主服务器收到的更新记入到从服务器自己的二进制日志文件中 ,然后重启MySQL服务。service mysql restart
3. 打开 192.168.216.129 服务器上的MySQL的配置文件 /etc/my.cnf (路径根据自己服务器的情况来看),
log-bin=mysql-bin #开启二进制日志 server-id=2 #主数据库端ID号 log_slave_updates=1 #将从服务器从主服务器收到的更新记入到从服务器自己的二进制日志文件中 ,然后重启MySQL服务。service mysql restart
4. 设 192.168.216.128 为主服务器,那么在主服务器上加一个从服务器可以登录的用户,语句如下:
GRANT REPLICATION SLAVE ON *.* TO 'sally'@'192.168.216.129' IDENTIFIED BY 'P@ssw0rd';
FLUSH PRIVILEGES;
sally:用户名 P@ssw0rd:密码
创建之后,在192.168.216.129 服务器上执行以下语句
mysql -h 192.168.216.128 -usally -pPass
然后试一下可不可以连上,如果可以,则正确,如果连不上,看一下什么原因,是否是防火墙的原因,如果是则去配置防火墙的规则。
5. 以上完成后在主服务器上执行以下语句,查询master的状态
show master status;
可以看到以上结果,这儿只需要看 File 和 Position,其它的两个分别是白名单和黑名单,意思为同步哪几个数据库和不同步哪几个数据库,可自行根据需求进行设置。记录了前两个字段后,在从库上执行以下语句:
mysql -uroot -p
输入密码 Pass
CHANGE MASTER TO MASTER_HOST='192.168.216.128', MASTER_USER='sally', MASTER_PASSWORD='P@ssw0rd', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1599;
6. 执行完毕后,在从库上继续执行如下语句:
start slave; show slave statusG;
这样,查看从服务器的状态,如果状态中的用红线标出来两个参数的值都为YES,那证明配置已经成功,否则可以检查一下具体问题出现在什么地方。
这样,就算配置完成了。在主库中新建数据库,新建一张表,插几条数据,到从库上查询一下看是否已经同步过来。
(1)主服务器上的操作
1在主数据库服务器创建库first_tb;
mysql>create database first_db;
2在主数据库服务器创建表first_tb;
mysql>create table first_db(id int (3),name char (10));
3在主数据服务器的表first_tb中插入记录;
mysql>insert into first_db values (001,'myself');
(2)从服务器上查看
1数据库first_db自动生成
mysql>show databases;
2、表first_tb也自动生成,数据记也录存在。
如果失败,可以从以下几个方面去排查问题:
1.首先试一下主从服务器相互之间是否 PING 得通
2.试一下远程连接是否正确,如果连不上,则有可能是网卡不一致、防火墙没有放行 3306 端口
3.server-id 是否配成一致
4.bin-log 的信息是否正确
二、如何配置MYSQL的主主复制?
上面说了主从复制的配置方法,现在接着上面的配置继续,然后实现双主复制,让以上的两个服务器互为主从。
1. 在主服务器上配置 /etc/my.cnf 文件,配置如下:
auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_offset=1 #起始值。一般填第n台主MySQL。此时为第一台主MySQL
binlog-ignore=mysql #忽略mysql库【我一般都不写】 binlog-ignore=information_schema #忽略information_schema库【我一般都不写】
配置之后重启MYSQL服务 service mysql restart
2.在从服务器上配置 /etc/my.cnf 文件,配置如下
auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n auto_increment_offset=2 #起始值。一般填第n台主MySQL。此时为第二台主MySQL binlog-ignore=mysql #忽略mysql库【我一般都不写】 binlog-ignore=information_schema #忽略information_schema库【我一般都不写】
配置之后重启MYSQL服务
3. 在从服务器上添加一个主服务器可以访问的用户,命令如下:
GRANT REPLICATION SLAVE ON *.* TO 'sally1'@'192.168.216.128' IDENTIFIED BY 'P@ssw0rd'; FLUSH PRIVILEGES;
创建之后,在192.168.216.128 服务器上执行以下语句
mysql -h 192.168.216.129 -usally1 -pPass
如果可以连上,则进行下一步,连不上的话,参考上面进行问题排查。
4. 因为要互为主从,所以现在从服务器也是master ,所以也要查看一下状态(这里查看一下从服务器的)
show master status;
查到相应的信息后,在主库上执行以下命令
mysql -uroot -p
输入密码: Pass
CHANGE MASTER TO MASTER_HOST='192.168.216.129', MASTER_USER='sally1', MASTER_PASSWORD='P@ssw0rd', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1276;
5. 执行完毕后,在主库上继续执行如下语句:
start slave; show slave statusG;
同上,如果出现如下画面,则证明配置成功。
6. 在两台服务器的MYSQL中分别进行一些建库、建表、插入、更新等操作,看一下另一台会不会进行同步,如果可以则证明主主配置成功,否则还是上面的排错方法,进行错误排查。
(1)从服务器上的操作
1在主数据库服务器创建库first_tb;
mysql>create database first_db2;
2在主数据库服务器创建表first_tb;
mysql>create table first_db2(id int (3),name char (10));
3在主数据服务器的表first_tb中插入记录;
mysql>insert into first_db2 values (001,'myself');
(2)主服务器上查看
1数据库first_db自动生成
mysql>show databases;