一. 设置主库
1.1 修改my.conf
#配置主从复制
innodb_flush_log_at_trx_commit=1
sync_binlog=1 (每执行一个操作就写到日志文件中)
#需要备份的数据库 (多个以逗号分开)
binlog-do-db=test
#不需要备份的数据库
binlog-ignore-db=mysql,performance_schema,information_schema
#启动二进制文件
log-bin=mysql-bin
#服务器ID (服务器id以ip的末位为标识比较好)
server-id=101
重启mysql服务
Systemctl restart mysql
1.2 创建主从复制账户
grant replication slave on *.* to ‘slave ‘@’%’ identified by '123456’; 配置主从复制权限, 并创建账户
1.3 锁定主库, 禁止写入
flushtables with read lock;
解锁命令: unlock tables; 完成主从关联时解锁
1.4 查看主数据库同步相关值
show master status;
查看主数据库信息,记住下面的 “ File ”与“ Position ”的信息,它们是用来配置从数据库的关键信息。可以看到下面同步的数据库的“test”数据库, 主从数据库如果数据不一样 , 请先手动同步主从的数据
此处: file: mysql-bin.000001 position: 319
二. 设置从库
2.1 修改my.conf
Server-id=102 此处为ip末位比较好
2.2 配置连接主库
mysql> change master tomaster_host='192.168.136.101', 主库ip
-> master_user='slave', 主库可用于同步的用户名
-> master_password='123456', 密码
-> master_log_file='mysql-bin.000001', 主库同步的二进制文件名(同上)
-> master_log_pos=319, 主库同步的日志位置(同上)
-> master_connect_retry=10; 主库连接重试10次
Query OK, 0 rows affected, 2 warnings (0.03 sec)开始同步2.3 开始同步
mysql>start slave;
2.4 查看同步状态
Mysql> show slave status\G;
正常状态:
Slave_IO_Running:Yes
Slave_SQL_Running: Yes2.5 可能出现的问题
2.5.1 Slave_IO_Running:no
原因分析:
1. My.cnf中的server_id一致
Data文件夹中的auto.cnf中的server_id一致. 若克隆的虚拟机, 一定有改问题. 删除改文件, 重启mysql服务, 自动生成一次2.5.2 Slave_SQL_Running: no
原因分析: 主从数据不同步.
停止同步:mysql> stop slave;
手动同步主从库
导出主库. 锁住主库. 从库数据导入2.6 停止同步
Stopslave;
2.7 配置成功, 对主库解锁
Mysql>unlock tables;
三. 主从同步延迟解决方案
3.1 写 成功时将数据写入到缓存中, 读操作先读缓存