我正在准备建立一个MySQL主从或主从关系.现在我只有一台MySQL生产服务器,当然,在连接从服务器时,我不希望有太多的停机时间。
我没有办法连接一个空的从机,让它“慢慢”地同步来自主站的数据,直到它们是相同的?
我已经注意到,我可以在主服务器上使用mysqldump进行事务转储,然后将其导入到从属程序中,但是当奴隶导入转储时,将会编写很多新行,而奴隶将如何获得这些数据呢?
我希望我在这里遗漏了一些显而易见的东西,但是广泛的googling给出了这样的建议,比如“由于这会导致未来的停机时间减少,所以现在的一些停机时间可能并不是什么坏事”。但我真的很想避免那样做。
相关的关于MyISAM的问题,但我使用InnoDB。
发布于 2011-11-18 13:12:53
如果你使用的是100%的InnoDB,那么你是幸运的。您可以使用XtraBackup对主数据库进行完全备份,而无需任何停机时间或任何表锁定。这将是一个一致的快照样式备份,与执行FLUSH TABLES WITH READ LOCK或--master-data选项时得到的类型相同。
XtraBackup工具还在备份目录中删除一个额外的文件,其中包含在从服务器上开始复制所需的MASTER_LOG_POS和MASTER_LOG_FILE信息。
备份完成后,您将需要在备份上运行XtraBackup的--prepare选项,将其加载到从进程中,重新启动从MySQL进程,并告诉它它需要的新MASTER_LOG_POS和MASTER_LOG_FILE值。
在启动奴隶之前,您需要在您的skip-slave-start中使用my.cnf。
还请记住,默认情况下,mysql模式是MyISAM (如果内存服务正确,只能是MyISAM),因此在运行备份时,您仍然必须小心不要对这些表进行任何更改。只要你坚持这条规则,主信息仍然是正确的。
在从服务器上使用忽略mysqlmy.cnf中的模式通常是个好主意,并且只创建具有选择特权的用户。不一致和不同步的奴隶很难检测和处理痛苦,即使在使用Percona (和之前的Maatkit )提供的工具时也是如此。
编辑:
虽然您说您正在使用InnoDB,但为了完整性起见,如果您使用MyISAM表,还有另一种方法。如果有带有快照的卷管理器(如ZFS或LVM),则可以运行FLUSH TABLES WITH READ LOCK和SHOW MASTER STATUS,创建快照并运行UNLOCK TABLES。停机时间应该是相当小的。相比之下,昨晚用于备份一个数据库的cron作业用了6秒来创建快照,这是数据库处于“下线”的位置,将文件从快照复制到备份服务器需要27分钟。
发布于 2011-11-18 12:39:53
不可能“从头开始”启动mysql复制。
相反,在转储数据库时,可以将mysqldump与--master-data=2参数一起使用--例如:
mysqldump --master-data=2 --all-databases --opt -p > myinitialdump.sql此命令将在转储期间锁定受影响数据库中的所有表,并以注释方式将复制坐标写入转储的标头,如下所示:
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000018', MASTER_LOG_POS=106;导入完成后,您可以手动运行"change master to“命令,该命令以主机名和身份验证数据为调料--复制将在转储点启动。
请记住,mysqldump进程本身由于锁定争用而导致“停机时间”--它在转储的整个期间对所有表放置读锁(类似于带有读锁命令的同花顺表)。因此,除非转储完成,否则写入任何表的请求都不会返回。而且,除非您在低_优先级_更新配置中指定了MySQL,或者在转储之前发出了设置全局LOW_PRIORITY_UPDATES=1,否则写入请求可能也会阻止任何子序列读取请求。
https://serverfault.com/questions/332339
复制相似问题