前言
MySQL能够将一个 MySQL Server的 Instance 中的数据完整的复制到另外一个 MySQL Server 的 Instance 中,虽然复制过程并不是实时而是异步进行的,但是延时非常之少
原理方面点击:https://blog.csdn.net/Francis123580/article/details/80809596
搭建步骤
1. 修改主服务器配置
- 添加用户:
mysql > Create user repl identified by ‘repl';
- 授权用户:
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl' ;
- 修改my.cnf配置文件:
vim my.cnf
- 在 [mysqld] 下添加如下配置
#启用二进制日志文件
log-bin=mysql-bin
#服务器唯一ID,建议使用IP最后数字
server-id=130
2. 记录主服务器信息
# 重启mysql服务
systemctl restart mysqld
# 查看master状态
mysql > show master status;
3. 修改从服务器配置
- 修改my.cnf配置文件:
vim my.cnf
- 在 [mysqld] 下添加如下配置
#服务器唯一ID,建议使用IP最后数字
server-id=132
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
read_only=1
4. 连接主从服务器
# 重启mysql服务
systemctl restart mysqld
mysql > change master to master_host='192.168.60.131',master_user='repl',master_password='repl',master_log_file='mysql-bin.000001',master_log_pos=154;
mysql > start slave;
mysql > show slave status\G;
当如下两个线程状态为yes,表示主从复制配置成功
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
mysql 关闭slave方式:
- salve服务器my.cnf 增加
skip-slave-start
- 重启salve mysql
参考:https://blog.csdn.net/u010969226/article/details/44198371
问题 & 方案
主从同步延迟问题:
- 当master库tps比较高的时候,产生的DDL数量超过slave一个sql线程所能承受的范围,或者slave的大型query语句产生锁等待
- 网络传输: bin文件的传输延迟
- 磁盘的读写耗时:文件通知更新、磁盘读取延迟、磁盘写入延迟
解决方案:
- 在数据库和应用层增加缓存处理,优先从缓存中读取数据
- 减少slave同步延迟,可以修改slave库sync_binlog属性; sync_binlog=0 文件系统来调度把binlog_cache刷新到磁盘,sync_binlog=n
- 增加延时监控:Nagios做网络监控、mk-heartbeat