主从复制原理:
首先主节点会开启二进制日志,从节点会开启中继日志,从节点会开启io线程检测主节点是否有更新,如果更新了就会向主节点请求二进制事件,主会开启dump线程发送二进制事件,然后保存在从节点的中继日志中,然后从节点开启sql线程,进行获取和存放二进制事件,这就是主从复制。
复制类型:
基于语句复制、基于行复制、混合复制MIXED
复制类型的区别:
基于语句:会有数据丢失情况;传输效率高,减少延迟。表里有一百万条数据,一条sql更新了所有表,基于语句的复制仅需要发送一条sql,而基于行的复制需要发送一百万条更新记录
基于行:做查漏补缺用;安全性更好。
linux时间不准怎么办?
①使用ntp做服务时间同步
安装,修改配置文件,添加server ntp.aliyun.com iburst
②使用chrony做服务时间同步
安装,修改配置文件,添加server ntp.aliyun.com iburst
为什么主从复制有延迟?
①主服务器是多线程,从服务器的sql是单线程,从服务器可能跟不上处理速度
②主服务器负载
③从服务器负载
④网络延迟
⑤从服务器的硬件太差
怎么判断有没有网络延迟?
show slave status\G;查看seconds_behind_master 是否为0,正数是延迟,负数是bug
怎么解决延迟?
①从服务器放在局域网或者网络延迟低的
②更换硬件
③优化配置(双1等等)
主从数据不一致:
①如果业务上对数据要求不高,相差不大,忽略错误,继续同步。
②如果业务上对数据要求高,相差比较大,首先先停主服务器,然后完全备份在恢复到从服务器上,然后重启服务,继续同步。
实验:
①做时间同步:
主服务器的/etc/ntp.cnf里面添加配置,然后重启ntpd
从服务器做时间同步:
也可以做个定时任务crontab -e
②配置主服务器:
1、做mysql的配置文件添加二进制日志,然后重启
2、授权:
3、查看日志文件和日志位置点
③配置从服务器:
1、 做mysql的配置文件添加二进制日志,然后重启
2、进入mysql,进行主从复制的信息校对,并开启服务
3、查看从的状态,如果io线程和sql线程都是yes就成功了
④验证结果
在主服务器上做些简单的数据:
去从的机子上查询:
一般 Slave_IO_Running: No 的可能性:
1、网络不通
2、my.cnf配置有问题(server-id重复)
3、密码、file文件名、pos偏移量不对
4、防火墙没有关闭