首页 > 数据库 >MySQL双主配置

MySQL双主配置

时间:2024-10-30 15:49:11浏览次数:3  
标签:同步 slave log 配置 master mysql 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

标签:同步,slave,log,配置,master,mysql,MySQL,双主
From: https://blog.csdn.net/m0_74766687/article/details/143188811

相关文章

  • Oracle、MySQL、ClickHouse的通用AES256加解密如何实现?
     Oracle、MySQL、ClickHouse的通用AES256加解密如何实现? 前段时间研究了加密算法aes,写了个文档,分享到博客上来。防。1  说明应XXX安全生产需求,对目标库目标表业务字段敏感信息进行加密密文存放,查询时通过解密得到明文进行数据使用,要求使用AES256。目前公司所使用主要......
  • MySQL数据库详细介绍:从入门到进阶
    MySQL是一个广泛使用的开源关系型数据库管理系统,被广泛应用于Web应用程序、企业级应用以及各种数据分析场景。本文将详细介绍MySQL数据库的基本概念、安装、配置、管理以及优化等方面的内容,帮助大家从入门到进阶了解MySQL。 一、MySQL安装可以通过以下链接下载MySQL安装包:......
  • MySQL 篇
    MySQL篇整体内容优化-如何定位慢查询如何定位慢查询问答环节优化-SQL语句执行的很慢,如何分析解决思路问答环节优化-索引概念及索引底层数据结构数据结构对比问答环节优化-聚簇索引、非聚簇索引、回表查询回表查询问答环节优化-覆盖索引、超大......
  • docker 安装gitea后,查找对应配置文件路径
    不能直接在系统的根目录访问/data/gitea/conf/app.ini,因为这个路径通常是在Docker容器内的。如果你想在主机上访问这个文件,必须首先确认它是否已挂载到主机的某个目录。如果你想访问app.ini,请按照以下步骤操作:检查Docker容器的挂载:使用以下命令查看容器的详细信息,特别......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现九
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现十
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一......
  • 为什么MySQL单表不能超过2000万行? (1)
    ​最近看到一篇《我说MySQL每张表最好不要超过2000万数据,面试官让我回去等通知》的文章,非常有趣。文中提到,他朋友在面试的过程中说,自己的工作就是把用户操作信息存到MySQL里,因为数据量超大(5000万条左右),需要每天定时生成3张表,然后将数据取模分别存到这三张表里。下面是两人的对......
  • 在VSCode配置PHP开发环境(XAMPP版)
    下载XAMPP官网下载地址:https://www.apachefriends.org/download.html!!下载速度十分慢!!安装XAMPP:·修改安装地址到D盘、·安装英文版下载php官网下载地址:https://windows.php.net/download#php-8.2选择线程安全的zip压缩包配置环境变量:在高级环境变量中修改系统变量......
  • MySQL的临时表空间
    InnoDB使用会话临时表空间和全局临时表空间。会话临时表空间会话临时表空间用于存储用户创建的临时表,以及在InnoDB被配置为磁盘上内部临时表的存储引擎时由优化器创建的内部临时表。从MySQL8.0.16开始,磁盘上内部临时表使用的存储引擎是InnoDB。(以前,存储引擎由internal_tmp_d......
  • windows下Mysql8.0.12安装详解
    MySQL的安装过程还是比较繁琐,为了以后安装节约时间,将其详细安装过程总结如下:1>下载对应版本下载地址:https://dev.mysql.com/downloads/mysql/2>将下载的.zip文件解压到需要安装的目录下,在该目录下创建一个名为data的空文件夹和一个my.ini文件3>配置初始化的my.ini文件......