前言:正常的Mysql 主从配置网上有很多例子了,这里我想试的是主主配置,实现两个数据库的完全同步。
首先是两台服务器A和B,分别安装Mysql 5.7 数据库。并且保证两台服务器之间网络相同,可以相互连接到对方的数据库。
服务器A的my.ini配置添加如下:
server-id = 187
# 开启mysql binlog功能
log-bin = mysql-bin
# binlog记录内容的方式,记录被操作的每一行
binlog_format = ROW
# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal
# 指定需要复制的数据库名为changqu
replicate-do-db = changqu
replicate-do-db = changqu_hymake
auto_increment_increment=2
#两台数据库的起点必须不同,否则主键冲突
auto_increment_offset=1
服务器B的my.ini添加如下:
server-id = 212
# 开启mysql binlog功能
log-bin = mysql-bin
# binlog记录内容的方式,记录被操作的每一行
binlog_format = ROW
# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal
# 指定需要复制的数据库名为changqu
replicate-do-db = changqu
replicate-do-db = changqu_hymake
auto_increment_increment=2
#两台数据库的起点必须不同,否则主键冲突
auto_increment_offset=2
这里面server-id
必须不同,用于区分。添加完后,重启两台服务器的MYSQL服务,然后登录服务器A的mysql控制台
mysql -uroot
输入以下命令,查看主服务器状态:
show master status;
会出现:
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000006 | 413 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
记录下来file的名称和position的数字,编写SQL语句,将刚刚的file名称和postion填进去:
change master to master_host='192.168.169.187',master_user='root',master_password='root',master_log_file='mysql-bin.000006',master_log_pos=413;
然后进入服务器B,进入mysql控制台,
mysql -uroot
执行上面的sql语句:
Mysql>change master to master_host='192.168.169.187',master_user='root',master_password='root',master_log_file='mysql-bin.000006',master_log_pos=413;
并继续执行
show master status;
出现:
+------------------+----------+------------------------
--------------+
| File | Position | Binlog_Do_DButed_Gtid_Set |
+------------------+----------+------------------------
--------------+
| mysql-bin.000001 | 432 | changqu,changqu_hymake
|
+------------------+----------+------------------------
同样记住file名称和position,编写SQL语句:
change master to master_host='192.168.168.212',master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=432;
在服务器A中执行该语句。执行完后,我们就分别在服务器A和服务器B上执行
MySQL>start slave;
MySQL>show slave status\G;
观察其中的
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
如果都是yes,则代表主从配置成功了,如果其中一项为No,则可以在下面看到报错信息。在这里我遇到的一个坑是SQL_Running是NO,按照网上的教程,需要在报错的服务器上反复输入以下命令,直到看到Yes为止,该代码是跳过一些SQL的运行错误。
mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave ;
mysql> show slave status\G;