复制一些表而不传输整个日志

chr*_*ris 5 mysql replication

我有一个 mysql 数据库,其中包含一些带有私人信息的表和一些带有公共信息的表。

我只想将包含公共信息的表从一个数据库复制到另一个数据库,确保没有机密信息存储在从属数据库上。

我知道我可以使用replicate-do-table来指定只复制一些表,但我的理解是整个 bin 日志传输到从属。

有没有办法确保只有公共信息被传输到奴隶?

我非常犹豫是否将数据库的另一个副本添加到现有服务器 - 我只是认为现有服务器没有可用容量,无论是 RAM 还是 CPU。

Rol*_*DBA 7

在一台数据库服务器上进行过滤的唯一方法是在一台数据库服务器上运行多个 MySQL 实例。

服务器DB1

端口 3306将是您的应用程序的普通数据库实例

端口 3307将成为端口 3306 的从属端口

对于在 DB1 上运行的 MySQL 实例,您需要执行一些操作

  • 在 my.cnf 中启用以下内容
    • 日志-bin=mysql-bin
    • 记录从属更新
    • 复制-do-table=db1.public_tb1
    • 复制-do-table=db2.public_tb2
    • ...
    • 复制-do-table=dbn.public_tbn

作为一个选项,将 DB1 3307 中的所有表转换为BLACKHOLE 存储引擎

这样,DB1 3307 就只有包含信息的二进制日志。没有实际数据。

服务器DB2

设置 MySQL 实例并使其成为 DB1 的 3307 实例的从属实例。为什么这样好呢?

因为DB1 3307实例中的binlog应该只包含公共信息。因此,DB1 3307 中的所有从站只能看到公共信息。

警告

请参阅我的其他帖子,了解如何在复制中使用 BLACKHOLE 表