MySQL主从复制
关于主从复制
- 主要用途:实现读写分离,主写从读,即主服务器用于写操作,其他从服务器用于读操作。
- 注意事项:配置之前各服务器数据库信息必须一致,否则会失败。
原理
- master将事件记录于二进制文件中
- slave启动I/O线程监控master二进制文件,有改动则写入中继日志
- slave将中继日志事件写入数据库中,实现同步
如下图:
![](https://i.loli.net/2019/08/26/RQSOVr2NPnqIiZd.jpg)
配置
这里不再赘述数据库的搭建与基础配置过程
注意搭建之前数据库信息必须一致,特别是各服务器存在不一样的数据库
环境:
CentOS7 + Mariadb
master:
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id
systemctl restart mariadb
mysql -u root -p
CREATE USER 'slave1'@'192.168.191.129' IDENTIFIED BY 'slave1'; #创建用户,从服务器通过此账号进行登录同步
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'192.168.191.129'; #分配权限
flush privileges; #刷新权限
SHOW MASTER STATUS; #查看master状态
slave:
vim /etc/my.cnf
[mysqld]
server-id=2 #设置server-id,必须唯一
systemctl restart mariadb
mysql -u root -p
CHANGE MASTER TO
MASTER_HOST='192.168.191.128', #master的ip
MASTER_USER='slave1',
MASTER_PASSWORD='slave1',
MASTER_LOG_FILE='mysql-bin.000003', #master状态中查看(SHOW MASTER STATUS;)
MASTER_LOG_POS=73; #master状态中查看(SHOW MASTER STATUS;)
start slave; #开启slave进程
show slave status\G; #查看slave状态(I/O进程和SQL进程都为YES则成功)
补充
#指定数据库同步
vim /etc/my.cnf
[mysqld]
#不同步这些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
#或者只同步这些数据库
binlog-do-db = game