MySQL_5.6服务器之间的复制。主人和奴隶。复制开始30分钟后,有1062个错误。 现在一切都好。 “SHOW SLAVE STATUS”中没有错误; 如果我在Master中创建表,我可以在Slave上看到它们。看起来一切都还好,但是。
Master 17 GB上的数据库大小。文件系统是UFS。 (FreeBSD_9)
Slave上的数据库大小仅限12 GB。文件系统EXT4与NOATIME(Ubuntu_12.04)
可以吗?
答案 0 :(得分:1)
我认为主服务器和从服务器之间的数据可能不一致。
您可以使用名为pt-table-checksum的开源工具检查复制完整性 它可以安全有效地验证MySQL副本上的数据是否与主服务器相同。 MySQL副本上的数据不一致是一个众所周知且相当常见的问题,但许多依赖MySQL复制的人从不检查它。
答案 1 :(得分:1)
你得到1062错误的事实几乎肯定意味着你没有从复制开始,你应该重新开始。
如果您使用--master-data
提取数据时没有use --single-transaction
和mysqldump
选项...或者您没有使用正确的坐标CHANGE MASTER TO
然后这些可能是原因。
然而,要考虑的另一件事是表会随着时间的推移而分段,因此主服务器上的表空间不可能像从服务器上新创建的那样紧凑。这可以通过主服务器上的OPTIMIZE \[LOCAL\] TABLE
statement运行来解决,您可以使用mysqlcheck
实用程序自动执行此操作。
$ mysqlcheck --all-databases --optimize --skip-write-binlog
但是......这更能确保尺寸与实际需要的尺寸相当,并且要注意每个工作台在优化时都会被锁定,导致应用程序在锁定时可能出现问题地点。此外,如果您使用的是InnoDB表,但实际上不会更改磁盘上数据的大小,但您没有使用innodb_file_per_table
选项...您应该使用它,但如果您不使用,那么现在更改它不会影响主服务器上的任何现有表 - 只有新表。
主服务器和从服务器具有绝对相同的数据至关重要,否则您将产生错误的安全感并且您的服务器将不相同,并且复制最终会再次中断 - 同时,针对从服务器的查询可能会返回不同的结果比主人。
针对每个表运行的 CHECKSUM TABLE
将返回一个数字。如果两个服务器上的数字不同,则表格不包含相同的数据。还有第三方工具可以自动执行此检查......甚至可以解决问题:
如果不一致并不严重,pt-table-sync
实用程序可用于使两台计算机重新同步。我不使用它,因为我们有自己的内部系统来审核服务器的一致性和修复不匹配的表......顺便说一下,当设置复制时,这是一个非常罕见的条件从一开始就正确。
答案 2 :(得分:0)
有一些工具可以在线检查主从一致性,而无需禁用写入或其他任何内容 - 其中一个是:https://github.com/KredytyChwilowki/MySQLReplicaIntegrityCheck