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

MySQL Database synch up with two database

由于 android 应用程序的问题,我们遇到了一个问题,即移动应用程序的某些部分会上线,某些部分会进行质量检查。因此,作为暂时的解决方法,我们将 QA 和 Live 设为相同的 DB 副本。所以在两个数据库中都说我们有 USER & SCHOOL table 例如,android 申请注册表指向 QA 用户 table,学校报名表指向 Live School table。所以这是错误引起的问题,我们需要在创建用户和学校时同步数据库,我们需要将相关学校添加到 QA 数据库,学校 table 和相关用户到实时服务器用户 table.

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

在我们的下一个 android 应用程序中,这将得到修复。到那时,拥有当前错误应用程序并且将在不更新的情况下使用的用户,我们需要找到一种修复方法。

更新: 请注意 QA 和 Live Database 在同一台服务器上。

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

您必须将您的产品数据库配置为主数据库,将 QA 配置为从数据库。在您的产品 my.cnf 中,您将添加一个 "server-id":

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

要使更改生效,您需要重新启动产品数据库。然后,更新 QA my.cnf:

[mysqld]
server-id=2

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

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

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

mysql> FLUSH TABLES WITH READ LOCK;

保持会话打开,然后创建一个新会话并运行显示主状态:

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

写下文件和位置。接下来,释放master的锁。

mysql> UNLOCK TABLES;

然后,在从数据库上,开始复制:

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 数据库转储导入 QA 数据库。