现有个变态的需求,将多台主机数据库中的一个表同步到另外一台从机数据库的数据表下,并且,各主机的数据在同步到从机时,需要动态改变某个字段的值,例如,主机字段name=A,同步到从机时转换为name=A1。
根据需要,我想到了通过在主机触发器来将数据插入到从机,但没发现Mysql有跨机器操作的触发器(不知是否真的没有,如果有的话就好办多了),所以我又想到,在各个主机上新建一个临时表,然后通过触发器向临时表中插入数据,再由临时表同步到从机,问题是,怎么才能实现多个主机数据同步到一台从机?多谢。
根据需要,我想到了通过在主机触发器来将数据插入到从机,但没发现Mysql有跨机器操作的触发器(不知是否真的没有,如果有的话就好办多了),所以我又想到,在各个主机上新建一个临时表,然后通过触发器向临时表中插入数据,再由临时表同步到从机,问题是,怎么才能实现多个主机数据同步到一台从机?多谢。
解决方案 »
- MMYSQL获得datadir路径
- 根据ip查询各个城市的注册人数
- E-R图的设计
- 同样的sql语句为什么在mysql下可以运行 在php里去不行
- 数据库中权限表应该怎么设计
- 问一下MYSQL中有没有取年月的函数??
- 如何将access的.mdb文件,导入mysql?我已下载了myodbc
- 调用视图(VIEW)时,是每次调用时视图刷新,还是当源数据发生变化时,就已经刷新视图了
- mysql存储过程遍历,为什么只遍历第一条数据
- 求助,mysql启动报/usr/local/mysql/bin/mysqld_safe: line 183: 2664 Killed
- 请问如何查出某纪录的上两个和下两个纪录?
- mysqladmin 如何修改一个非root用户的密码?
一个是用来发送到远端的本地更新数据包,叫send表。
一个是用来接收远端发送过来的更新数据包的表,叫receive表。
通过触发器TR来获取对各表的 upd , insert , delete 操作。
把更新的数据包放到send表中。当然,会过滤掉从receive表中的数据。
然后在各个端安装2个webservice 。
一个用于把打包的更新数据包发送到远端。
另一个用于解析数据包,并插入到本地库内。
缺点就是:
1. mysql 对触发器的管理不便,库比较大,有百来张表,写触发器很麻烦。
2. 如在批量更新的操作中,upd的触发器使用频繁。影响效率。
所以没法子,只能摒弃或改进触发器的方法。不过webservice的设计还是不错的。用mysqlproxy去获得本地的更新语句。在每台机器上都安装一个webservice 里面就两个方法。
一个是getDate方法。getDate得到本地的更新数据包,
一个是setDate方法。setDate方法把数据写入到自己本地的库中。比如两台机器A,B;对于A:将本地数据跟新到远程B库中:date=A.getDate(); B.setDate(date);将远程B数据跟新到本地A库中:date=B.getDate(); A.setDate(date);对于B 来说同理。
两个主机可以正常的同步数据,但是在一台主机关闭后,无法正常的切换到另一台主机,
例如,一个应用程序(位于C机)向主机A插入数据,插入的数据同时同步到主机B,当A机关闭后,位于C机的应用程序就无法正常插入数据了,在My.ini中加入log-slave-updates也不行,log-slave-updates是不是起这个作用的,如何才能实现切换?
2 同时楼主注意下,下面的内容:
A -> B -> C
也就是说,A为从服务器B的主服务器,B为从服务器C的主服务器。为了能工作,B必须既为主服务器又为从服务器。你必须用--logs-bin启动A和B以启用二进制日志,并且用--logs-slave-updates选项启动B。