我有一个中央数据库,其中所有数据都位于MySQL 5.1-lastest-stable中。
我想将多个客户端挂接到主-主关系中。
问题
如何设置星型拓扑,在中间有1个中央服务器,其中有多个客户端数据库,以便一个客户端中的更改首先传播到中央服务器,再从那里传播到所有其他客户端数据库?
数据库信息
我对所有表使用inno-db,并且启用了二进制日志。
除此之外,我还学习了如何在数据库之间进行主-主操作。
所有表都有主键primary integer autoincrement
。自动增量的偏移量和起始位置已调整到不同的客户端数据库,因此永远不会存在主键冲突。
我为什么要这个
我有客户端软件(不是网站或php)连接到笔记本电脑上的本地MySQL数据库,这需要同步到中央数据库,以便所有在笔记本电脑上使用该程序的人都可以看到其他人所做的所有其他更改。
我不想直接连接到中央数据库,因为如果便携式计算机和中央数据库之间的Internet连接断开,我的应用程序就会死掉。
在此设置中,应用程序继续运行,直到重新建立与中央数据库的连接后,笔记本电脑才不会从其他人那里获得更新。
鉴于需要使用针对 float 从站的MySQL循环复制作为同步DB的方法,以下是一种解决方案:
1个DB Master
4个DB从站
数据库主设置
安装MySQL 5.1.x 确保/etc/my.cnf
服务器ID = 1
log-bin = mysql-bin
expire-logs-days = 14
default-storgae-engine = InnoDB 启动MySQL RESET MASTER; (从数据库主数据库清除二进制日志)将数据加载到主中
GRANT SELECT,REPLICATION从ON。 TO复制者@'%',由'repl-password'标识; 设置数据库奴隶安装MySQL 5.1.x 确保/etc/my.cnf
server-id =(唯一的服务器ID)
log-bin = mysql-bin
default-storage-engine = InnoDB 启动MySQL 将MASTER TO MASTER_HOST ='DB Master的IP地址',MASTER_PORT = 3306,MASTER_USER ='复制器',MASTER_PASSWORD ='repl-password',MASTER_LOG_FILE ='mysql-bin.000001',MASTER_LOG_POS = 106; START SLAVE; (让复制 catch ,检查SHOW SLAVE STATUS\G)停止从站; 将MASTER更改为MASTER_HOST ='DB Distribution Master的IP地址',MASTER_PORT = 3306,MASTER_USER ='复制器',MASTER_PASSWORD ='repl-password',MASTER_LOG_FILE ='mysql-bin.000001',MASTER_LOG_POS = 106; START SLAVE; 导入过程一旦准备好每个数据库从站,现在就可以按以下步骤在数据库主站和数据库从站之间进行数据迁移(对于数据库主站来说是DM,对于数据库从站来说是DS):
在DS上,运行SHOW MASTER STATUS; 在DS上,记录二进制日志文件名和位置在DM上,运行CHANGE MASTER TO MASTER_HOST ='DS的IP地址',MASTER_PORT = 3306,MASTER_USER ='replicator',MASTER_PASSWORD ='repl-password',MASTER_LOG_FILE ='LogFile From Step2',MASTER_LOG_POS =(来自Step2的LogPos) ; 在DM上,运行START SLAVE; (让复制 catch ; DS向DM引入端口更改)在DM上,停止从动; 在DS上,记录/var/lib/mysql/master.info(日志文件)的第2行在DS上,记录/var/lib/mysql/master.info的第3行(日志位置)在DS上,运行CHANGE MASTER TO MASTER_HOST ='DM的IP地址',MASTER_PORT = 3306,MASTER_USER ='replicator',MASTER_PASSWORD ='repl-password',MASTER_LOG_FILE ='LogFile From Step6',MASTER_LOG_POS =(来自Step7的LogPos) ; 在DS上,运行START SLAVE; (让复制 catch ; DM向DS引入的端口更改)在DS上,停止从动; CAVEAT 导入过程至关重要!您必须每次都记录正确的日志文件和正确的日志位置。
试一试 !!!
让我知道事情的后续 !!!