Назад | Перейти на главную страницу

Репликация MariaDB и перекрестные запросы к базе данных

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

Но в описании replicate_do_db сказано, что обновления не будут работать с запросами между базами данных. И вот проблема: у меня много PHP-приложений (некоторые из них действительно старые), поэтому у меня нет гарантии, что они не используют такого рода запросы. И я не хочу, чтобы базы данных были рассинхронизированы ...

Есть ли альтернатива? Или просто использовать репликацию только для известных приложений, а mydumper / mysqldump для других?

Я знаю, что Percona XtraBackup существует, но я хочу иметь резервные копии в формате .sql.

replicate_do_db сообщает системе, для каких баз данных следует реплицировать SQL-запросы (я предполагаю репликацию SQL, а не репликацию строк).

Это работает так, если предположить replicate_do_db = DB_1

mysql> use DB_1;
mysql> insert into Table_1 values (1,2,3);

Теперь этот оператор вставки будет реплицирован на подчиненные хосты.

mysql> use DB_2;
mysql> insert into DB_1.Table_1 values (2,3,4);

Этот оператор вставки будет не быть реплицированным, поскольку вы работаете в DB_2, который не реплицируется, даже если вы случайно указали DB_1 в запросе.

mysql> user DB_1;
mysql> insert into DB_2.Table_2 values (9,8,7);

Этот оператор вставки воля будут реплицированы, поэтому, если на подчиненных хостах нет DB_2.Table_2, репликация прервется.

В этом суть проблемы запросов между базами данных. Обратите внимание, что операторы select в разных базах данных не представляют проблемы, поскольку реплицируются только операторы изменения данных, а не операторы запроса данных.

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

Просто убедитесь, что у вас есть какой-то мониторинг статуса репликации, чтобы в случае сбоя репликации вы знали о проблеме как можно скорее и могли исправить ее до того, как реплицируемые данные станут слишком старыми. Подсказка: show slave status; на подчиненных хостах и ​​убедитесь, что "Slave_IO_Running" и "Slave_SQL_Running" оба имеют значение "Yes".

Я также использую mk-table-checksum каждую ночь сравнивать ведущее и ведомое устройства, чтобы убедиться, что таблицы базы данных идентичны.