背景
经常需要对已有的mysql主库进行从库的添加操作,MySQL的从库添加跟redis不一样,不是简单地配置master连接地址和认证信息,就可以自动完成数据的同步操作,然后实现主从同步的操作。下面进行各种从库建立的操作。
停机的方式
此种方式需要停止主库,然后进行数据的全量导出,然后在从库进行还原。
原理
停止从库,进行物理文件拷贝,覆盖掉从库的所有文件。
步骤
-
1、准备好从库实例,安装与主库同版本的msyql并清空其数据目录
-
2、停止主库的进程,使用rsyn进行数据目录同步。(主从的主机上提前安装好rsyn工具)
rsync -auv --progress /var/lib/mysql root@xx.xx.xx.xx:/var/lib/
- 3、数据同步完成后,启动原有的主库
- 4、拷贝完毕后,删除从库data目录下的auto.cnf
- 5、启动从库的mysql进程,并配置从库的master连接地址以及启动slave
change master to master_host='$master_ip',master_user='slave',master_password='xxxxx';
start slave;
show slave status\G; ## 查看slave状态
热备的方式
原理
使用工具xtrabackup来进行数据备份,此工具会在备份时记录当时的位点,然后在还原到从库时,指定从位点进行数据同步。这样可以保证数据能够达到一致的效果。
步骤
- 1、安装备份工具,可以只在从库进行安装。
yum install percona-xtrabackup -y
- 2、连接主库并进行数据备份
# 连接主库并将数据dump到/backup目录中
innobackupex --defaults-file=/etc/my.cnf --host=192.168.1.146 --user=root --password=123123 /backup
备注:如果此/backup在主库上进行的备份,需要将此目录拷贝到从库中
- 3、此时/backup中的数据是不能直接使用,需要进行将里面事务日志进行回放。
innobackupex --apply-log /backup/2020-12-10_14-24-39
- 4、清空从库的数据目录并拷贝回放后的数据到数据目录下
rm -rf /var/lib/mysql/*
cp -r /backup/2020-12-10_14-24-39/* /var/lib/mysql/
chown -R mysql.mysql /var/lib/mysql/
- 5、如果主库开启了GTID复制,需要记下数据目录文件:xtrabackup_inf的位点,如果没有开启,就记录文件:xtrabackup_binlog_info,binglog的位点。
- 6、启动从库,并建立主从
# gtid同步的方式
set global gtid_purged="gtid位点";
CHANGE MASTER TO MASTER_CONNECT_RETRY=1,MASTER_RETRY_COUNT=86400,MASTER_HOST='$master_ip',MASTER_PORT=3306,MASTER_USER='slave', MASTER_PASSWORD='xxxxx',MASTER_AUTO_POSITION=1;
start slave;
show slave status\G;
# binlog位点
change master to master_host='$master_ip',master_user='slave',master_password='xxxx',master_log_file='mysql_binary_log.000039',master_log_pos=531414268;
start slave;
show slave status\G;