• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 选择数据快照的方法

    如果主数据库包含现有数据,则必须将此数据复制到每个从数据库。有多种方法可以从master数据库中转储数据。以下各节介绍了可能的选项。

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

    • 使用mysqldump工具创建要复制的所有数据库的转储。这是推荐的方法,尤其是使用时InnoDB
    • 如果数据库存储在二进制可移植文件中,则可以将原始数据文件复制到从属服务器。这比使用mysqldump并在每个从属服务器上导入文件更有效,因为INSERT在重播语句时,它跳过了更新索引的开销。InnoDB不建议使用这种存储引擎。

    使用mysqldump创建数据快照

    要在现有的master数据库中创建数据快照,请使用mysqldump工具。数据转储完成后,请在开始复制过程之前将此数据导入从属设备。

    以下示例将所有数据库转储到名为的文件中dbdump.db,并包括--master-data自动CHANGE MASTER TO在从属服务器上追加启动复制过程所需的语句的选项:

    shell>mysqldump --all-databases --master-data > dbdump.db
    
    注意

    如果不使用--master-data,则必须手动将所有表锁定在一个单独的会话中。请参见“获取复制主二进制日志坐标”。

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

    • 使用--ignore-table选项排除数据库中的所有表。
    • 使用该--databases选项仅命名要转储的数据库。
    注意

    默认情况下,如果在主机(gtid_mode=ON)上使用了GTID ,则mysqldumpgtid_executed将转储输出中主机上的GTID包括在内,以将它们添加到从机上的 GTID中gtid_purged。如果仅转储特定的数据库或表,则需要注意的是,mysqldump包含的值包括gtid_executed主数据库集中该集合中所有事务的GTID ,甚至那些更改了数据库的抑制部分或其他数据库的GTID 。部分转储中未包含的服务器。检查mysqldump的描述--set-gtid-purged选项以查找所使用的MySQL Server版本的默认行为的结果,以及在此结果不适合您的情况时如何更改行为。

    有关更多信息,请参见“mysqldump-数据库备份程序”。

    要导入数据,请将转储文件复制到从属服务器,或者在远程连接到从属服务器时从主服务器访问文件。

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

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

    如果使用InnoDB表,则可以使用MySQL Enterprise Backup组件中的mysqlbackup命令生成一致的快照。此命令记录与要在从站上使用的快照相对应的日志名称和偏移量。MySQL Enterprise Backup是商业产品,包含在MySQL Enterprise订阅中。有关详细信息,请参见“ MySQL企业备份概述”。

    这种方法还不能可靠地工作,如果主机和从机有不同的价值观ft_stopword_fileft_min_word_len或者ft_max_word_len你是具有全文索引复制表。

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

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

    复制不需要以下文件:

    • mysql数据库有关的文件。
    • 主信息存储库文件master.info(如果使用);现在不建议使用此文件(请参见“复制中继和状态日志”)。
    • 主站的二进制日志文件,但二进制日志索引文件除外(如果要使用该文件查找从站的主二进制日志坐标)。
    • 任何中继日志文件。

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

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

    1. 获取读锁并获取主机的状态。请参见“获取复制主二进制日志坐标”。
    2. 在另一个会话中,关闭主服务器:

      shell>mysqladmin shutdown
      
    3. 制作MySQL数据文件的副本。以下示例显示了执行此操作的常用方法。您只需要选择其中之一:

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

    如果不使用InnoDB表,则可以从主服务器获取系统快照,而无需按照以下步骤中所述关闭服务器:

    1. 获取读锁并获取主机的状态。请参见“获取复制主二进制日志坐标”。
    2. 制作MySQL数据文件的副本。以下示例显示了执行此操作的常用方法。您只需要选择其中之一:

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

      mysql> UNLOCK TABLES;
      

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