为什么在线做主从,因为从库作为备库使用,但是由于一些原因同步失败了,并且不能恢复正常同步。
前提需求:
使用下面的命令备份全部数据库(因为我的mysql中跑了很多个库,选择全部备份) --master-data=2 作用是将主数据库备份时的bin-log文件名和pos位置保存在备份文件中。 可以选择在使用人少的时候备份(数据量大可以在凌晨设置计划任务备份)。
[root@metadata1 ~]# mysqldump -uroot -p --single-transaction --no-autocommit --master-data=2 -A > /var/mysqlback20200227.sql
#将备份的sql文件scp到从库的机器上
[root@metadata1 ~]# scp /var/mysqlback20200227.sql ******:/data/
数据量很大的话可以用screen运行source语句。 注意导入时可能因为语句太大导致导入失败。如果出现'time_zone' can't be set to the value of 'NULL',将mysql配置文件[mysqld]添加max_allowed_packet=1024M
在从库导入sql文件
MariaDB [(none)]> source /data/mysqlback20200227.sql
先查看sql文件中记录的mysql主库的bin-log文件名和pos位置编号。
[root@metadata2 ~]# head -n100 /data/mysqlback20200227.sql | grep 'CHANGE MASTER TO'
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000933', MASTER_LOG_POS=955274291;
在mysql从库执行同步命令
MariaDB [(none)]> reset slave all;
MariaDB [(none)]> change master to master_host='10.0.0.18', master_user='yourreplusername', master_password='yourmysqlreplpassword', master_log_file='mysql-bin.000933', master_log_pos=955274291;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G
至此mysql主从在线实时搭建完成。