我有一个数据库运行在我们的生产web服务器上,我已经将其设置为一个主服务器,在另一个数据中心中有一个从属服务器。当阅读MySQL复制设置说明时,他们建议将服务器脱机,放置读锁,进行转储,然后使用它创建从服务器。我做了,建立了复制,我们很高兴。
今天,我认为在广域网上清晰地复制可能不是一个好的实践。因此,我研究了通过SSH隧道(临时)设置复制。这要求我将master_host更改为127.0.0.1,而不是我的主IP。在这样做的过程中,我复制了我的副本,现在我必须重新开始。问题是,大师只有expire_logs_days=1,所以我不能重复最初的过程,因为它是上周。我确实备份了其他的二进制日志,但是使用mysqlbinlog来恢复所有这些日志总是因为临时表问题而失败。
所以,现在我试图让从备份和运行,而不让主人下来。每3个小时,在主服务器上,我们为备份做一个数据库转储。我们使用mysqldump -v --flush-logs --single-transaction --routines ....,这样就可以切断当前的二进制日志,并通过每次备份创建一个新的日志。但是,如果我还原一个数据库转储,然后尝试使用使用最后一个刷新日志命令创建的新二进制日志启动复制备份,我仍然会遇到密钥冲突,就像他们警告的那样。
考虑到这些信息,我是否可以通过转储成功地启动从服务器,而不必再次关闭服务器?如果我不得不去要求更多的休息时间,我就不会在一个好地方了。
发布于 2012-10-22 21:12:13
在这种情况下,它们是对您有好处的两件事。
如果任何一件好事都适用的话,那么我有好消息要告诉你
上的所有二进制日志
在主服务器上运行以下命令:
mysql> RESET MASTER;如果这个部分让您感到害怕,您可以跳过它,或者在执行之前复制二进制日志。
echo "STOP SLAVE;" > MySQLSlaveReload.sql
mysqldump -v --master-data=1 --single-transaction --routines .... >> MySQLSlaveReload.sql
echo "START SLAVE;" >> MySQLSlaveReload.sql(
MySQLSlaveReload.sql移动到奴隶(
上加载MySQLSlaveReload.sql
在奴隶上,按如下方式加载脚本:
mysql -u... -p... -A < MySQLSlaveReload.sql脚本将停止从服务器,加载数据,并启动从服务器。日志文件和位置呢?在执行STEP02之前,请查看MySQLSlaveReload.sql的第22行
head -22 MySQLSlaveReload.sql | tail -1mysqldump选项--master-data=1记录到第22行mysqldump开始时的日志文件和位置。
试试看!!
https://dba.stackexchange.com/questions/27411
复制相似问题