MySQL数据库主从双向同步

  • 一 环境
  • 二 主从同步
    • 1.主服务器配置
    • 2.从服务器配置
  • 二 双向同步
  • 三 其他相关参数配置
  • 四 后记

一 环境

由于开发需要,需要两台服务器进行负载均衡,两台服务器配置完全相同,均为windows server 2012,且MySQL数据库版本为Mysql5.6,连接工具使用Navicat Premium 12,使用默认安装。
MySql数据库配置文件 My.ini 位于C:\ProgramData\MySQL\MySQL Server 5.6。
假设两台服务器IP分别为:192.168.1.101,192.168.1.102
注意,在以下操作中最好不要有数据的读写,且保证两台服务器上要同步的数据库完全一致

二 主从同步

1.主服务器配置

我们以192.168.1.101为主服务器,以192.168.1.102为从服务器,让102服务器主动来同步101上的内容。
一般情况下,我们使用数据库的二进制日志文件来同步数据。
1.打开主服务器的mysql数据库配置文件my.ini,找到server-id=1这部分内容,在后面添加对应的内容。

# 数据库服务ID,同步时保证不重复即可
server-id=1
# 需要记录日志的数据库,这里记录test数据库的日志,有多个数据库时再来一条即可
binlog-do-db=test1
# 需要同步数据的数据库
replicate-do-db=test1# 不需要同步数据的数据库,有多个数据库时再来一条即可,如果没有则可以不用
replicate-ignore-db=mysql1
# replicate-ignore-db=mysql2# 日志文件的名称
log-bin=mysql_log_bin

修改完成之后保存,然后重启MySQL服务,使用命令或者在服务中重启都可以

net stop MySQL56
net start MySQL56

重启完成之后在MySql终端使用 show master status 查看状态

此处记录下 FilePosition 的值,分别为 mysql_log_bin.000001157,这两个值是同步成功的关键。
一切就绪好之后,需要添加一个允许进行数据库同步的用户,当然也可以使用其他拥有同步权限的账号,但是这里不推荐,建议创建一个只有同步权限且仅允许要同步的服务器访问。这里添加一个仅允许 192.168.1.102 访问且只有同步权限的用户。

--  添加用户 backuser,密码为 123456
grant replication slave on *.* to 'backuser'@'192.168.1.102' identified by '123456';
-- 刷新权限让其立即生效
flush privileges;

在mysql8.0版本中,下列的SQL语句无法执行,需要拆分成两句

create user 'backuser'@'192.168.1.102' identified by '123456';
grant replication slave on *.* to 'backuser'@'192.168.1.102';
flush privileges;

也可以在数据库连接工具中直接添加,只要赋予对应的权限即可,我是用的是Navicat Premium 12


至此,主服务器配置完成

2.从服务器配置

1.打开192.168.1.102的数据库配置文件 my.ini,找到 Server Id 节点,修改为以下内容

# Server Id. 保证不和另一台服务器的Server Id重复即可
server-id=2
# 要同步的数据库
replicate-do-db=test1
# 中继日志,一般情况下它在MySQL主从同步读写分离集群的从节点才开启
relay-log=mysqld-relay-bin

修改完成之后保存,重启数据库服务,然后使用 sql 语句设置需要同步的数据库的信息

--
CHANGE MASTER TO
MASTER_HOST='192.168.1.101',
MASTER_USER='backuser',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql_log_bin.000001',
MASTER_LOG_POS= 157;

记录的 FILE 的值就是此处 MASTER_LOG_FILE 的值,Position 的值就是此处 MASTER_LOG_POS 的值。
注意,运行前最好再去主服务器上运行 show master status 查一下 Position 的值,如果设置期间数据库发生过变化,这个值也会变化。
如果已经存在进行中的同步,则先运行 stop slave 停止,再运行以上内容。
最后使用 start slave 开启同步即可。

-- 停止同步
STOP SLAVE;
-- 开启同步
START SLAVE;
-- 使用账号密码启动同步(推荐)
start slave user='backuser' password='123456';
-- 查看同步状态
show slave status

以上步骤全部完成时,使用 show slave status 查看同步的状态。

如果在cmd窗口中时,则可以使用 show slave status\G; 来查看同步的状态

