美文网首页
MYSQL 主从复制

MYSQL 主从复制

作者: _li | 来源:发表于2021-12-11 18:11 被阅读0次

     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

    相关文章

      网友评论

          本文标题:MYSQL 主从复制

          本文链接:https://www.haomeiwen.com/subject/erfhfrtx.html