第12章 mysql备份

mysqlbackup客户端是用于所有备份和恢复操作的易于使用的工具。在备份操作期间, mysqlbackup备份:

  • 所有 InnoDB 表和索引,包括:

    • InnoDB系统表空间,默认情况下包含所有 InnoDB 表。

    • 使用 InnoDB file-per-table 设置生成的任何单独的数据文件。每个都包含一个表及其关联的索引。每个数据文件都可以使用原始的 Antelope或新的 Barracuda文件格式。

  • 所有 MyISAM 表和索引。

  • 由其他存储引擎管理的表。

  • MySQL数据目录下的其他文件,如 .frm记录各表结构的文件。

  • 服务器数据目录下数据库子目录中的任何其他文件。

除了创建备份之外,mysqlbackup 还可以打包和解包备份数据,将备份操作期间发生的 InnoDB 表的任何更改应用到备份数据,并将数据、索引和日志文件恢复到它们的原始位置或其他位置.

以下是使用mysqlbackup 启动备份操作的一些示例命令 :

# Information about data files can be retrieved through the database connection.
# Specify connection options on the command line.
mysqlbackup --user=dba --password --port=3306 \
  --with-timestamp --backup-dir=/export/backups \
  backup

# Or we can include the above options in the configuration file
# under the [mysqlbackup] section, and just specify the configuration file
# and the 'backup' operation.
mysqlbackup --defaults-file=/usr/local/mysql/my.cnf backup

# Or we can specify the configuration file as above, but
# override some of those options on the command line.
mysqlbackup --defaults-file=/usr/local/mysql/my.cnf \
  --compress --user=backupadmin --password --port=18080 \
  backup

您指定的--user--password 用于连接到 MySQL 服务器。此 MySQL 用户必须在 MySQL 服务器中具有某些权限,如第 4.1.2 节“将 MySQL 权限授予备份管理员”中所述。

--with-timestamp选项将备份放置在您在上面指定的目录下创建的子目录中。备份子目录的名称由备份运行的日期和时钟时间组成。

有关其他命令行选项的含义,请参阅 第 14 章,mysqlbackup命令行选项。有关配置文件的信息,请参阅第 15 章,配置文件和参数

确保运行 mysqlbackup的用户或 cron 作业有权将文件从 MySQL 数据库目录复制到备份目录。

确保连接超时足够长,以便mysqlbackup命令可以在备份运行期间保持与服务器的连接打开。 mysqlbackup在复制每个数据库后对服务器执行 ping 操作以保持连接有效。

重要的
  • 尽管mysqlbackup在不中断数据库使用的情况下备份 InnoDB 表,但复制非 InnoDB 文件(例如 MyISAM 表和 .frm文件)的最后阶段使用语句将数据库暂时置于只读状态FLUSH TABLES WITH READ LOCK。为了获得最佳备份性能并将对数据库处理的影响降到最低:

    1. 不要SELECT在备份运行时运行长查询或其他 SQL 语句。

    2. 保持您的 MyISAM 表相对较小,主要用于只读或以读为主的工作。

    然后mysqlbackup运行 结束时的锁定阶段 很短(可能是几秒钟),并且不会过多地干扰 mysqld的正常处理。如果您的数据库应用程序不满足上述条件,请使用 --only-innodb仅备份 InnoDB 表的 --no-locking选项,或使用备份非 InnoDB 文件的选项。请注意,如果在备份的最后阶段更新了 MyISAM、.frm和其他在该 --no-locking设置下复制的文件,则不能保证它们是一致的。

  • 对于大型数据库,备份运行可能需要很长时间。始终通过验证 mysqlbackup已返回退出代码 0 或观察mysqlbackup已打印文本mysqlbackup 完成 OK! ”来检查mysqlbackup命令是否已成功完成!

  • mysqlbackup与之前 来自 MySQL 6.0 源代码树的“ MySQL Backup开源项目不同。MySQL Enterprise Backup 产品取代了 MySQL Backup 计划。

  • 在没有涉及表的 DDL 操作运行期间安排备份。有关与 DDL 操作并行创建备份的限制,请参阅 附录 B,MySQL Enterprise Backup的限制。