Documentation Home
MySQL 8.0 参考手册  / 第十七章复制  / 17.1 配置复制  / 17.1.2 设置基于二进制日志文件位置的复制  /  17.1.1.6 使用原始数据文件创建数据快照

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

如果您的数据库很大,复制原始数据文件比使用mysqldump并在每个副本上导入文件 更有效。这种技术跳过了在INSERT 重放语句时更新索引的开销。

在具有复杂缓存或日志算法的存储引擎中使用此方法需要额外的步骤来生成完美的时间点快照:初始复制命令可能会遗漏缓存信息和日志更新,即使您已获得全局读锁. 存储引擎对此如何响应取决于它的崩溃恢复能力。

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

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

否则,使用冷备份技术获取表的可靠二进制快照 :缓慢关闭 MySQL 服务器 InnoDB后复制所有数据文件。

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

您可能希望专门从存档中排除以下文件:

  • mysql数据库相关的文件。

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

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

  • 任何中继日志文件。

为了使用原始数据快照获得最一致的结果,请在此过程中关闭源服务器,如下所示:

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

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

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

    mysql> UNLOCK TABLES;

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