MYSQL 主从复制
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