前言:正常的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;
Last modification:September 21, 2020
If you think my article is useful to you, please feel free to appreciate