Linux下MySQL主主同步
- 主主复制:主从相互授权连接,读取对方binlog日志并更新到本地数据库的过程;只要对方数据改变,自己就跟着改变。
本节介绍主主复制模式的配置。
前提条件
已安装MySQL两台服务器。服务器规划示例如表1所示。
操作步骤
- 以root用户登录MySQL server1。
- 配置MySQL server1的my.cnf文件。
- 执行以下命令,编辑配置文件。
# vi /etc/my.cnf
- 在[mysqld]部分添加下面加黑参数。其中,“bind-address”参数请修改为MySQL服务器的地址。
#主标服务标识号,必需唯一 server-id = 1 # the bind ip bind-address = 10.10.10.30 #log_bin日志名称格式:${datadir}/mysql-bin.0000* log_bin = mysql-bin log_bin_trust_function_creators=1 #日志内容记录格式 binlog_format = mixed #不建议使用这种配置,如果跨域操作会出现同步异常。 # binlog_do_db = dbname # binlog_ignore_db = dbname #设置需要同步的数据库名,多个数据库时配置多次该语句。 replicate-wild-do-table=apigwdb.% replicate-wild-do-table=apimarkdb.% replicate-wild-do-table=livedata.% replicate-wild-do-table=mqs_web.% replicate-wild-do-table=iot_web.% replicate-wild-do-table=roma_fdi_prod.% replicate-wild-do-table=roma_quartz.% replicate-wild-do-table=roma_web.% replicate-wild-do-table=roma_config. log-slave-updates #经过1日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0。 sync_binlog = 1 #auto_increment_offset=1设置步长,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID auto_increment_offset = 1 #auto_increment_increment=n有多少台服务器,n就设置为多少 auto_increment_increment = 2 #忽略所有复制产生的错误 slave-skip-errors = all
- 修改完成后,执行:wq! 保存退出。
- 重启MySQL。
# cd /opt/mysql/support-files
# mysql.server stop
# mysql.server start
- 查看MySQL状态。
# mysql.server status
- 执行以下命令,编辑配置文件。
- 以root用户登录MySQL server2。
- 配置MySQL server2的my.cnf文件。
- 执行以下命令,编辑配置文件。
# vi /etc/my.cnf
- 在[mysqld]部分添加下面加黑参数。其中,“bind-address”参数请修改为MySQL服务器的地址。
#主标服务标识号,必需唯一(区别于server11) server-id = 2 # the bind ip bind-address = 10.10.10.31 #log_bin日志名称格式:${datadir}/mysql-bin.0000* log_bin = mysql-bin log_bin_trust_function_creators=1 #日志内容记录格式 binlog_format = mixed #不建议适用这种配置,如果跨域操作会出现同步异常。 # binlog_do_db = dbname # binlog_ignore_db = dbname #设置需要同步的数据库名,多个数据库时配置多次该语句。 replicate-wild-do-table=apigwdb.% replicate-wild-do-table=apimarkdb.% replicate-wild-do-table=livedata.% replicate-wild-do-table=mqs_web.% replicate-wild-do-table=iot_web.% replicate-wild-do-table=roma_fdi_prod.% replicate-wild-do-table=roma_quartz.% replicate-wild-do-table=roma_web.% replicate-wild-do-table=roma_config.% log-slave-updates #经过1日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0。 sync_binlog = 1 #auto_increment_offset=1设置步长,这里设置为2,这样Master的auto_increment字段产生的数值是:2,4,6,8 …等偶数ID auto_increment_offset = 2 #auto_increment_increment=n有多少台服务器,n就设置为多少, auto_increment_increment = 2 #忽略所有复制产生的错误 slave-skip-errors = all
- 修改完成后,执行:wq! 保存退出。
- 重启MySQL。
# cd /opt/mysql/support-files
# mysql.server stop
# mysql.server start
- 查看MySQL状态。
# mysql.server status
- 执行以下命令,编辑配置文件。
-
设置MySQL server2同步更新MySQL server1。
- 以root用户登录MySQL server1。
- 进入MySQL控制台。
# cd /opt/mysql/bin
# mysql -u root -p
按照提示信息输入待连接的MySQL服务器的数据库root用户的密码:
Enter Password:
登录成功后系统显示如下类似信息:
Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4381 Server version: 5.7.24-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
- 锁MySQL server1表。
mysql> flush tables with read lock;
- 查看MySQL server1状态。
mysql> show master status;
系统显示如下类似信息:
+---------------+----------+--------------+------------------+------------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+--------------+------------------+------------------------------------------------+ | binlog.000004 | 194 | test | mysql | 39380c8b-aa71-11e8-8dc6-286ed488ec36:1-3319087 | +---------------+----------+--------------+------------------+------------------------------------------------+ 1 row in set (0.00 sec)
- 以root用户登录MySQL server2。
- 进入MySQL控制台。
# cd /opt/mysql/bin
# mysql -u root -p
按照提示信息输入待连接的MySQL服务器的数据库root用户的密码:
Enter Password:
- 停止slave同步进程。
mysql> stop slave;
- 执行同步语句。
mysql> change master to master_host=’10.10.10.31‘,master_user=’root‘,master_password=’Password‘,master_log_file=’binlog.000004′ ,master_log_pos=194;
其中,
- master_host设置为MySQL Server1的地址。
- master_user设置为同步用户名,此处使用root用户。
- master_password设置为同步用户密码。
- master_log_file设置为MySQL Server1的show master status;命令执行结果File列的值。
- master_log_pos设置为MySQL Server1的show master status;命令执行结果Position列的值。
- 开启slave同步进程。
mysql> start slave;
- 查看slave同步信息
mysql> show slave status\G;
... Slave_IO_Running:Yes Slave_SQL_Running:Yes ...
若显示信息中以上两个参数为yes,即说明配置成功。
- 设置server1同步更新server2,步骤与5类似。
- 分别在MySQL Server1和MySQL Server2的控制台执行以下命令,解锁数据库表。
mysql> unlock tables;
- 检测数据库主主同步是否设置成功。
在任意MySQL创建数据库并创建表,插入数据,在另一MySQL查看是否同步成功。