MySQL双主配置的项目实践

 更新时间:2024年12月10日 10:00:14   作者:热干面先拌拌  
本文详细介绍了配置两台MySQL服务器之间的主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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双主配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • mysql下普通用户备份数据库时无lock tables权限的解决方法

    mysql下普通用户备份数据库时无lock tables权限的解决方法

    mysql使用普通用户备份出现无lock tables权限的解决方法,需要的朋友可以参考下。
    2011-10-10
  • Mysql中group by 使用中发现的问题

    Mysql中group by 使用中发现的问题

    当使用MySQL的GROUP BY语句时,根据指定的列对结果进行分组,这种情况通常是由于在 GROUP BY 中选择的字段与其他非聚合字段不兼容,或者在 SELECT 子句中没有正确使用聚合函数所导致的,本文给大家介绍Mysql中group by 使用中发现的问题,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • 解析Mysql临时表及特点

    解析Mysql临时表及特点

    本篇文章是对Mysql中的临时表以及特点进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL中union和order by同时使用的实现方法

    MySQL中union和order by同时使用的实现方法

    下面小编就为大家带来一篇MySQL中union和order by同时使用的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • MySQL操作数据库实战指南

    MySQL操作数据库实战指南

    这篇文章主要给大家介绍了关于MySQL数据库操作库的相关资料,MySQL数据库是一个关系型数据库管理系统,所采用的SQL语言是用于访问数据库最常用的标准会语言,需要的朋友可以参考下
    2023-07-07
  • MySQL对小数进行四舍五入的操作实现

    MySQL对小数进行四舍五入的操作实现

    数学函数是MySQL中常用的一类函数,其主要用于处理数字,包括整型和浮点数等等,本文主要介绍了MySQL对小数进行四舍五入的操作实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • MySQL高效导入多个.sql文件方法详解

    MySQL高效导入多个.sql文件方法详解

    MySQL有多种方法导入多个.sql文件,常用的有两个命令:mysql和source,如何提高导入速度,在导入大的sql文件时,建议使用mysql命令
    2018-10-10
  • Mysql使用concat函数实现关键字模糊查询功能(列表数据过滤含前后端代码)

    Mysql使用concat函数实现关键字模糊查询功能(列表数据过滤含前后端代码)

    在我们的平时开发中经常会遇到根据条件过滤列表数据项,今天在做自己项目的时候就遇到了这个问题,正好借着这个机会分享我的思路以及相关的代码,对Mysql使用concat函数实现关键字模糊查询功能感兴趣的朋友一起看看吧
    2023-02-02
  • Centos 7下使用RPM包安装MySQL 5.7.9教程

    Centos 7下使用RPM包安装MySQL 5.7.9教程

    这篇文章主要为大家详细介绍了Centos 7下使用RPM包安装MySQL 5.7.9的教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • MySQL从一个表中查出数据并插入到另一个表的详细处理方案

    MySQL从一个表中查出数据并插入到另一个表的详细处理方案

    这篇文章主要给大家介绍了关于MySQL从一个表中查出数据并插入到另一个表的详细处理方案,文中通过图文介绍的非常详细,对大家学习或者使用MySQL具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-12-12

最新评论