主从服务器要求版本一致,至少大版本一致; 演示主库ip:192.168.3.104 演示从库ip:192.168.3.103
一.主从配置
1.修改主服务器(104)master
[root@bogon ~]# vim /etc/my.cnf
#在mysqld下面加入以下内容
[mysqld]
log-bin=mysql-bin #启用二进制日志
server-id=104 #服务器唯一ID,默认是1,一般取IP最后一段
replicate-do-db=jeesite #要同步的数据库
binlog-ignore-db=mysql #要忽略的数据库
binlog-ignore-db=test #要忽略的数据库
expire_logs_days=7 #自动清理 7 天前的log文件,可根据需要修改
2.修改从服务器(103)slave
[root@bogon ~]# vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin #启用二进制日志
server-id=103 #服务器唯一ID,默认是1,一般取IP最后一段
replicate-do-db=jeesite #需要同步的数据库
3.重启2台服务器
4.在主库(104)上创建一个从库用来读取数据的账号,并查看主库的二进制日志名和偏移量
mysql> GRANT REPLICATION SLAVE ON *.* to 'mySql_103'@'192.168.3.103' identified by 'mySql_103';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 606 | | mysql,test | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
5.在从库(103)上执行以下命令
#填入主库的ip/二进制文件名/偏移量,填入主库上开给从库的账户及密码
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.3.104',
-> MASTER_USER='mySql_103',
-> MASTER_PASSWORD='mySql_103',
-> MASTER_LOG_FILE='mysql-bin.000002',
-> MASTER_LOG_POS=606;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
#启动从库
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
#查看是否配置成功(Slave_IO_Running与Slave_SQL_Running为YES说明配置成功)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.3.104
Master_User: mySql_103
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 606
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: jeesite
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
1.mysql复制介绍
![](https://i-blog.csdnimg.cn/blog_migrate/6e0082a79b0ee861c7e433c8fa38d4ab.jpeg)
2.删除某个时间点之前的日志,示例(从服务执行)
mysql>purge binary logs before '2018-07-19 12:00:00';
3.停止主从(从服务执行)
mysql>stop slave;
4.删除从服务配置(从服务执行)
mysql>reset slave;
5.重置主服务配置(主服务执行)
mysql>reset master;
RESET MASTER将删除所有的二进制日志,创建一个.000001的空日志。RESET MASTER并不会影响SLAVE服务器上的工作状态,所以盲目的执行这个命令会导致slave找不到master的binlog,造成同步失败。
建议在主服务配置中加入以下配置
跳过指定类型的常见错误
slave-skip-errors=1062,1053,1146
不允许数据截断,如果从库类型大于主库类型,是可以复制的,反过了,就不行了,从库报复制错误,复制终止。
slave_type_conversions=ALL_NON_LOSSY
至此,主从配置完成, 转载自:https://www.cnblogs.com/zhoujie/p/mysql1.html
二.主主配置(将上述主从反过来再配置一遍即可)
1.修改104服务器(上述主库,现是从库)的配置
[root@bogon ~]# vim /etc/my.cnf
auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_offset=1 #起始值。一般填第n台主MySQL。此时为第一台主MySQL
2.修改103服务器(上述从库,现是主库)的配置
[root@bogon ~]# vim /etc/my.cnf
auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_offset=2 #起始值。一般填第n台主MySQL。此时为第二台主MySQL
3. 重启2台服务器
4.在103服务器(上述从库,现是主库)上创建一个从库用来读取数据的账号,并查看主库的二进制日志名和偏移量
mysql>GRANT REPLICATION SLAVE ON *.* to mySql_104@'192.168.3.104' identified by 'mySql_104';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 | 5031 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)
5. 在从库104服务器(上述主库,现是从库)上执行以下命令
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.3.103',
-> MASTER_USER='mySql_104',
-> MASTER_PASSWORD='mySql_104',
-> MASTER_LOG_FILE='mysql-bin.000004',
-> MASTER_LOG_POS=5031;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)
在104上执行
mysql>show slave status\G
在103上执行
mysql>show slave status\G
主主配置完成 转载地址:https://www.cnblogs.com/phpstudy2015-6/p/6485819.html
注意事项
1、主主复制配置文件中auto_increment_increment和auto_increment_offset只能保证主键不重复,却不能保证主键有序。
2、当配置完成Slave_IO_Running、Slave_SQL_Running不全为YES时,show slave status\G信息中有错误提示,可根据错误提示进行更正。
3、Slave_IO_Running、Slave_SQL_Running不全为YES时,大多数问题都是数据不统一导致。
常见出错点:
1、两台数据库都存在db数据库,而第一台MySQL db中有tab1,第二台MySQL db中没有tab1,那肯定不能成功。
2、已经获取了数据的二进制日志名和位置,又进行了数据操作,导致POS发生变更。在配置CHANGE MASTER时还是用到之前的POS。
3、stop slave后,数据变更,再start slave。出错。
终极更正法:重新执行一遍CHANGE MASTER就好了。