如果 Slave_IO_RunningSlave_SQL_Running 的值均为 Yes,则说明数据库主从同步的设置已经完成。
如果不是的话,无非就是密码不对或者Pos值不对,再或者防火墙拦截等原因,仔细检查一下即可解决。
以上内容可用于数据库读写分离时,主数据库负责写入数据,从数据库负责读数据。
Master_Info_File 表示主机的配置数据存放的位置,根据地址,我们可以找到该文件,打开查看主机配置数据

一起来看看这个 master.info 文件的内容

虽然一部分内容看得懂,但是大部分内容看起来还是很懵逼,这是因为主机的配置数据默认以 File 的形式保存了。我们现在修改 my.ini文件的内置信息,加上 master-info-repository = TABLE ,然后重启MySQL服务,配置就会生效。
注意:master-info-repository 只有 TABLEFile 两个值。

port=3306
# 禁用IP反向解析域名
skip-name-resolve
# 将Master配置信息写入到表中
master-info-repository = TABLE
# 将中继日志信息写入到表中
relay-log-info-repository = TABLE

重启以后再次查看从机状态

发现现在master的配置数据被存储到 mysql 数据库的 slave_master_info 的表中了,找到这个表打开看一下。

发现原先存在于 master.info 中的数据,此时被保存到这里来了,而且原先的 master.info 文件也不见了。而且这张表还自带注释,这样就很容易知道各个参数是做什么的了。

关于中继日志的配置 relay-log-info-repository,与 master-info-repository 配置一样,配置完成后在 slave_relay_log_info 表中找到相关参数。

二 双向同步

双向同步即在主从同步的基础上调换角色再设置一遍即可,两台服务器互为主从。

三 其他相关参数配置

  1. skip-name-resolve 禁用IP反向解析域名
    数据库错误日志中会提示连接不到xxx.xxx.xxx.xxx的主机,这是由于IP反向解析域名造成的,如果IP未绑定域名,则会提示以上内容,在MySQL.ini中的 [mysqld],下面添加 skip-name-resolve,然后重启MySQL服务,则该提示不会再出现,但是注意,禁用IP反向解析域名后,数据库连接只能使用IP地址去访问,localhost 将不被识别。所以如果你的 root 账户的 Host 如果是 localhost 的话,则需要修改为 127.0.0.1。
[mysqld]
port=3306
# 禁用IP反向解析域名
skip-name-resolve
  1. slave_net_timeout 从机重连超时时间
    简单来说就是当在 slave_net_timeout 时间内主机(master)未向从机(slave)发送任何数据时,从机(slave)就认为连接已断开,然后去重新连接主机(master),使用 show variables like ‘slave_net_timeout’ 可以查看当前 slave_net_timeout 的默认值,以秒数为单位。

    可以根据实际情况去设置重连的时间,在MySQL5.7以后默认是60s,前边的版本都是3600s。
-- 重设 slave_net_timeout 值
set global slave_net_timeout=50;
-- 重新查询 slave_net_timeout 的值
show variables like 'slave_net_timeout';
  1. master_heartbeat_period 主机心跳时间
    当主机(master)间隔 master_heartbeat_period 时间未更新数据时,主机(master)会主动向从机(slave)发送一个心跳告知从机(slave),表示主机(master)还健在。master_heartbeat_period 默认是 slave_net_timeout 时间的一半,但是当 slave_net_timeout 修改时,master_heartbeat_period 并不会去修改。

使用 sql 语句来查询几个关键配置参数

select Connect_retry,Heartbeat, Retry_count from mysql.slave_master_info;


可以看到,现在的 Heartbeat (即master_heartbeat_period)值是 1800s,根据实际实际需求修改即可。
4. master_connect_retry 重连时间间隔
Connect_retry(即master_connect_retry)表示从机(slave)重新连接主机(master)的时间间隔,以秒数为单位。
可以使用 change master to master_connect_retry=xx 修改。

change master to  master_connect_retry=50

还可以在 mysql.slave_master_info 表中直接进行修改,推荐使用命令修改。
5.master_retry_count 最大重试次数
表示从机尝试连接主机的最大尝试次数,可根据实际情况修改。修改方式同上。

change master to  master_retry_count=1000

四 后记

部分细节描述的不够详细,后边有机会再补充。
过程中踩到很多坑,各种搜搜搜,最终以自己的理解编辑一篇,方便查阅。
1.2022.04.20 补充第三节内容,修改、补充前两节中的将master配置信息存储到表中的方式。

