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

默北 MySQL使用Percona Xtrabackup对数据库进行部分备份已关闭评论21,7043字数 1612阅读5分22秒阅读模式

今天同事问我用Xtrabackup工具怎么对某些表进行备份,遂帮着解决,也顺便总了下,贴于此。
Percona Xtrabackup也可以实现部分备份,即只备份某个或某些指定的数据库或某数据库中的某个或某些表。但要使用此功能,必须启用innodb_file_per_table选项,即每张表保存为一个独立的文件。同时,其也不支持--stream选项,即不支持将数据通过管道传输给其它程序进行处理。

此外,还原部分备份跟还原全部数据的备份也有所不同,即你不能通过简单地将prepared的部分备份使用--copy-back选项直接复制回数据目录,而是要通过导入表的方向来实现还原。当然,有些情况下,部分备份也可以直接通过--copy-back进行还原,但这种方式还原而来的数据多数会产生数据不一致的问题,因此,无论如何不推荐使用这种方式。文章源自运维生存时间-https://www.ttlsa.com/mysql/the-database-part-of-backup-using-percona-xtrabackup/

对数据库进行部分备份有三种方式:正则表达式(--include), 枚举表文件(--tables-file)和列出要备份的数据库(--databases)。文章源自运维生存时间-https://www.ttlsa.com/mysql/the-database-part-of-backup-using-percona-xtrabackup/

1. 正则表达式(--include)方式
使用正则表达式方式时,要求为其指定匹配要备份的表的完整名称,即databasename.tablename,如:文章源自运维生存时间-https://www.ttlsa.com/mysql/the-database-part-of-backup-using-percona-xtrabackup/

# innobackupex --include='^mydatabase[.]mytable' /path/to/backup

上面的指令只备份表名相匹配的数据。
[warning]--include选项传递给xtrabackup --tables,对每个库中的每个表逐一匹配,因此会创建所有的库,不过是空的目录。[/warning]文章源自运维生存时间-https://www.ttlsa.com/mysql/the-database-part-of-backup-using-percona-xtrabackup/

2. 枚举表文件(--tables-file)方式
此选项的参数需要是一个文件名,此文件中每行包含一个要备份的表的完整名称,格式为databasename.tablename。如文章源自运维生存时间-https://www.ttlsa.com/mysql/the-database-part-of-backup-using-percona-xtrabackup/

# echo "mydatabase.mytable" > /tmp/tables.txt
# innobackupex --tables-file=/tmp/tables.txt /path/to/backup

[warning]该选项传递给xtrabackup --tables-file,与--table选项不同,只有要备份的表的库才会被创建。[/warning]文章源自运维生存时间-https://www.ttlsa.com/mysql/the-database-part-of-backup-using-percona-xtrabackup/

完整表的文件名可以这么来创建:文章源自运维生存时间-https://www.ttlsa.com/mysql/the-database-part-of-backup-using-percona-xtrabackup/

# mysql -uroot -p -S /tmp/mysql.sock --skip-column-names -e "SELECT CONCAT(table_schema,'.',table_name) FROM information_schema.tables WHERE table_schema REGEXP '^ttlsa_com_(posts_n[0-9]|user)$';" > tables.txt
# innobackupex --tables-file=/tmp/tables.txt /path/to/backup

3. 列出要备份的数据库(--databases)方式
此选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;同时,在指定某数据库时,也可以只指定其中的某张表。此外,此选项也可以接受一个文件为参数,文件中每一行为一个要备份的对象。如:文章源自运维生存时间-https://www.ttlsa.com/mysql/the-database-part-of-backup-using-percona-xtrabackup/

# innobackupex --databases="mydatabase.mytable mysql" /path/to/backup

[warning]该选项对innodb引擎表无效,还是会备份的。[/warning]文章源自运维生存时间-https://www.ttlsa.com/mysql/the-database-part-of-backup-using-percona-xtrabackup/

http://www.percona.com/doc/percona-xtrabackup/2.1/innobackupex/partial_backups_innobackupex.html文章源自运维生存时间-https://www.ttlsa.com/mysql/the-database-part-of-backup-using-percona-xtrabackup/

转载请注明来自运维生存时间:  https://www.ttlsa.com/html/3466.html文章源自运维生存时间-https://www.ttlsa.com/mysql/the-database-part-of-backup-using-percona-xtrabackup/ 文章源自运维生存时间-https://www.ttlsa.com/mysql/the-database-part-of-backup-using-percona-xtrabackup/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
默北
  • 本文由 发表于 22/10/2013 14:21:02
  • 转载请务必保留本文链接:https://www.ttlsa.com/mysql/the-database-part-of-backup-using-percona-xtrabackup/
  • innobackupex
  • mysql备份
  • mysql还原
  • Percona
  • xtrabackup