我正在尝试为大小约为80gbs的数据库设置复制。从我阅读的所有文档看来,当你执行初始mysqldump来获取数据到slave时你必须做一个全局
FLUSH TABLES WITH READ LOCK
然后在转储后记录binlog位置。无论如何设置复制而不锁定数据库?或者至少进行表级锁定?
答案 0 :(得分:7)
如果您只使用InnoDB表,则可以使用Percona XtraBackup。如果您有MyISAM表,则至少需要一个简短的锁。如果您只有 MyISAM表,并且必须避免任何停机,那么就需要肮脏的技巧。细节因情况而异,并且在决策树中通常会有太多细微之处和分叉在这样的论坛中进行讨论。
答案 1 :(得分:0)
如果不锁定所有表,您将无法创建一致的转储;锁定单个表是没有意义的。
如果您的数据库只包含MyISAM表,您应该能够简单地将datadir复制到从站。有很多方法可以实现InnoDB,但是这些工具并不是免费的。尝试搜索例如对于innodb hotcopy。
答案 2 :(得分:-1)
对于MyISAM表,您可以使用mysqldump
mysqldump --single-transaction --master-data DATABASE_NAME
这将需要对数据库进行短暂锁定以获得一致的转储,但是会为您提供可在从属服务器上运行的SQL文件以设置正确的复制位置。有关详细信息,请参阅the manual。
如果您正在使用InnoDB,XtraBackup是一个免费的实用程序,应该可以完成这项工作。这blog post似乎可以很好地概述整个过程。
在任何一种情况下,您需要锁定以确保一致的转储。但锁定的持续时间很短,不应影响性能。