1、主库添加binlog配置,并设置server-id
server-id=124
# 设置日志格式,日志路径(注意路经需要mysql用户有权限写,默认地址放在datadir的目录下)
binlog_format=mixed
log-bin=mysql-bin
# 设置binlog清理时间(秒), binlog每个日志文件大小
binlog_expire_logs_seconds=604800
max_binlog_size=100m
# binlog缓存大小,最大binlog缓存大小
binlog_cache_size=4m
max_binlog_cache_size=512m
# 设置忽略binlog数据库
binlog-ignore-db=mysql
2、从库配置relaylog,并设置servcer-id
server-id=95
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
3、重启主库数据库,使配置生效,并创建从库同步用户
在主服务器上添加用于同步的账户
创建用户
create user`slave_user`@`%` identified by '123456';
赋予权限
grant all privileges ON *.* to 'slave_user'@'%';
flush privilieges;
查看用户
select user, host from mysql.user;
查看用户全权限
show grants for 'slave_user'@'%';
4、备份主库数据到从库中
如果主库是新库,可以略去这步
格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 --database 数据库名 > 文件名.sql
例如: mysqldump --default-character-set=utf8mb4 -h62.234.137.125 -P56612 -uslave_user -p123456 --databases workflow > /var/lib/mysql-files/workflow2.sql;
将主库的数据备份文件到从库执行
source /data/backup/cmdb.sql
5、记录主库bin位置信息
查看主服务器BIN日志的信息,记录下position位置
show master status;
6、重启从库,使配置生效,并设置同步
若从库已有同步请先关闭同步
关闭slave(如果你以前配置过主从的话,一定要先关闭)
命令:stop slave;
change master to MASTER_HOST='62.234.137.125', MASTER_PORT=56612, MASTER_USER='slave_user', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4980;
参数解释:
MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_PORT : 设置要连接的主服务器的端口
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)
从服务器配置完成,启动从服务器:
命令: start slave;
查看slave状态
show slave status\G
看到slave运行状态如上图,代表同步开启正常
7、主从同步过程中可能遇到的问题
问题1:MySQL 连接出现 Authentication plugin ‘caching_sha2_password’ cannot be loaded
很多用户在使用Navicat Premium 12连接MySQL数据库时会出现Authentication plugin 'caching_sha2_password' cannot be loaded的错误。
出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password.
修改账户密码加密规则并更新用户密码
ALTER USER 'slave_user'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; #修改加密规则
ALTER USER 'slave_user'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; #更新一下用户的密码
问题2: Mysql主从架构报错-Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work…
在搭建Mysql主从架构过程中,由于从服务器是克隆的主服务器系统,导致主从mysql uuid相同, Slave_IO无法启动,报错如下:
The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
解决办法,修改其中一台服务器的server-uuid,并保证server-uuid的格式正确,修改完成之后重启Mysql服务就可以了。
在修改配置文件之前,先登录Mysql客户端查看uuid,把返回的uuid复制,放到要修改的配置文件即可。
问题3: ERROR 1396 (HY000): Operation CREATE USER failed for ‘XXXX’@‘XXXX’
drop user ‘slave_user’@’%’;
flush privileges;
之后create user ‘slave_user’@’%’ identified by ‘123456’;
赋予权限等等
问题4: mysql主从复制过程中出现删除从库中不存在的用户报错,可以跳过当前这个错误
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 #跳过一个事务
上述主从通过,需要主从在备份数据的时候停止业务操作或则锁表进行
8、mysql不停止业务操作,不锁表同步
mysqldump --default-character-set=utf8mb4 -h62.234.137.125 -P56612 -uslave_user -p123456 --master-data --single-transaction --routines --flush-logs --databases workflow > /var/lib/mysql-files/workflow2.sql;
参数说明:
-h主机名 -P端口 -u用户名 -p密码
--master-data=2 在文件最后会记录当前变更的binlog文件和所在的位置position的位置信息
=2是指将位置信息注释,默认=1,不注释位置信息
--single-transaction参数的作用,设置事务的隔离级别为可重复读即REPEATABLE READ
这样能保证在一个事务中所有相同的查询读取到同样的数据,也就大概保证了在dump期间,如果其他innodb引擎的线程修改了表的数据并提交,对该dump线程的数据并无影响,在这期间不会锁表
--routines 导出存储过程以及自定义函数
--flush-logs 开始导出之前刷新日志。
备份出来的sql文件最后有当前备份的binlog文件和position位置信息
在同步的时候从这个位置开始同步就行了