mysql的主从复制原理和配置

 1.mysql基于binlog的主从复制原理:

  mysql的主从复制原理和配置

  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状态。

mysql的主从复制原理和配置

 --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并查看状态:

mysql的主从复制原理和配置

 3.主从出现延时该怎么办?

--延迟是怎么产生的

1,当master tps高于slave的sql线程所能承受的范围

2,网络原因

3,磁盘读写耗时

--如何判断延迟

1,show slave status \G; 查看sends_behind_master 的值。

mysql的主从复制原理和配置

2, mk-heartbeat timestamp进行时间戳的判断。

--我们怎么解决延迟问题

1,配置更高的硬件资源

2,把IOthread 改变成 多线程的方式

​ mysql5.6 库进行多线程的方式

​ GTID进行多线程的方式

3, 应用程序自己去判断(mycat有这么方案)