База данных MySQL синхронизируется с двумя базами данных

У нас проблема из-за проблемы с приложением для Android, которое является частью мобильного приложения, а часть — QA. так что в качестве временного решения мы сделали QA и Live одинаковыми копиями DB. так в обеих базах говорят, что у нас есть USER & Таблица SCHOOL, например, и формы регистрации приложений Android ссылаются на таблицу пользователей QA, а форма входа в школу ссылается на таблицу Live School. так что это проблема из-за ошибки, и нам нужно синхронизировать обе базы данных при создании пользователя и школы, нам нужно добавить связанную школу в базу данных QA, таблицу школ и связанного пользователя в таблицу пользователей живого сервера.

Я надеюсь, что я объяснил проблему ясно, поэтому я пытаюсь найти способ синхронизировать эти две таблицы в обеих базах данных, когда происходит транзакция.

В нашем следующем приложении для Android это будет исправлено. до тех пор, пока пользователю, имеющему текущее приложение с ошибками и использующему без обновления, нам нужно найти способ исправить.

ОБНОВИТЬ:
Обратите внимание, что QA и Live Database находятся на одном сервере.

0

Решение

Похоже, вам нужна какая-то репликация MySQL между вашей действующей БД и вашим экземпляром QA.

Вы должны будете сконфигурировать свою рабочую базу данных как ведущую, а QA — как ведомую. В вашем prod my.cnf вы добавите «идентификатор сервера»:

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

Чтобы изменения вступили в силу, вам необходимо перезапустить prod DB. Затем обновите QA my.cnf:

[mysqld]
server-id=2

Перезапустите БД QA. Затем создайте пользователя в базе данных QA для подключения к главной базе данных и предоставьте ему привилегию репликации.

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

Далее вам нужно подключиться к prod DB из командной строки и выполнить несколько запросов. Это позволит вам запустить процесс репликации, получив статус основной базы данных, чтобы у ведомого устройства были координаты, чтобы начать свою репликацию.

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;

Затем на ведомой базе данных начните репликацию:

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.

1

Другие решения

Других решений пока нет …