MySQL数据库与两个数据库同步

时间:2015-01-28 04:37:55

标签: php android mysql database data-binding

由于Android应用程序存在问题我们遇到了问题,这是移动应用程序的某些部分进入实时状态,而某些部分则转向QA。因此,暂时的解决方法是让QA和Live成为DB的相同副本。因此在两个数据库中都说我们有USER&例如,SCHOOL表和Android应用程序注册表引用QA用户表和学校报名表是指Live School表。所以这是由于bug造成的问题,我们需要在创建用户和学校时同步数据库,我们需要将相关的学校添加到QA数据库,学校表和相关用户到实时服务器用户表。

我希望我能清楚地解释这个问题,所以我试图在交易发生时找到一种方法在两个数据库中同步这两个表。

在我们的下一个Android应用程序中,这将被修复。在此之前,拥有当前有缺陷的应用程序并将在不更新的情况下使用的用户需要找到一种方法来修复。

更新: 请注意,QA和Live数据库位于同一台服务器上。

1 个答案:

答案 0 :(得分:1)

听起来你需要在你的实时数据库和你的QA实例之间进行某种MySQL复制。

您必须将prod DB配置为主设备,将QA设置为从设备。在您的prod my.cnf中,您将添加“server-id”:

[mysqld]
log-bin=mysql-bin
server-id=1

要使更改生效,您需要重新启动prod DB。然后,更新QA my.cnf:

[mysqld]
server-id=2

重新启动QA DB。接下来,在QA DB上创建用户以连接到主数据库并为其授予复制权限。

mysql> CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com';

接下来,您需要从命令行连接到prod DB并运行一些查询。这些将允许您通过获取master数据库的状态来启动复制过程,以便slave具有开始其复制的坐标。

mysql> FLUSH TABLES WITH READ LOCK;

保持会话打开,然后创建一个新会话并运行SHOW MASTER STATUS:

mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73       | test         | manual,mysql     |
+------------------+----------+--------------+------------------+

记下文件和位置。接下来,释放主锁上的锁。

mysql> UNLOCK TABLES;

然后,在slave db上,开始复制:

mysql> CHANGE MASTER TO
    ->     MASTER_HOST='master_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='recorded_log_file_name',
    ->     MASTER_LOG_POS=recorded_log_position;

在完成所有这些操作之前,请确保备份两个数据库上的所有数据,并在必要时将MySQL转储从Prod DB导入QA DB。