mysql / mariadb单个数据库复制,仅对此单个数据库进行读写拆分

时间:2019-02-04 04:16:10

标签: mysql mariadb database-replication

在我的设置中,有两个debian服务器。第一个是旧的生产服务器,第二个是新的服务器。在第一个(旧)应用程序上运行mysql v5.5 db-server和一个滞后支持的旧应用程序。它不能轻松移植到新服务器。新服务器运行mariadb v10.1,所有其他应用程序都从旧服务器移植到新服务器上。这些应用程序还必须处理无法移植的应用程序数据。 移植的应用程序只能访问本地数据库。因此,没有简单的方法来更改这些应用程序与旧数据库服务器的连接。

我的想法: 我要将mysql v5.5 db服务器的一个数据库(由不可移植的旧应用程序使用)的数据复制(主-从)到maraidb v10.1 db-服务器。 到目前为止没有问题。

但是新服务器上的应用程序不仅可以读取旧应用程序的数据,还可以对其进行修改。而且它们还具有仅在新服务器上存在的自己的数据库。据我所知,这是一个问题,如果应用程序尝试在从属服务器上的复制数据库上进行写操作,则在某些情况下可能导致复制中断。 解决此问题的下一个想法是,我可以利用sql调度程序代理,并找到一些有趣的代理(mariadb maxscale,haproxy,proxySQL),但据我了解,他们可以拆分读写操作,但找不到将不同数据库的写操作路由到不同服务器的方法。

有人可以给我提示解决这个问题吗?

设置:

服务器1-Mysql v5.5-数据库_1

服务器2-Mariadb v10.1-数据库_1,数据库_2,数据库_3

服务器1上的应用程序正在从服务器1上的database_1写入和读取数据。 服务器2上的其他应用程序正在读取数据并将数据写入服务器2上的database_1。

因此,database_1的数据必须从服务器1复制到服务器2,并且可以在那里进行更改。

可以使用主-主复制而不是主-从复制,但是由于auto_increment字段可能会中断复制,并且由于服务器2上的更改数据不必存在于服务器1上,我认为这不是要走的路。 (我知道我可以将auto_increment间隔设置为2来避免此问题,但是它已经在运行中了,因此更改这样的操作并不容易。)

目前,我们正在手工备份并复制它们,但这会减慢速度,我相信还有更好的方法;)

1 个答案:

答案 0 :(得分:0)

您可以对将永远不会出现在复制尖叫中的数据库(如database_2和database_3)使用写到复制从属服务器(服务器2)的方式。

如果您开始更新database_1,则可能会遇到麻烦。

您要在两个版本之间存在较大版本差异的数据库服务器之间进行复制,因此有可能将已弃用的SQL语句复制到已删除该语句的服务器上,并且复制将停止。部署后的几周内,请留意这一点。 binlog_format = ROW可能会缓解一些可能错误获取的SQL。