1、配置的前置条件
- 已知a服务器ip=192.168.0.11,b服务器ip=192.168.0.12
- 建议使用相同版本的mysql,若是小版本跨越一般是兼容的,如a的mysql版本是5.7.1,b的mysql版本是5.7.2;
- 配置前需要保证两个数据库的数据一致,建议将a数据库同步到b数据库,以保证配置前a、b两台数据库的数据是一致的;
- 确保2台数据库的网络端口是互通的,如:3306;
- 配置期间不能有新数据的写入;
2、配置
2.1 配置b服务器mysql同步a服务器mysql数据
2.1.1 修改a服务器的mysql配置文件my.cnf,添加以下内容
[mysqld] #master a slave config #主机a的server id,需要和主机b的不一致 server-id=1 #二进制日志文件名 log-bin=master-a-bin #二进制日志格式 binlog-format=row #设置日志最大为1g max_binlog_size=1024m #设置binlog文件最大保留天数30天 expire_logs_days=30 #数据库宕机恢复后,自动同步缺少的数据 relay_log=mysql-relay-bin relay_log_recovery=1 #设置自增id的初始值为1,每次增量为2 auto_increment_offset=1 auto_increment_increment=2 #开启gtid gtid_mode=on enforce_gtid_consistency=1 #需要同步的数据库,如test1,test2,根据实际情况配置 binlog-do-db=test1 binlog-do-db=test2 #不要同步的数据库 binlog-ignore-db=mysql,information_schema,performance_schema,sys #不要同步的表 #replicate-ignore-table=库名.表名
配置完成后,保存并重启一下mysql
2.1.2 登录a服务器mysql,创建b的数据同步账号
同步账号:repl_b,同步密码:123456,具体命令步骤如下
mysql> grant replication slave on *.* to '同步账号'@'主机b的ip' identified by '同步密码'; #登录a服务器mysql,创建b的数据同步账号 mysql> flush privileges; #刷新权限 mysql> reset master; #重置master信息 #说明:同步开始前,不要有数据写入,否则影响bin-log日志文件 mysql> flush tables with read lock; #锁表命令,在同步配置完成后再使用解锁表命令:unlock tables; mysql> show master status; #查看并记录好当前bin-log的文件名和位置,记录bing-log文件名:master-a-bin.000001,日志位置:154
2.1.3 登录b服务器修改mysql的配置文件my.cnf,设置a为b的master,添加以下
#master b slave config #主机b的server id,与主机a的id不一致 server-id=2 #二进制日志文件名 log-bin=master-b-bin #二进制日志格式 binlog-format=row #设置日志最大为1g max_binlog_size=1024m #设置binlog文件最大保留天数30天 expire_logs_days=30 #数据库宕机恢复后,自动同步缺少的数据 relay_log=mysql-relay-bin relay_log_recovery=1 #设置自增id的初始值为1,每次增量为2 auto_increment_offset=2 auto_increment_increment=2 #开启gtid gtid_mode=on enforce_gtid_consistency=1 #需要同步的数据库,如test1,test2,根据实际情况配置 binlog-do-db=test1 binlog-do-db=test2 #不要同步的数据库 binlog-ignore-db=mysql,information_schema,performance_schema,sys #不要同步的表 #replicate-ignore-table=库名.表名
配置完成后,保存并重启以下mysql
登录主机b的mysql,设置a为b的master
ps:如果开启了全局事务id(gtid_mode=on),那么可以不用指定master_log_pos参数,可去掉此参数
#备份好需要同步的数据库,把备份好的数据库导入到主机b上 #登录主机b的mysql,设置a为b的master #停止b的slave mysql> stop slave; #设置b的master的为a,通过repl_b同步a的数据 mysql> change master to master_host='主机a的ip',master_user='同步账号',master_password='同步密码',master_log_file='bing-log文件名',master_log_pos=日志位置; #开启b的slave mysql> start slave; #确定b的slave是否同步成功 mysql> show slave status\g; #查看输出结果中slave_io_running和slave_sql_running都为yes时,表示成功
到这步已经完成了b服务器mysql同步a服务器数据,下面再进行设置a同步b服务器的mysql
2.2 配置a服务器mysql同步b服务器mysql数据
2.2.1 登录b服务器的mysql,创建a服务器的mysql同步账号,同步账号:repl_a,密码:123456
#登录b的mysql mysql> grant replication slave on *.* to '同步账号'@'主机a的ip' identified by '同步密码'; mysql> flush privileges; #说明:同步开始前,建议不要有数据写入,否则影响bin-log日志文件 #重置master信息 mysql> reset master; #锁表命令,同步完成后使用解锁表命令:unlock tables mysql> flush tables with read lock; #查看并记录好当前bin-log的文件名和位置,记录bing-log文件名:master-b-bin.000001,日志位置:154 mysql> show master status;
2.2.2、登录a服务器mysql,设置b为a的master
#登录a主机,停止slave mysql> stop slave; #设置a的master为b mysql> change master to master_host='主机b的ip',master_user='同步账号',master_password='同步密码',master_log_file='master-b-mysql-bin.000001',master_log_pos=154; #启动slave mysql> start slave; mysql> show slave status\g; #查看输出结果中slave_io_running和slave_sql_running都为yes时,表示成功
3、解锁数据库表的锁定
在a服务器和b服务器的mysql里面执行解锁命令:unlock tables
mysql> unlock tables;
4、进行数据库的读写同步测试
在a更改(插入、修改、删除)的数据会实时同步至b的数据库,同样b更改数据也会实时同步至a
到此这篇关于mysql双主配置的项目实践的文章就介绍到这了,更多相关mysql双主配置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论