这听起来像是一种特殊类型的 MySQL 复制拓扑的工作
我想到的拓扑结构被称为“分发主机”,它来自《高性能 MySQL:优化、备份、复制等》一书的第 368-370 页,小标题为“主机、分发主机和从机”。
您将需要以下内容
1 个 DB 主服务器
1 个 DB 分发主服务器(称为 /dev/null 从站,或黑洞从站) 任意
数量的 DB 从站
DB MASTER 的设置
- 安装 MySQL 5.1.x
- 确保 /etc/my.cnf
server-id=1
log-bin=mysql-bin
expire-logs-days=14
default-storgae-engine=InnoDB
- 启动 MySQL
- 复位主;(从 DB Master 清除二进制日志)
- 将数据加载到 Master
- GRANT SELECT,REPLICATION SLAVE ON 。TOreplicator@'%' IDENTIFIED BY 'repl-password';
DB 分配主站的设置
- 安装 MySQL 5.1.x
- 确保 /etc/my.cnf
server-id=2
log-bin=mysql-bin
expire-logs-days=14
default-storage-engine=BLACKHOLE
skip-innodb
- 启动 MySQL
- CHANGE MASTER TO MASTER_HOST='DB Master的IP地址', MASTER_PORT=3306, MASTER_USER='replicator', MASTER_PASSWORD='repl-password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;
- 启动奴隶;
- GRANT SELECT,REPLICATION SLAVE ON 。TOreplicator@'%' IDENTIFIED BY 'repl-password';
- 对于不在 information_schema 数据库中且不在 mysql 数据库中的每个表,将每个表转换为 BLACKHOLE 存储引擎,如下所示: ALTER TABLE tblname ENGINE=BLACKHOLE;
- 复位主;(从 DB Distribution Master 清除二进制日志)
DB 从站的设置
- 安装 MySQL 5.1.x
- 确保 /etc/my.cnf
server-id=3
default-storage-engine=InnoDB
- 启动 MySQL
- CHANGE MASTER TO MASTER_HOST='DB Master的IP地址', MASTER_PORT=3306, MASTER_USER='replicator', MASTER_PASSWORD='repl-password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;
- 启动奴隶;(让复制赶上,检查 SHOW SLAVE STATUS\G)
- 停止奴隶;
- CHANGE MASTER TO MASTER_HOST='DB Distribution Master的IP地址', MASTER_PORT=3306, MASTER_USER='replicator', MASTER_PASSWORD='repl-password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;
- 启动奴隶;
设置的目的是让 DB Master 只处理仅用于 DB Master 的 SQL。要复制到 DB 从站的 SQL 由 DB Distribution Master 处理。这将减轻 DB Master 处理 SQL 到 Slave 的传输;这成为 DB Distribution Master 的责任。所有从站都从 DB Distribution Master 而不是 DB Master 读取 SQL 更改。
尽管我不完全了解您的应用程序,但此拓扑应该正确支持一个中央数据库和多个读取从属,而 I/O 不会限制中央数据库。只要每台笔记本电脑处理一组与其他笔记本电脑不同且不同的独特客户端,您的应用程序就应该组织对客户端数据库的 INSERT、UPDATE 和 DELETE。
警告
您可能必须对 DB 从站进行认真的测试,以确保数据不会因为 BLACKHOLE 设置而消失。如果发生这种情况,请尝试删除“default-storage-engine=BLACKHOLE”并重新加载所有内容。
这种性质的未来问题应该在dba.stackexchange.com中提出