使用Xtrabackup对数据库进行部分备份恢复
Xtrabackup也可以实现部分备份,即只备份某个或某些指定的数据库或某数据库中的某个或某些表。但要使用此功能,必须启用innodb_file_per_table选项,即每张表保存为一个独立的文件。同时,其也不支持--stream选项,即不支持将数据通过管道传输给其它程序进行处理。此外,还原部分备份跟还原全部数据的备份也有所不同,即你不能通过简单地将prepared的部分备份使用--copy-back选项直接复制回数据目录,而是要通过导入表的方向来实现还原。当然有些情况下,部分备份也可以直接通过--copy-back进行还原,但这种方式还原而来的数据多数会产生数据不一致的问题,因此,无论如何不推荐使用这种方式。
创建部分备份
创建部分备份的方式有三种:正则表达式(--include), 枚举表文件(--tables-file)和列出要备份的数据库(--databases)。
(1) 使用--include
使用--include时,要求为其指定要备份的表的完整名称,即形如databasename.tablename,如:
innobackupex --include='^test[.]tb1' /path/to/backup
(2) 使用--tables-file
此选项的参数需要是一个文件名,此文件中每行包含一个要备份的表的完整名称;如:
echo -e 'test.tb1\ntest.tb2' > /tmp/tables.txt
innobackupex --tables-file=/tmp/tables.txt /path/to/backup
(3) 使用--databases
此选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;同时,在指定某数据库时,也可以只指定其中的某张表。此外,此选项也可以接受一个文件为参数,文件中每一行为一个要备份的对象。如:
innobackupex --databases="testdb1 testdb2" /path/to/backup
备份指定数据库
根据需要对test库做完整备份,这里使用--databases选项
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --use-memory=4G --host=localhost --user=backup --password=123456 --port=3306 --databases=test /data/backup
查看备份目录下只有test库
[root@db ~]# ls /data/backup/2021-08-28_14-46-02/
backup-my.cnf undo003 undo009 undo015 undo021 undo027 undo033 undo039 undo045 undo051 undo057 undo063 undo069 undo075 undo081 undo087 undo093 xtrabackup_logfile
ib_buffer_pool undo004 undo010 undo016 undo022 undo028 undo034 undo040 undo046 undo052 undo058 undo064 undo070 undo076 undo082 undo088 undo094
ibdata1 undo005 undo011 undo017 undo023 undo029 undo035 undo041 undo047 undo053 undo059 undo065 undo071 undo077 undo083 undo089 undo095
test undo006 undo012 undo018 undo024 undo030 undo036 undo042 undo048 undo054 undo060 undo066 undo072 undo078 undo084 undo090 xtrabackup_binlog_info
undo001 undo007 undo013 undo019 undo025 undo031 undo037 undo043 undo049 undo055 undo061 undo067 undo073 undo079 undo085 undo091 xtrabackup_checkpoints
undo002 undo008 undo014 undo020 undo026 undo032 undo038 undo044 undo050 undo056 undo062 undo068 undo074 undo080 undo086 undo092 xtrabackup_info
备份数据库表结构
mysqldump -uroot -p --single-transaction --master-data=2 --set-gtid-purged=OFF -d test > test.sql
将备份传送至灾备演练服务器上
scp -r /data/backup/2021-08-28_14-46-02 test.sql 192.168.0.110:/root
接下来在灾备演练服务器上操作
还原指定数据库
还原test表结构
mysql -uroot -p test < test.sql
删除test库中所有表空间
for i in $(grep "CREATE TABLE" test.sql | awk '{print $3}' | sed "s#\`##g");do;mysql -u root -p123456 -e "set foreign_key_checks=0;alter table test.$i discard tablespace;" &> /dev/null;done
prepare部分备份,要使用--export选项进行:
innobackupex --apply-log --export /root/2021-08-28_14-46-02
将准备好的test库中后缀名为cfg、ibd,frm文件复制到test库下
cp -f 2021-08-28_14-46-02/test/*.cfg 2021-08-28_14-46-02/test/*.ibd 2021-08-28_14-46-02/test/*.frm /data/mysql3306/data/test/
修改属主
chown -R mysql:mysql /data/mysql3306/data/test/
导入表空间
for i in $(grep "CREATE TABLE" test.sql | awk '{print $3}' | sed "s#\`##g");do;mysql -u root -p123456 -e "set foreign_key_checks=0;alter table test.$i import tablespace;analyze table test.$i;" &> /dev/null;done
至此已经成功还原test库。备份单表的过程与上述过程类似。
原文地址:https://www.cnblogs.com/will-space/p/15200329.html
- 深入线程
- 【插件开发】—— 2 插件入门
- 线程间通讯:WaitHandler使用实例及分析
- 域名Deskbike.com刚注册没多久就以五位数结拍
- 一起Polyfill系列:Function.prototype.bind的四个阶段
- winform实现拼图游戏
- 一起Polyfill系列:让Date识别ISO 8601日期时间格式
- Oracle 监听器无法启动(TNS-12537,TNS-12560,TNS-00507)
- Javascript Prototypes之旅(A Plain English Guide to JavaScript Prototypes译文)
- Python补充03 Python内置函数清单
- 不懂JQuery的孩子:自封装Ajax函数
- .Net魔法堂:史上最全的ActiveX开发教程——ActiveX与JS间交互篇
- 飓风“桑迪”路径图的制作
- 根据标准word模板生成word文档类库(开源)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法