星型拓扑中的MySQL

标签 mysql configuration replication master topology

我有一个中央数据库,其中所有数据都位于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

    导入过程至关重要!您必须每次都记录正确的日志文件和正确的日志位置。

    试一试 !!!

    让我知道事情的后续 !!!

    关于星型拓扑中的MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5273043/

    相关文章:

    sql - MySQL 从日期列中获取每个月的最后一个日期

    java - 没有为命名空间 [/] 和操作名称映射操作

    configuration - 如何在运行时获得 Grails Config.groovy 中的好东西?

    mysql - 自动从SQL Server 2008r2获取数据到mysql

    redis master slave replication - 从站上丢失数据

    mySQL:mysqlimport 导入逗号分隔文件 - 第一列 = ID,不在要导入的文件中

    php - 认为我需要自助加入?

    php - 如何在 if 条件下使用数组

    mysql - 自增主键和复制

    java - 在 Storm 中为单个 worker 分配内存