示例:Xtrabackup完全备份及还原
在原主机(备份)
- 完全备份:
innobackupex --user=root --password=123456 /backups
- 复制备份文件到远程主机:
scp -r /backups/2020-03-31_11-55-57/ 192.168.27.17:/data/
在目标主机(还原)
- 整理完全备份,且回滚事务日志:
innobackupex --user=root --password=123456 --apply-log /data/2020-03-31_11-55-57/
- 停止服务:
systemctl stop mariadb.service
- 清空数据库目录:
rm -rf /var/lib/mysql/*
- 恢复数据库:
innobackupex --user=root --password=123456 --copy-back /data/2020-03-31_11-55-57/
- 修改数据库文件权限:
chown -R mysql.mysql /var/lib/mysql/
- 启动数据库:
systemctl start mariadb.service
示例:Xtrabackup完全、增量备份+二进制日志备份及还原
在原主机(备份)
- 完全备份:
innobackupex --user=root --password=123456 /backups
- 创建增量备份文件夹:
mkdir /backups/inc{1,2}
- 修改数据库
- 第一次增量备份:
innobackupex --user=root --password=123456 --incremental /backups/inc1 --incremental-basedir=/backups/2020-03-31_12-54-33
- 修改数据库
- 第二次增量备份:
innobackupex --user=root --password=123456 --incremental /backups/inc2 --incremental-basedir=/backups/inc1/2020-03-31_12-58-06
- 备份二进制日志文件:
cp /data/mariadb/bin_log/mariadb-bin.* /backups/
- 复制备份文件到远程主机:
scp -r /backups/* 192.168.27.17:/data/
在目标主机(还原)
- 不启动 mariadb
- 清空数据库目录:
rm -rf /var/lib/mysql/*
- 整理完全备份,不回滚事务日志:
innobackupex --apply-log --redo-only /data/2020-03-31_12-54-33/
- 整理第一次增量备份,不回滚事务日志:
innobackupex --apply-log --redo-only /data/2020-03-31_12-54-33/ --incremental-dir=/data/inc1/2020-03-31_12-54-33
- 整理第二次增量备份,不回滚事务日志:
innobackupex --apply-log --redo-only /data/2020-03-31_12-54-33/ --incremental-dir=/data/inc2/2020-03-31_12-59-16/
- 整理所有备份,且回滚事务日志:
innobackupex --apply-log /data/2020-03-31_12-54-33/
- 检查数据库是否清空:
ls /var/lib/mysql/
- 恢复数据库:
innobackupex --copy-back /data/2020-03-31_12-54-33/
- 修改数据库文件权限:
chown -R mysql:mysql /var/lib/mysql/
- 禁止用户访问数据库:
vim /etc/my.cnf
,在[mysqld]
下添加skip-networking
- 查看最后一次增量备份记录二进制日志文件名和 position
- 生成二进制日志文件 sql 脚本:
mysqlbinlog --start-position=XXX /data/mariadb-bin.000003 > /data/binlog.sql
- 重启数据库:
systemctl restart mariadb.service
- 导入二进制日志文件 sql 脚本:
mysql -uroot -p123456 /data/binlog.sql
- 解除禁止用户访问:
vim /etc/my.cnf
,删除[mysqld]
下的skip-networking
- 重启数据库:
systemctl restart mariadb.service
示例:Xtrabackup单表导出和导入
- 单表备份
innobackupex --include='hellodb.students' /backups
- 备份表结构
mysql -e 'show create table hellodb.students' > students.sql
- 删除表
mysql -e 'drop table hellodb.students
innobackupex --apply-log --export /backups/2020-03-31_15-03-28
- 创建表
mysql> CREATE TABLE 'studetns'( `StuID` int(10) unsigned NOT NULL AUTO_INCREMENT, 'Name' varchar(50) NOT NULL, 'Age' tinyint(3) unsigned NOT NULL, 'Gender' enum('F','M') NOT NULL, 'ClassID' tinyint(3) unsigned DEFAULT NULL, 'TeacherID' int(10) unsigned DEFAULT NULL, PRIMARY KEY ('StuID') ) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8
- 删除表空间
alter table students discard tablespace;
cp /backups/2020-03-31_15-03-28/hellodb/students.{cfg,exp,ibd}
chown -R mysql:mysql /var/lib/mysql/hellodb/
mysql> alter table students import tablespace;
网友评论