MYSQL 主从复制

2021-12-11  本文已影响0人  _li

 10- 主从复制

 一. 主从复制介绍1. 高可用

 2.  辅助备份

 3.  分担负载

 4.  复制是MySQL 的一项功能,允许服务器将更改从一个实例复制到另一个实例。

 A. 主服务器将所有数据和结构更改记录到二进制日志中。

 B.  从属服务器从主服务器请求该二进制日志并在本地应用其内容。

 C.  IO:请求主库,获取上一次执行过的新的事件,并存放到relaylog

 D.  SQL:从relay-log中将sql语句翻译给从库执行

 二. 主从复制的原理

 1.  主从复制的前提

 A.  两台汇总两台以上的服务器

 B.  主库要开启二进制日志

 C.  主要要有复制用户

 D.  主库的server_in和从库不同

 E.  从库需要开启复制功能前,要获得导主库的全备(主库别分,并记录binlog位置)

 F.  从库第一次开启主从复制时,必须获知主库ip,prot,user,password,log_file,pos

 G.  从库要开启相关进程IO ,SQL

 H.  从库需要记录复制相关用户信息,还应该记录到上次已经从主库请求到哪个日志

 I.  从库请求过来的binlog,首先要存下来,并执行binlog,执行过的信息保存下来

 2.  主从复制涉及到的文件和线程

 A.  主库

 a)  主库binlog:记录主库发生过的修改事件

 b)  Dump thread:给从库传送(tp)二进制日志线程

B. 从库

 a)  Realy-log(中继日志):存储所有主库TP过来的binlog事件

 b)  master.info:存储复制用户信息,上次请求到主库binlog位置点

 c)  IO thread:接受主库发送过来的binlog日志,也是从库请求主库的线程

 d)  SQL thread:执行主库TP过来的日志

 B.  原理

 a)  通过change master to语句告知从库主库的ip prot user password file pos

 b)  从库通过start slave命令开始复制IO和SQL线程

 c)  通过IO线程拿着change master to用户密码相关信息,连接到主库验证

 d)  从库连接成功后,会根据binlog的pos问主库,有没有比这个更新的

 e)  主库接受到请求后,比较一下binlog的信息,将最新的数据通过dump给io

 f)  从库通过IO线程接受到主库发送的binlog事件,存储到TCP/IP缓存并返回ACK更新master.info

 g)  将TCP/IP缓存中的内容存到relay-log中

 h)  SQL读取relay-log.info,读取到上次已经执行过的relay-log,继续执行后续的relay-log日志,执行完成后更新relay-log.info

 三. 主从复制涉及到的操作

 1.  主库修改配置文件

 A.  server_id

 B.  Log_bin =mysql-bin (开启二进制日志) binlog_format=row

 2.  主库创建主从复制用户

 A.  grant replication slave on *.* to rep@’%’identified by ‘password’

 3.  从库修改配置文件

 A.  server_id

 B.  查看主库备份文件log_file log_pos 并记录

 C.  执行change master to语句

change master to master_host=’主库ip’,master_user=’rep’,master password=’’master_log_file=’mysql-bin-00000X’,master_log_pos=’’

 D.  Start slave  启动线程

 E.  Show slave status\G查看状态

 F.  Stop slave 停止线程

 G.  Stop slave SQL_thread 停止SQL线程

 H.  Reset  slave  插入数据

 四. 延迟从库

 1.  优点

 A.  修复主从逻辑损坏

 B.  不能保证主库的操作,从库一定能做

 C.  过滤复制

 2.  企业中演示从库一般延时3-6个小时

 3.  延迟从库的原理

 A.  基于主从复制,在SQL线上做延迟,IO线程不受影响

 4.  操作

 A.  停止主从stop slave;

 B.  设置延迟时间(180秒)change master to master_delya= 180

 C.  开启主从start slave

 D.  查看状态show slave status\G

 E.  停止延迟冲库将延迟设置为0即可

 5.  利用延迟从库恢复数据

 A.  停止SQL线程

 B.  截取relaylog到误删除之前的点

 a)  Relay-log-info获取到运行到位置点,作为恢复起点

 b)  分析relay-log的文件内容,获取到误删之前的position

 五. 半同步

 1.  原理:在主从基础上限制IO显示线程,SQL线程不收影响,但是会影响主的性能

 2.  安装:

 3.  主库操作:

 A.  查看是否有动态支持show global variables like ‘have_dynamic_loading’

 B.  按章自带插件insetall plugi rpl_semi_sync_mastersoname  ‘have_dynamic_loading’

 C.  启动插件set global rpl_semi_sync_master_enabled =1;

 D.  设置超时时间set global rpl_semi_sync_master_timeout=1000;

 E.  修改配置文件

 a)  rpl_semi_sync_master_enabled =1

 b)  rpl_semi_sync_master_timeout=1000

 4.  从库操作

 A.  安装半同步插件install plugin rpl_semi_sync_alave soname ‘semisync_lave.so’

 B.  启动插件set global rpl_semi_sync_slave_enabled=1

 C.  重启IO线程stop slave io_thread  start slave io_thread

 D.  编辑配置文件rpl_semi_sync_master_enabled =1

 六. 过滤复制

 1.  主库:

 A.  白名单:只记录白名单中列出来的库的二进制文件binlog-do-db

 B.  黑名单:不记录黑名单列出来的库的二进制文件binlog-ignore-db

 2.  从库:

 A.  白名单:只执行白名单中列出来的库或者表的二进制的中继日志

 a)  --replicate-do-db=text

 b)  --replicate-do-table=text.t1

 B.  黑名单:不执行黑名单中列出来的库或者表的二进制文件

 a)  --replicate-ignore-db

 b)  Replicate-ignore-table

上一篇下一篇

猜你喜欢

热点阅读