MySQL数据库主从双向同步相关推荐

  1. mysql数据库主从不同步_MySQL数据库之mysql主从数据库不同步的2种解决方法

    本文主要向大家介绍了MySQL数据库之mysql主从数据库不同步的2种解决方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 今天发现Mysql的主从数据库没有同步 先上Mas ...

  2. mysql数据库主从不同步的解决方法

    故障描述: 进入从数据库 mysql> show slave status\G; 结果如下:...Slave_IO_Running: YesSlave_SQL_Running: NoLast_E ...

  3. mysql数据库主从不同步_mysql数据库主从不同步的解决方法

    故障描述: 进入从数据库 mysql> show slave status\G; 结果如下: ... Slave_IO_Running: Yes Slave_SQL_Running: No La ...

  4. mysql数据没有同步更新_MySQL数据库主从没有同步的两种解决方案

    MySQL数据库主从没有同步的两种解决方案 发布时间:2020-05-13 13:54:57 来源:亿速云 阅读:190 作者:三月 栏目:数据库 下文主要给大家带来MySQL数据库主从没有同步的两种 ...

  5. mysql主从双向同步复制

    2019独角兽企业重金招聘Python工程师标准>>> Mysql 主从双向同步复制 MySQL支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务 ...

  6. mysql数据库主从同步过程详述(三)

    续mysql数据库主从同步过程详述(二) 在此说明下:在最后试验过程中,当查看从库状态的时候,IO_Running显示为no,从error_log中看到如下报错提示: 120523  0:55:31 ...

  7. Linux下MySQL数据库主从同步配置

    操作系统:CentOS 6.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备篇: 说 ...

  8. mysql数据库主从同步配置教程--数据库同步

    背景: 最近有一个mysql数据库同步的需求,我用了mysql主从同步的方法来实现.下面把步骤记录一下. 环境和拓扑 操作系统:Centos6.6 X64 mysql版本:5.1.73 Master: ...

  9. mysql数据库主从同步的原理_mysql数据库主从同步复制原理

    MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQ ...

  10. MySQL异构同步_详解MySQL数据库异构数据同步

    本文主要向大家介绍了MySQL数据库异构数据同步,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 在实现levelDB挂载成MySQL引擎时,发现在实际存储是key-value格式 ...

最新文章

  1. GhostNet : 轻量级网络模型,性能超越MobileNetV3(CVRP2020, 华为诺亚)
  2. qt系统托盘显示、无主窗体
  3. 【HDU4497 GCD and LCM】
  4. chm 能插入公式吗_批量提取表格名称、插入空列,教你三下五除二秒速完成!...
  5. 5 篇 AAAI 2018 论文看「应答生成」
  6. json传输二进制的方案(python版)
  7. python webqq机器人_python模拟开发WebQQ(二)
  8. jQuery:input的value值發生改變時,觸發事件
  9. java 平均分配算法_java 分配算法
  10. 延迟初始化Spring Bean的几种方式
  11. 我眼中的Visual Studio 2010架“.NET研究”构工具
  12. Hue中Sqoop导数报错Could not load db driver class: com.mysql.jdbc.Driver
  13. java子弹集合_Java使用线程并发库模拟弹夹装弹以及发射子弹的过程
  14. 昂达平板不能开机刷机_昂达平板电脑怎么刷机?昂达平板电脑刷机教程
  15. ftp上传下载工具,6款最值得推荐的Windows端ftp上传下载工具
  16. usrp n310测试总结---测试结果篇(不仅仅是测试结果,还有方法哦)
  17. 私链多节点的创建部署
  18. 企业内部流程运转受阻?免费又高效不愧是它
  19. jdk+apache+jboss+mod_jk+openssl--从零开始搭建Linux测试环境
  20. android u盘挂载监听,Android SD卡及U盘插拔状态监听及内容读取

热门文章

  1. 25个很酷的jQuery倒计时脚本–添加动态计数器!
  2. java date获取24点_获取0点和24点时间戳的方式
  3. 【FFmpeg4.1.4 编码】h265编码
  4. 投资起步晚5年,赶上需要1.5倍的汗水+时间
  5. 计算机配置更新怎么关闭,如何关闭戴尔电脑自动更新系统配置
  6. 华为g660获取解锁码
  7. Python将base64编码转换为图片并存储
  8. HFSS印刷偶极子天线(3)
  9. html美化select样式,CSS美化select下拉框
  10. Affinity Photo 一篇上手 及 快捷键大全(纯干货、不墨迹、实用派)(暂缓更新)