MySQL主从复制原理及轻松实现步骤

前言

这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题

于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。

微信小程序搜索:Python面试宝典

或可关注原创个人博客:https://lienze.tech

也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习

主从复制

什么是主从复制?

主从复制至少需要两台服务器,或两个mysql服务,可以配置一主多从,多主多从

建立与某个业务数据库一样的数据库环境,即为主从复制,一般情况下,主库用以写,而从库用以读


为什么要搭建主从复制?

  1. 构建主从热备,当某天数据库宕机或或数据丢失情况,可以有备份数据库继续工作
  2. 降低IO频次,多库之间可以合理分配读写压力,提高单个数据库服务的数据库访问压力
  3. 隔离读写,在某些锁表情况下,可以使数据库读操作继续进行

主从复制原理

利用数据库bin-log二进制文件,该文件包含有数据库操作的所有SQL语句

复制该文件至其余数据库服务中并执行即可


主从复制过程

  1. 当主库具有新数据时,主库会被从库请求,建立线程进行连接,用以传输binlog日志

  2. 从库开启两个线程

A线程:也叫做IO线程,连接主库,并请求binlog中的更新记录至从库中,写入至从库的relaylog文件中

B线程:也叫做SQL线程,读取relaylog文件中的更新操作并执行

  1. 如果,有多个从库同时存在,主库会为每个从库建立一个binlog输出线程

请添加图片描述

set global validate_password_policy=LOW;
set global validate_password_length=6;

环境

此处以一主一丛为例,系统环境

  • 主库(master):192.168.1.100
  • 从库(slave):192.168.1.101

主库配置

主库配置

server-id = 1
log-bin=mysql-bin # 开启log bin
expire_logs_days=7 # 日志保存时间

server-id:同步数据中必须包含server-id,用于标识该语句最初是从哪个server写入

每个slave端只能有一个线程在master端连接,如果两个salve端的server-id一致,一个连接成功之后,前一个连接将会被断开

主主同步时,避免数据同步陷入死循环

  • 主库创建用户,用以从机连接获取binlog日志
grant replication slave on *.* to 'master'@'%' identified by '123456';
flush privileges;
grant all privileges on *.* to master@'%' identified by "123456";
  • 查看master状态
show master status;
  • 记录上条命令返回的binlog文件名,Position属性,从机连接的时候要用
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

从库配置

  • 从库配置修改
server-id=11

masterslave端的server-id不能一样,salve端无需开启log-bin功能

  • 从库指定master,执行如下
change master to master_host='101.200.197.159', master_port=3306, master_user='master', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=245;
  • 启动从机
start slave;

同步特定的库

主机处配置
binlog-do-db=xxxx   # 二进制日志记录的数据库
binlog-ignore-db=xxxx # 二进制日志中忽略数据库
从机处配置
replicate-do-db    # 设定需要复制的数据库
replicate-ignore-db # 设定需要忽略的复制数据库
replicate-do-table  # 设定需要复制的表
replicate-ignore-table # 设定需要忽略的复制表
replicate-wild-do-table # 同replication-do-table功能一样,但是可以通配符
replicate-wild-ignore-table # 同replication-ignore-table功能一样,但是可以加通配符

常见错误

  • mysql->mariadb版本问题
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from position > file size'

MySQL5.6开始引入了binlog_checksum全局变量

MySQL会将eventCRC32校验值也写入binlog,显然MariaDB在分析日志的时候不会考虑该信息,导致解析出错

show variables like '%binlog%';
set global binlog_checksum=NONE;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李恩泽的技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值