概念
作用
主从同步,可以实现在主数据库修改数据时,从数据库的数据一样进行同步修改。
原理
坑
主从同步,同步数据时很容易出错的,如果从数据库在同步时出错,则往下都不会继续同步的,且修改数据等也容易因为主键啥的导致从在同步时出错,所以还是挺多坑的。
配置过程
配置时,主从的数据库都不要有mysql连接,避免可能的操作数据导致的配置失败。
配置完成后,先把使用到主的数据库的程序先跑起来,再去启动使用到从的数据库,不然可能还是会出现同步错误的问题。
如果出现从同步数据的时候错误,则我们把从的数据库删掉,再把主的数据库导出,然后导入到从的数据库中,保证数据是一样的。
主数据库
1.修改配置文件
[mysqld]
server-id=1 #[必须]服务器唯一ID,默认是1
log-bin=mysql-bin #[必须]启用二进制日志
Linux 配置路径 /etc/my.cnf
windows 配置路径 mysql/bin/my.ini
log-bin的值不一定要mysql-bin,只是一个日志的名称。
2.重启mysql生效配置
[windows]
net stop mysql;
net start mysql;
[Linux]
systemctl restart mysqld;
[docker]
docker restart mysql;
3.创建用于从数据库连接的mysql账号,登录mysql执行以下命令
create USER '用户名'@'%' IDENTIFIED BY '密码';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '用户名'@'%';
FLUSH PRIVILEGES;
其中 %代表任意ip都可以连接,最好将其提替换为备用数据库的服务器ip,防止账号在其他ip被使用。
从数据库
1.修改配置文件,重启mysql生效配置
[mysqld]
server-id=2 #[必须]不能跟主数据库相同
log-bin=mysql-slave-bin
relay-log=mysql-relay
Linux 配置路径 /etc/my.cnf
windows 配置路径 mysql/bin/my.ini
log-bin的值不一定要mysql-slave-bin,只是一个日志的名称。
2.配置主数据库信息,登录mysql执行以下命令
CHANGE MASTER TO
MASTER_HOST='',
MASTER_USER='',
MASTER_PASSWORD='',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=120 ;
MASTER_HOST : 主数据库IP地址
MASTER_USER : 主数据连接账号,用上面创建的
MASTER_PASSWORD : 主数据库连接密码,用上面创建的
MASTER_PORT : 主数据库端口
MASTER_LOG_FILE : 主数据库的log file名称,在主数据库中登录执行show master status;查询到的File的值
MASTER_LOG_POS : 主数据库的log pos名称,在主数据库中登录执行show master status;查询到的Position的值
3.启动同步,登录mysql执行以下命令
start slave;
4.查看是否启动正常
show slave status;
Slave_IO_Running的值YES,Slave_SQL_Running的值YES,则代表主从配置无问题,启动成功。
由于此命令查找出来的字段有很多,排序乱很难看,我们可以直接show slave status \G;以竖的方式显示即可容易看。
常用指令
做为主数据库
显示作为主数据库时的相关配置
show master status;
重置作为主数据库时的相关配置
reset master;
我们利用show master status;查询出来,可以看到Position的值是固定的,我们可以利用此命令进行重新生成。
如果发现主从同步有问题,也可以尝试此命令进行重置。
重置后,由于Position发现变化,我们的从数据库也要重新配置CHANGE MASTER TO。
从原理我们可以看出,主从同步的核心就是binlog日志,reset master就是重置此日志。
做为从数据库
启动主从同步
start slave;
停止主从同步
stop slave;
重置主从同步
reset slave;
停止后才能重置;如果遇到一些问题出错,我们可以利用重置解决问题。
从原理我们可以看出,主从同步的核心就是binlog日志,reset slave就是重置此日志。
显示主从同步状态
show slave status;
主从的日志
显示日志列表
show master logs;
显示的是本地的日志,主就是主的,从就是从的。
刷新日志列表
flush logs;
查看指定日志
show binlog events in '日志键名';
日志键名为show master logs查询出来的Log_name对应的值。
错误时的思路参考
mysql主从复制一个小错误导致从库不更新数据
https://blog.csdn.net/qq_31648761/article/details/51997163
线上MYSQL同步报错故障处理方法总结(必看篇)
https://www.jb51.net/article/109107.htm