首页 / MYSQL / MySQL触发多个数据库的复制
MySQL触发多个数据库的复制
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL触发多个数据库的复制,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1631字,纯文字阅读大概需要3分钟。
内容图文
![MySQL触发多个数据库的复制](/upload/InfoBanner/zyjiaocheng/904/ee54a13b265745ce8be678d6a2e7410a.jpg)
我在MySQL 5.0.45上运行了几个数据库,并且我试图让我的遗留数据库与修改后的模式同步,所以我可以并排运行.我这样做是通过向新数据库添加触发器但我遇到了复制问题.我的设置如下.
服务器“主人”
>数据库“legacydb”,复制到服务器“slave”.
>数据库“newdb”,具有更新“legacydb”且无复制的触发器.
服务器“奴隶”
>数据库“legacydb”
我对“newdb”的更新运行正常,并引发了我的触发器.他们在“主”服务器上更新“legacydb”.但是,更改不会复制到从属. MySQL文档说,为了简单起见,复制在决定复制哪些查询而不是查看查询的产品时查看当前数据库上下文(例如“SELECT DATABASE();”).我的触发器是从数据库“newdb”的上下文运行的,因此复制会忽略更新.
我已经尝试将update语句移动到“legacydb”中的存储过程.当我连接到“master”并手动运行“USE newdb; CALL legacydb.do_update(‘Foobar’,1,2,3,4);”时,这工作正常(即数据复制到slave).但是,从触发器调用此过程时,它不会复制.
到目前为止,我对如何解决这个问题的想法是以下之一.
>强制触发器设置新的当前数据库.这将是最简单的,但我不认为这是可能的.这是我希望用存储过程实现的.
>复制两个数据库,并在主服务器和从服务器中都有触发器.这是可能的,但设置起来很痛苦.
>强制复制以获取对“legacydb”的所有更改,而不管当前的数据库上下文如何.
>如果复制运行的级别太高,它甚至永远不会看到我的触发器运行的任何更新,在这种情况下,没有任何黑客攻击可以实现我想要的.
任何有关如何实现这一目标的帮助将不胜感激.
解决方法:
这可能与它有关:
存储函数在执行之前获取表锁,以避免由于语句执行顺序与日志中出现的顺序不匹配而导致二进制日志不一致.记录调用函数的语句而不是函数内执行的语句.因此,更新相同基础表的存储函数不会并行执行.
相反,存储过程不会获取表级锁.存储过程中执行的所有语句都将写入二进制日志.
此外,还有一系列触发器问题:
http://dev.mysql.com/doc/refman/5.0/en/routine-restrictions.html
内容总结
以上是互联网集市为您收集整理的MySQL触发多个数据库的复制全部内容,希望文章能够帮你解决MySQL触发多个数据库的复制所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。