LMLPHP后院

MySQL 使用原始数据文件创建一个数据快照技术

maybe yes 发表于 2018-08-12 16:41

MySQL 主从同步配置使用原始数据文件创建数据快照

如果数据库体量很大,复制原始数据文件使用 mysqldump 更加有效,然后在每个从库上导入文件。当执行 INSERT 语句时,这种技术会跳过更新索引的开销。

使用这种方法与具有复杂缓存或记录算法的存储引擎中的表一起使用需要额外的步骤来生成完美的“时间点”快照:即使您已获得全局读锁定,初始复制命令可能会遗漏缓存信息和记录更新存储引擎如何响应这取决于其崩溃恢复能力。

当主从服务在 ft_stopword_file, ft_min_word_len,ft_max_word_len 上有不同的值且复制的表上有全文索引,这种方法可能不太可靠。

如果使用 InnoDB 表,可以使用 mysqlbackup 命令来创建一个一致性的快照,mysqlbackup 来自 MySQL 企业备份组件。这个命令记录对应与稍后在从站上使用的日志名和偏移量。MySQL 企业备份是一个包含在 MySQL 企业订阅中的商业产品。

此外,使用冷备份技术获取一个可靠的二进制 InnoDB 快照:在 MySQL 服务的慢关机后复制所有数据文件。

创建一个 MyISAM 表的原始数据快照,假设您的 MySQL 数据文件存在于单个文件系统中,可以使用标准的复制工具如 cp,copy,远程复制工具 scp,rsync,打包工具 zip,tar,或者文件系统快照工具如 dump。如果复制的仅仅是部分数据库,复制仅仅那些和表相关的文件即可。(对于 InnoDB,所有的表和所有的数据库都存储在系统表空间文件里面,除非将 innodb_file_per_table 配置项打开。)

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

  • mysql 数据库相关的文件
  • master.info 文件
  • 主服务的二进制日志文件
  • 任何中继日志文件

为了通过原始数据快照得到更一致性的结果,在操作过程中关闭主服务。

1. 获取读取锁并且得到主服务的状态信息

2. 单独一个会话,关闭 mysql 主服务:

$ mysqladmin shutdown

3. 制作一个 MySQL 数据文件的副本,如下示例,选择一种自己擅长的方式。

$ tar cf /tmp/db.tar ./data
$ zip -r /tmp/db.zip ./data
$ rsync --recursive ./data /tmp/dbdata

4. 启动主服务

如果使用的不是 InnoDB 表,可以获得主服务快照而无需关闭服务。如下步骤:

1. 获取读取锁并且得到主服务的状态信息。

2. 制作一个 MySQL 数据文件的副本,如下示例,选择一种自己擅长的方式。

$ tar cf /tmp/db.tar ./data
$ zip -r /tmp/db.zip ./data
$ rsync --recursive ./data /tmp/dbdata

3. 在获取读取锁的客户端,释放锁:

$ UNLOCK TABLES;

一旦创建了数据库的归档或副本,复制这些文件到每个从服务器,然后开始从服务复制进程。

2021-03-08 01:33:21 1615138401 0.038983