Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

19.1.2.5 选择数据快照方法

如果源数据库包含现有数据,则需要将其复制到每个副本中。有多种方法可以从源数据库转储数据。以下部分将描述可能的选项。

要选择适当的数据库转储方法,请从以下选项中选择:

  • 使用 mysqldump 工具创建所有要复制的数据库的转储。这是推荐的方法,特别是在使用 InnoDB 时。

  • 如果您的数据库存储在二进制可移植文件中,可以将原始数据文件复制到副本中。这比使用 mysqldump 并在每个副本上导入文件更高效,因为它跳过了在重新播放 INSERT 语句时更新索引的开销。使用存储引擎如 InnoDB 时,这不是推荐的方法。

  • 使用 MySQL 服务器的克隆插件将所有数据从现有的副本传输到克隆。有关使用此方法的说明,请参阅 第 7.6.7.7 节,“克隆用于复制”

Tip

要部署多个 MySQL 实例,可以使用 InnoDB 集群,它使您可以轻松管理一组 MySQL 服务器实例的高可用性。在noDB 集群将 MySQL 组复制包装在一个程序化环境中,使您可以轻松部署 MySQL 实例集群以实现高可用性。此外,InnoDB 集群还与 MySQL 路由器 无缝集成,使您的应用程序可以连接到集群而不需要编写自己的故障转移过程。对于不需要高可用性的类似用例,可以使用 InnoDB 副本集。MySQL Shell 的安装说明可以在 这里 找到。

19.1.2.5.1 使用 mysqldump 创建数据快照

要在现有的源数据库中创建数据快照,请使用 mysqldump 工具。一旦数据转储完成,就可以将其导入副本,然后启动复制过程。

以下示例将所有数据库转储到名为 dbdump.db 的文件中,并包括 --source-data 选项,该选项自动追加 CHANGE REPLICATION SOURCE TO 语句,以便在副本上启动复制过程。

$> mysqldump --all-databases --source-data > dbdump.db
Note

如果不使用 --source-data,则需要在单独的会话中手动锁定所有表。请参阅 第 19.1.2.4 节,“获取复制源二进制日志坐标”

可以使用 mysqldump 工具排除某些数据库。要选择要包含在转储中的数据库,请不要使用 --all-databases。选择以下选项之一:

Note

默认情况下,如果源服务器上启用了GTID(gtid_mode=ON),则mysqldump将在转储输出中包含源服务器上的GTID执行集gtid_executed,以便将其添加到副本上的gtid_purged集中。如果您只转储特定的数据库或表格,请注意,mysqldump包括源服务器上的所有事务GTID,即使这些事务更改了数据库的其他部分或服务器上的其他数据库,这些数据库未包含在部分转储中。请查看mysqldump--set-gtid-purged选项的描述,以了解默认行为的结果,并了解如何更改行为以适应您的情况。

有关更多信息,请参阅第 6.5.4 节,“mysqldump — 数据库备份程序”

要导入数据,可以将转储文件复制到副本上,或者从远程连接到副本时访问文件。

19.1.2.5.2 使用原始数据文件创建数据快照

本节描述如何使用数据库组成部分的原始文件创建数据快照。使用这种方法与具有复杂缓存或日志算法的存储引擎的表格时,需要额外的步骤来生成完美的“时间点”快照:初始复制命令可能会遗漏缓存信息和日志更新,即使您已经获取了全局读锁。存储引擎对此的响应取决于其崩溃恢复能力。

如果您使用InnoDB表格,可以使用 MySQL Enterprise Backup 组件中的 mysqlbackup 命令生成一致的快照。该命令记录了快照对应的日志名称和偏移量,以便在副本上使用。MySQL Enterprise Backup 是一款商业产品,作为 MySQL Enterprise 订阅的一部分。请参阅第 32.1 节,“MySQL Enterprise Backup 概述”以获取详细信息。

这种方法也不适用于源服务器和副本服务器具有不同值的 ft_stopword_fileft_min_word_lenft_max_word_len,且您正在复制具有全文索引的表格的情况。

假设上述例外情况不适用于您的数据库,使用冷备份技术获取可靠的二进制快照:InnoDB 表格:执行 MySQL 服务器的慢关闭,然后手动复制数据文件。

要创建 MyISAM 表格的原始数据快照,当您的 MySQL 数据文件位于单个文件系统上时,可以使用标准文件复制工具,如 cpcopy,远程复制工具,如 scprsync,归档工具,如 ziptar,或文件系统快照工具,如 dump。如果您只复制某些数据库,只需复制相关的文件。如果您使用 InnoDB,除非您启用了 innodb_file_per_table 选项,否则所有表格都存储在系统表空间文件中。

以下文件不需要用于复制:

  • mysql 数据库相关的文件。

  • 副本的连接元数据存储库文件 master.info,如果使用;使用该文件现在已弃用(见 第 19.2.4 节,“中继日志和复制元数据存储库”)。

  • 源的二进制日志文件,除了二进制日志索引文件,如果您要使用它来定位源二进制日志坐标的副本。

  • 任何中继日志文件。

根据您是否使用 InnoDB 表,选择以下之一:

如果您使用 InnoDB 表,并且要获得原始数据快照的最一致结果,在过程中关闭源服务器,如下所示:

  1. 获取读锁并获取源状态。见 第 19.1.2.4 节,“获取复制源二进制日志坐标”

  2. 在单独的会话中,关闭源服务器:

    $> mysqladmin shutdown
  3. 创建 MySQL 数据文件的副本。以下示例显示了常见的方式来执行此操作。您需要选择其中之一:

    $> tar cf /tmp/db.tar ./data
    $> zip -r /tmp/db.zip ./data
    $> rsync --recursive ./data /tmp/dbdata
  4. 重新启动源服务器。

如果您不使用 InnoDB 表,可以从不关闭服务器的情况下获取系统快照,如下所示:

  1. 获取读锁并获取源状态。见 第 19.1.2.4 节,“获取复制源二进制日志坐标”

  2. 创建 MySQL 数据文件的副本。以下示例显示了常见的方式来执行此操作。您需要选择其中之一:

    $> tar cf /tmp/db.tar ./data
    $> zip -r /tmp/db.zip ./data
    $> rsync --recursive ./data /tmp/dbdata
  3. 在获取读锁的客户端中,释放锁:

    mysql> UNLOCK TABLES;

一旦您创建了数据库的存档或副本,就将文件复制到每个副本,然后启动复制过程。