使用 mysqldump 创建数据库的副本,能够捕获数据库中的所有数据,以便将信息导入到另一个 MySQL 服务器实例中(见 第 6.5.4 节,“mysqldump — 数据库备份程序”)。因为信息的格式是 SQL 语句,因此文件可以轻松地分布并应用于运行中的服务器,以便在紧急情况下访问数据。然而,如果您的数据集非常大,mysqldump 可能不太实用。
考虑使用 MySQL Shell 转储实用程序,它提供了并行转储、文件压缩、进度信息显示等功能,以及 Oracle Cloud Infrastructure Object Storage 流式传输和 MySQL HeatWave 服务兼容性检查和修改。转储可以轻松地导入到 MySQL 服务器实例或 MySQL HeatWave 服务 DB 系统中使用 MySQL Shell 载入转储实用程序。MySQL Shell 的安装说明可以在 这里 找到。
使用 mysqldump 时,应该在开始转储过程之前停止副本上的复制,以确保转储包含一致的数据集:
-
停止副本处理请求。您可以使用 mysqladmin 完全停止副本上的复制:
$> mysqladmin stop-replica
或者,您可以停止复制 SQL 线程以暂停事件执行:
$> mysql -e 'STOP REPLICA SQL_THREAD;'
这使副本继续从源的二进制日志中接收数据更改事件,并将其存储在中继日志中使用复制接收器线程,但阻止副本执行这些事件并更改其数据。在繁忙的复制环境中,允许复制接收器线程在备份期间运行可能会加速 catch-up 过程当您重新启动复制应用程序线程时。
-
运行 mysqldump 转储数据库。您可以转储所有数据库或选择要转储的数据库。例如,要转储所有数据库:
$> mysqldump --all-databases > fulldb.dump
-
一旦转储完成,重新启动复制:
$> mysqladmin start-replica
在上面的示例中,您可能想要添加登录凭据(用户名、密码)到命令中,并将过程捆绑到一个脚本中,以便每天自动运行。
如果您使用这种方法,请确保监控复制过程,以确保备份所需的时间不会影响副本跟上源的事件。见 第 19.1.7.1 节,“检查复制状态”。如果副本无法跟上,您可能想要添加另一个副本并分布备份过程。有关如何配置这种场景的示例,请见 第 19.4.6 节,“将不同数据库复制到不同副本”。