- Published on
基于 XtraBackup 的 MySQL 数据库快速同步与单库恢复实践
- Authors
- Name
- Liant
快速同步恢复数据库
基于 xtrabackup、nc 需要提前安装
yum install -y nc
数据库A 10.8.30.64
数据库S 10.8.30.65 (原数据库A的主库)
数据库B 10.8.30.68
- 故障情况: 数据库A 磁盘文件受损,无法正常启动。
- 调整 innodb_fast_shutdown=1,innodb_force_recovery=5 才能启动
- 保全原有数据,进行迁移到数据库B
- 调整 bind-address=127.0.0.1 禁止数据插入,保持完整
实现数据库 S与数据库 B数据一致搭建主从
从数据库S全备
exec ncat --listen --keep-open --send-only --max-conns=1 3307 -c \
"xtrabackup --backup --slave-info --stream=xbstream --socket=/apps/program/tmp/mysql.sock --user=root --password=123456"
数据库B同步全数据文件
ncat --recv-only 10.8.30.64 3307 | xbstream -x -C /apps/mysql/data
数据库B进行数据还原
/apps/sh/tool/bin/xtrabackup --prepare --target-dir=/apps/mysql/data
赋予权限
chown -R mysql:mysql /apps/mysql/data/*
移走undo文件
cp -a undo00* ../undo_space/
启动数据库B,查看是否正常
service mysqld start
创建tmp目录
mkdir -p /apps/mysql/logs/mysqld/tmp/
chown -R mysql:mysql /apps/mysql/logs/mysqld/tmp/
搭建主从关系
启动主从,查看是否正常
- 恢复 数据库A data_center_bak 库的数据到 数据库B
######### 恢复单库的数据 #########
# 10.8.30.64 xtrabackup压缩备份
innobackupex --defaults-file=/etc/my.cnf --socket=/apps/program/tmp/mysql.sock --databases data_center_bak --user=yunweiad --password=qlWyXs7CDb --slave-info --lock-wait-timeout=120 --compress --no-timestamp /mnt/back_data_center_bak
# xtrabackup还原
<<<<<<<<<<<<<<< 源端 10.8.30.64 >>>>>>>>>>>>>>>
## 生成 import、dicard语句
mysql -p -e "select concat('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' IMPORT TABLESPACE;') from information_schema.tables where TABLE_SCHEMA='ceshi';">/tmp/import_tbs.sql
mysql -p -e "select concat('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DISCARD TABLESPACE;') from information_schema.tables where TABLE_SCHEMA='ceshi';" >/tmp/discard_tbs.sql
## 导出数据库的表结构
mysqldump -uroot -p -d -f --master-data=2 --single-transaction --databases ceshi > /tmp/backup_db1.sql
## 传输备份文件
scp -r /mnt/back_data_center_bak 10.8.30.68:/mnt
scp -r /tmp/backup_db1.sql 10.8.30.68:/tmp/
<<<<<<<<<<<<<<< 目标端 10.8.30.68 >>>>>>>>>>>>>>
## 解压备份
xtrabackup --decompress --target-dir=/mnt/back_data_center_bak
## 对备份数据进行apply-log日志应用及将数据进行export转换生成配置文件
innobackupex --apply-log /mnt/back_data_center_bak
## 恢复表结构
create database ceshi
use ceshi
## 删除对应表空间文件
use ceshi; source discard_tbs.sql
## 拷贝数据文件、配置文件到对应目录
cp /mnt/back_data_center_bak/*.ibd /apps/mysql/data/data_center_bak
cp /mnt/back_data_center_bak/*.cfg /apps/mysql/data/data_center_bak
## 改权限
chown -R mysql:mysql /apps/mysql/data/data_center_bak/*
## 导入表空间文件
source /tmp/import_tbs.sql
## 可以观察是否有报错
less /data/mysql/data/mysql-error.log