我们正在使用非常简单的MASTER-> SLAVE MySQL基于查询的复制。
每个午夜,从站上的cron脚本停止复制SQL_THREAD,使用mysqldump备份从站数据库,然后重新启动复制SQL_THREAD。
虽然复制后重新启动,它立即停止,在SHOW SLAVE STATUS \ G此错误输出
Last_Errno: 1062 Last_Error: Error 'Duplicate entry '54149' for key 1' on query. Default database: 'dbname'. Query: 'insert into emails (emailsubject,emailmessage,html) values (blah','blah', false);'
看起来问题是从站上的复制日志正在重播它已经处理的语句。
MySQL错误跟踪似乎同意我: http : //bugs.mysql.com/bug.php?id=38205#c200483
由于复制似乎是这样一个基本和标准的程序,我的问题是:我们如何避免复制尝试重播语句?
附录:我想用标签的“开始 – 停止”和“重放”和“语句”来创build这个post,但是我的声望还不够高(似乎很愚蠢)?
你需要停止复制来运行你的转储,mysqldump可以通过--lock-all-tables选项获得全局读锁。
我们有一个类似的设置和使用mysqldump运行备份,而不停止复制。
mysqldump --host=$HOST -u $USER --password=$PASSWORD --max_allowed_packet=512M --port=3306 --single-transaction --skip-add-locks --quick --master-data=2
这对我们有用。
您引用的错误线程似乎表明该问题不会影响InnoDB表,并且自5.1.35起已被修复。 我是否正确阅读?
你使用的是哪种表types,以及MySQL的哪个版本? 另外,你使用交易?
希望这可以帮助!
愚蠢的问题,但你每次看到它的“地址”错误 – 通过设置sql_slave_skip_counter = 1例如 – 然后成功地重新启动奴隶? 如果错误从未解决,复制日志中的位置将保持不变,每次都会遇到此错误,直到采取适当的步骤。
您可以configurationMySQL,以便复制继续超过这个特定的错误:
slave-skip-errors=1062
请参阅: http : //dev.mysql.com/doc/refman/5.0/en/replication-options-slave.html