标签:冲突 截断 process 控制 操作 name last ide 文件
一、mysql复制原理复制中的线程及文件
2.1、主库
Dump(IO) thread:在复制过程中,主库发送二进制日志的线程
2.2、从库
IO thread:向主库请求二进制日志,并且接受二进制日志的线程
SQL thread:执行请求过来的二进制的线程
2.3、主库
binlog文件:主库的二进制日志
2.4、从库
relaylog:中继日志,存储请求过来的二进制日志
master.info:
1、从库连接主库的重要参数(user,passwd,ip,port)
2、上次获取过的主库二进制日志的位置
relay-log.info
存储从库SQL线程已经执行过的relaylog日志位置
主从复制前提
1、两台以上MySQL实例(可以是多台物理机,也可是mysql实例)
2、主库要开启二进制日志
3、主库要提供复制相关的用户需要用到 replication slave一个比较特殊的权限
4、从库需要将和主库相差的数据进行追加,一般情况下认为备份数据库,恢复到从库上
5、从库应该从恢复后的时间点开始自动从主库获取二进制日志开始自动同步主库数据,我们需要告诉从库,从哪儿开始复制二进制日志进行学习
(1)不需要追加的情况
主和从同时搭建的新环境,就不需要备份主库数据,恢复到从库了,直接从第一个binlog(mysql-bin.000001)开头位置(120)
(2)如果主库已经工作了很长时间了,我们一般需要备份主库数据,恢复到从库,然后从库从备份的时间点起自动进行复制
mysqldump -S /data/3307/mysql.sock -A -R --triggers --master-data=2 --single-transaction >/tmp/full.sql
sed -n ‘22p‘ /tmp/full.sql
-- CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000002‘, MASTER_LOG_POS=325
恢复到从库:
mysql -S /data/3308/mysql.sock
mysql> set sql_log_bin=0;
mysql> source /tmp/full.sql
8、从库开启主库
mysql -S /data/3308/mysql.sock
help change master to
CHANGE MASTER TO
MASTER_HOST=‘10.0.0.52‘,
MASTER_USER=‘repl‘,
MASTER_PASSWORD=‘123‘,
MASTER_PORT=3307,
MASTER_LOG_FILE=‘mysql-bin.000002‘,
MASTER_LOG_POS=325;
开启主从(开启IO/SOL线程)
start slave
9、查看主从状态
show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
10、主从重要状态信息介绍
show slave status\G
Slave_IO_Running: Yes(io线程状态)
Slave_SQL_Running: Yes(sql线程状态)
Last_IO_Errno: 0(io线程异常状态码)
Last_IO_Error: (io线程异常详细信息)
Last_SQL_Errno: 0(sql线程状态码)
Last_SQL_Error: (sql线程异常详细信息)
2、主库二进制文件丢失或损坏
解决方案;
stop slave;
reset slave all;
从新备份恢复
change master to
start slave;
处理方法跳过这个错误
stop slave;
set global sql_slave_skip_counter=1;
start slave;
/etc/my.cnf
slave-skip-errors=1032,1062,1007
但是,以上操作有的时候时候是有风险的,最安全的方法是从新构建新的主从
如何预防?
修改从库为只读库
set global read_only=1;
vim /etc/my.cnf
read_only=1(这个参数只能控制普通用户)
默认的主从复制是异步的过程
主库原因
1、主库做修改操作之后,才会记录二进制日志
2、主库的压力特别大(大事务,多事物)
3、从库数量多,导致domp线程繁忙
从库原因:
1、relay-log写入慢
2、sql线程慢(主从硬件差异较大)
解决思路
主库
1、sync_binlog=1(1表示只要主库做了一次commit,二进制日志就会立刻刷新到磁盘,如果等于0要根据系统binlog决定)
2、大事物拆分成小事物,多事物进行分离
3、使用多级主从,分库分表架构
4、将binlog放在ssd或者flash上,高性能存储
从库
1、将relay放到ssd或者flash上
2、尽量选择和主库一样的硬件配置
标签:冲突 截断 process 控制 操作 name last ide 文件
原文地址:https://blog.51cto.com/13268236/2361501