innobackupex 是 Percona XtraBackup 和 MySQL Enterprise Backup 等工具中用于备份 InnoDB 表空间的一个实用程序。它允许你在应用运行时(即热备份)备份数据库,并且能够确保数据的一致性。

如果你想要使用 innobackupex 来备份指定的数据库或表,而不是整个实例,那么你需要了解一些限制和技巧。innobackupex 默认备份整个 MySQL 实例,但可以通过一些方法来实现对特定数据库或表的备份。

下面是一个示例脚本,展示如何使用 innobackupex 来备份指定的数据库。请注意,innobackupex 本身不支持直接指定数据库或表进行备份,但是可以通过其他手段间接实现这一点,例如使用 --tables-file 参数配合一个包含表名列表的文件。

示例脚本

假设我们要备份一个名为 mydatabase 的数据库中的所有表,你可以创建一个包含这些表名的文件,然后使用 innobackupex--tables-file 参数。

  1. 创建包含表名的文件:
#!/bin/bash
User="root"
Hostip="x.x.x.x"
Passwd="x.x.x.x.x.x"
DbName="mydatabase"

# 获取 mydatabase 数据库的所有表名,并写入一个文件
mysql --user=$User --password=$Passwd --host=$Hostip -e "USE $DbName; SHOW TABLES;" | tr '\n' ',' | sed 's/,$/\n/' > tables.txt
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  1. 使用 innobackupex 进行备份:
#!/bin/bash
User="root"
Hostip="x.x.x.x"
Passwd="x.x.x.x.x.x"

# 使用 innobackupex 进行备份
innobackupex --user=$User --password=$Passwd --host=$Hostip --no-timestamp --tables-file=tables.txt --stream=tar /tmp | gzip > mydatabase-`date +%F`.tar.gz
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
说明
  1. 创建表名文件 (tables.txt): 我们首先使用 mysql 命令获取 mydatabase 数据库中的所有表名,并将它们写入 tables.txt 文件中。这里我们使用了 trsed 来格式化输出。
  2. 执行备份: 接下来,我们使用 innobackupex 命令来备份这些表。--tables-file 参数指定了包含表名的文件。--stream=tar 选项将输出流压缩为 tar 归档文件,而 gzip 命令进一步将其压缩为 .tar.gz 文件。
注意事项
  • 如果你的数据库中有大量表,或者表名中包含特殊字符,那么使用 SHOW TABLES 和简单的 shell 命令可能不够稳定。在这种情况下,考虑使用更复杂的脚本来处理这种情况。
  • innobackupex 需要 MySQL 服务器上安装有相应的客户端工具。
  • 请确保备份完成后,关闭正在运行的事务,以确保数据的一致性。

如果你只需要备份几个特定的表,上面的脚本可能过于复杂。在这种情况下,你可能会考虑使用 mysqldump 或者其他更简单的方式来备份单个表或数据库。