Documentation Home

16.1.2.4 选择数据快照的方法

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

要选择转储数据库的适当方法,请在以下选项之间进行选择:

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

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

16.1.2.4.1 使用 mysqldump 创建数据快照

要在现有源中创建数据快照,请使用mysqldump工具。数据转储完成后,在开始复制过程之前将此数据导入副本。

以下示例将所有数据库转储到名为 的文件 dbdump.db,并包括 --master-data自动附加CHANGE MASTER TO副本所需语句以启动复制过程的选项:

$> mysqldump --all-databases --master-data > dbdump.db
笔记

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

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

  • --ignore-table使用选项 排除数据库中的所有表 。

  • --databases使用该选项 仅命名要转储的那些数据库 。

有关详细信息,请参阅第 4.5.4 节,“mysqldump — 数据库备份程序”

要导入数据,请将转储文件复制到副本,或者在远程连接到副本时从源访问该文件。

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

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

如果您使用InnoDB表,您可以使用 MySQL Enterprise Backup 组件中的mysqlbackup命令来生成一致的快照。此命令记录与要在副本上使用的快照对应的日志名称和偏移量。MySQL Enterprise Backup 是一种商业产品,作为 MySQL Enterprise 订阅的一部分包含在内。有关详细信息,请参阅 第 28.2 节,“MySQL 企业备份概述”

ft_stopword_file如果源和副本具有不同的、 ft_min_word_len或 值ft_max_word_len并且您正在复制具有全文索引的表, 则此方法也无法可靠地工作 。

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

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

复制不需要以下文件:

  • mysql数据库相关的文件。

  • 副本的连接元数据存储库文件,如果使用(请参阅第 16.2.4 节,“中继日志和复制元数据存储库”)。

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

  • 任何中继日志文件。

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

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

  1. 获取读锁并获取源的状态。请参阅 第 16.1.2.3 节,“获取复制源的二进制日志坐标”

  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. 获取读锁并获取源的状态。请参阅 第 16.1.2.3 节,“获取复制源的二进制日志坐标”

  2. 制作 MySQL 数据文件的副本。以下示例显示了执行此操作的常用方法。您只需选择其中一项:

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

    mysql> UNLOCK TABLES;

创建数据库的存档或副本后,在开始复制过程之前将文件复制到每个副本。