使用Xtrabackup对数据库进行部分备份恢复

系泊系统
使⽤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' > /
innobackupex --tables-file=/  /path/to/backup
(3) 使⽤--databases
此选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;同时,在指定某数据库时,也可以只指定其中的某张表。此外,此选项也可以接受⼀个⽂件为参数,⽂件中每⼀⾏为⼀个要备份的对象。如:
innobackupex --databases="testdb1 testdb2"  /path/to/backup
备份指定数据库
根据需要对test库做完整备份,这⾥使⽤--databases选项
/usr/bin/innobackupex --defaults-file=/etc/myf  --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-myf    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库。备份单表的过程与上述过程类似。

本文发布于:2024-09-22 05:27:34,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/215936.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:备份   还原   部分   数据   数据库   指定
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议