mysql的主从复制原理和配置
1.mysql基于binlog的主从复制原理:
1. master将操作记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events)
2. Slave通过I/O Thread异步将master的binary log events拷贝到它的中继日志(relay log);
3. Slave执行relay日志中的事件,匹配自己的配置将需要执行的数据,在slave服务上执行一遍从而达到复制数据的目的。
2.主从复制配置步骤:
--Master的配置
my.cnf加入配置
[mysqld] log-bin=mysql-bin server-id=1 binlog-do-db=test_db
server-id:用于标识唯一的数据库,在从库必须设置为不同的值。
binlog-do-db:指定需要同步的数据库。
客户端登入,并创建主从复制的用户
mysql>create user jack identified by '[email protected]#'; mysql>GRANT REPLICATION SLAVE ON *.* TO 'jack'@'%' IDENTIFIED BY '[email protected]#';
修改完配置并且设置完账号,重启mysql,通过SHOW MASTER STATUS;查看Master db状态。
--Slave的配置
同理配置文件加入如下配置
server-id=2 relay-log=slave-relay-bin relay-log-index=slave-relay-bin.index read_only=1 replicate_do_db=test_db
然后重启mysql,登入客户端
mysql>change master to -->master_host='192.168.8.111', -->master_port=3306, -->master_user='jack', -->master_password='[email protected]#', -->master_log_file='mysql-bin.000001', -->master_log_pos=0;
配置完后开启slave并查看状态:
3.主从出现延时该怎么办?
--延迟是怎么产生的
1,当master tps高于slave的sql线程所能承受的范围
2,网络原因
3,磁盘读写耗时
--如何判断延迟
1,show slave status \G; 查看sends_behind_master 的值。
2, mk-heartbeat timestamp进行时间戳的判断。
--我们怎么解决延迟问题
1,配置更高的硬件资源
2,把IOthread 改变成 多线程的方式
mysql5.6 库进行多线程的方式
GTID进行多线程的方式
3, 应用程序自己去判断(mycat有这么方案)