mysql 主从实时性_MySQL 主从复制(实时热备)原理与配置

MySQL是现在普遍使用的数据库,但是如果宕机了必然会造成数据丢失。为了保证MySQL数据库的可靠性,就要会一些提高可靠性的技术。MySQL主从复制可以做到实时热备数据。本文介绍MySQL主从复制原理及其配置过程。

术语:主从复制——master slave replication(M-S模式)。

用途

备份

读写分离

高可用和故障切换(需要做HA)

MySQL升级测试

原理

实际上,它的原理思路很简单。MySQL 中有一种日志叫做 bin 日志(二进制日志),这个日志会记录下所有修改了数据库的SQL语句。主从复制的原理其实就是"从"服务器向"主"服务器请求这个日志文件,"主"服务器会把这个 bin 日志复制到"从"服务器上执行一遍,这样"从"服务器上的数据就和"主"服务器上的数据相同了。

流程图:

e0050ebf9d3ef63556208c715b2baed9.png

图解:

主服务器必须启用二进制日志(log-bin),记录任何修改了数据库数据的事件;

从服务器开启一个线程(I/O Thread)把自己扮演成 MySQL 的客户端,通过 MySQL 协议,请求主服务器的二进制日志文件中的事件;

主服务器启动一个线程(Dump Thread),检查自己二进制日志中的事件,跟对方请求的位置对比,如果不带请求位置参数,则主服务器就会从第一个日志文件中的第一个事件一个一个发送给从服务器;

从服务器接收到主服务器发送过来的数据把它放置到中继日志(relay log)文件中。并记录该次请求到主服务器的具体哪一个二进制日志文件内部的哪一个位置(主服务器中的二进制文件会有多个,其名结尾以6位数递增);

从服务器启动另外一个线程(SQL Thread ),把 relay log 中的事件读取出来,并在本地再执行一次。

配置过程

主服务器(Master)

启用二进制日志 log-bin;

设置一个全局唯一的 server_id;

提前准备好一个有复制权限(replication slave,replication client)的用户。

从服务器(Slave)

启动中继日志 relay-log;

设置一个全局唯一的 server_id;

使用主服务器提供的有复制权限的用户连接至 Master;

启动复制线程。

配置演示

测试环境

主服务器:192.168.43.75

从服务器:192.168.43.111

mysql版本:mysql-8.0

系统:主 Windows10,从 Windows7

主服务器配置

1.配置 my.ini

log-bin=master-log-bin

server-id=1

innodb-file-per-table=ON

2.重启服务,并进入MySQL

db18064e416fe4335842e37c51c05505.png

查看主服务器状态信息:

a511f68fb3df70dc0df1864659f5199b.png

注:这里的文件名和位置值会在后面的配置中用到。

3.给复制用户授权

grant replication slave, replication client on *.* to repl_user@192.168.43.111;

或者对现有的超级用户修改可访问主机IP:

update user set host='%' where user='root';    # '%' 代表所有局域IP

一定要刷新权限:

flush privileges;

主服务器配置完成。

从服务器配置

1.配置 my.ini

log-bin=slave-log-bin

relay-log=relay-log

relay-log-index=relay-log.index

server-id=2

innodb_file_per_table=ON

2.重启并进入MySQL服务(略)

3.用主服务器提供的复制用户连接主服务器

change master to master_host='192.168.43.75',master_port=3306,master_user='repl_user',master_password='123456',master_log_file='master-log-bin.000005',master_log_pos=155;  # 这里的 master 日志文件和位置必须与主服务器当前状态一致!

4.启动复制线程

bf66b33e04a3b150906a6b60758cb179.png

此时会启动 IO Thread 和 SQL Thread 这两个线程。

(停止复制线程:stop slave)

查看从服务器状态信息:

028a79100fe6a10580d70666067ef8a5.png

MySQL主从配置到此完成。

测试

在主服务器上新建一个数据库test:

5e6d4ceede1d0b94bb0939105a0c06d4.png

d2d8d04be15ccf726a2206eb01ff0306.png

8b0f94bae1f3816aab4b103aa68793dd.png

在从服务器上查看:

6819d72582deb43cb125786bb6f39c14.png

83fcca58cf0ae4dc7e6fe2c4c8df122b.png

测试通过,完美。

常见问题处理

当我们配置好MySQL主从同步时,原本是可以实现主从同步的,但是重启机器后就发现无法同步了。

MySQL Replication 中 slave 机器上有两个关键的线程,死一个都不行,一个是 Slave_IO_Running,一个是 Slave_SQL_Running。一个负责与主机的 IO 通信,一个负责自己的 slave mysql 语句执行。

1)如果是Slave_SQL_Running:No,如图。

fe0309a705d68b83c1deddd0cfb303ef.png

解决办法:

> stop slave;

> set global sql_slave_skip_counter=1;

> start slave;

c690a6b90be6590cc9f2d4593dc0bc9c.png

2)如果是Slave_IO_Running:No,如图。

6a69d237e11f9cfcfa257f25dbea7c5b.png

解决办法:

查看主服务器状态:

11eadad509f81e37b5fe6baa982df3d6.png

查看从服务器状态:

4dc9530813e5b77df0d108a72a901fe0.png

找到问题所在:Master_Log_File没有对应。

> stop slave;

> change master to master_log_file='mysql-bin.000026',master_log_pos=0;

> slave start;

> show slave status\G;

9c9af4f30da03196f897eb8d376c0a28.png

得解。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值