基本描述
从库服务器异常,需要重做从节点。
主库服务器 | 从库服务器 |
---|---|
master-mysql | slave-mysql |
192.168.1.31 | 192.168.1.32 |
- 数据量:900Gi
- MySQL Version:5.6.27
操作
建立 master 免密登陆 slave
- master 生成密钥
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
- 将本地的公钥复制到 slave 机器上
# 发送密钥
ssh-copy-id 192.168.1.32
master 服务器备份数据
- 【方案一】在 master 服务器上在线备份数据库
# 本地全备
nohup innobackupex --user=root --password=xxx /tmp/backup/ &> dump.log &
- 【方案二】 异地备份
# 异地全备
nohup innobackupex --user=root --password=xxx --defaults=/etc/my.cnf --slave-info --stream=tar /data/backup/xtrabackup | ssh -p 22 slave-mysql cat " >" /data/backup/xtrabackup/db_2022_04_29.tar &
- 数据发送至从服务器
nohup scp -r /tmp/backup/ 192.168.1.32:/data/backup &
说明:
- innobackupex 工具不支持直接异地备份,需要使用流式异地备份
方案二
- 数据量较大,建议使用后台备份数据
nohup方式
- 异地全备 不支持收集备份日志,无法判断异地备份是否完成
slave 服务器上操作
-
关闭 mysql 服务,然后清空mysql数据目录下文件【重要】
-
开始恢复数据,假设备份文件的路径在:
/data/backup/2022-xx-xx
# 恢复日志文件
nohup innobackupex --user=root --password=xxx --use-memory=4G --apply-log /data/backup/db &> import.log &
# 备份原始数据
mv /var/lib/mysql /var/lib/mysql_bak
mkdir /var/lib/mysql
# 恢复数据文件, 需要停止数据库,清除 /var/lib/mysql 数据
nohup innobackupex --defaults-file=/etc/my.cnf --user=root --password=xxx --copy-back /data/backup/db/2022-xxx &> copy_back.log &
说明: 以上操作,务必按照顺序执行,操作顺序颠倒,会引起mysql服务器启动不了!
- 修改数据目录权限
# innobackupex 导入数据的权限不是 mysql
chown -R mysql.mysql /var/lib/mysql
- 安全方式启动 mysql,查看是否有异常
mysqld_safe --defaults-file=/etc/my.cnf &
# 如果没有异常报错,就关闭mysql
mysqladmin -uroot -p shutdown
- 查看 binlog 日志文件的位置值,做主从同步
cat /data/backup/2022-xx-xx/xtrabackup_binlog_info
mysql-bin.007448 86780847 85efd34d-1732-11e9-ba1f-00163e0c4d45:1-17764402967
- 在 slave 机器上做主从相关操作
-- 创建同步用户: master 和 slave 都需要执行
mysql> grant REPLICATION SLAVE ON *.* to repl_user@'192.168.%.%' identified by '123456';
mysql> flush privileges;
-- 主从同步配置:slave 执行
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.31', \
MASTER_USER='repl_user', \
MASTER_PASSWORD='123456', \
MASTER_PORT=3306, \
MASTER_LOG_FILE='mysql-bin.007448', \
MASTER_LOG_POS=86780847;
-- 启动主从同步:slave 执行
mysql> start slave;