У меня уже настроена репликация, скажем, dbname
. Я хочу добавить новую реплицированную таблицу. Я создал таблицы как на главном, так и на подчиненном устройстве. Я вошел replicate-do-table=dbname.tablename
к my.cnf
на раб.
Перезагрузить my.cnf
необходимо перезапустить сервер, и, поскольку поступает много запросов, я не хочу терять ни одного из них.
Есть ли способ добавить новую таблицу для репликации на лету?
Нет, вы не можете добавлять таблицы в репликацию на лету.
Вы можете прочитать это в документах:
Другие, такие как параметры --replicate- *, могут быть установлены только при запуске подчиненного сервера.
Я хотел бы отличаться от aslisabanci - вы можете изменять фильтры репликации на лету, используя инструкцию CHANGE REPLICATION FILTER. как описано в официальных документах, просто убедитесь, что остановили ведомое устройство перед изменением правила, а затем перезапустите его. Даже если вы этого не сделаете, MySQL предупредит вас о необходимости сначала остановить ведомое устройство.
Я буквально просто выполнил следующие команды, и все заработало:
STOP SLAVE;
CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = ('mana_user.privilege,mana_user.calendar');
START SLAVE;
Обратите внимание, что если вы добавляете одну таблицу в свой список таблиц, вы должны указать все таблицы в операторе, который вы хотите реплицировать, а не только одну таблицу, которую вы хотите добавить в список.
Я не уверен, что за утверждение "Другие, например --replicate- параметры, могут быть установлены только при запуске подчиненного сервера. "* относится к, возможно, они означали, что команды не могут быть запущены во время репликации? Это правда, механизм репликации должен быть остановлен на несколько секунд, пока вы выполнить команду, но после перезапуска она продолжится с того места, на котором остановилась. Фактический сервер MySQL не нужно останавливать.
Подсказка: упростите себе задачу и добавьте таблицу в фильтры репликации перед фактическим созданием таблицы на главном сервере, таким образом, команда для создания таблицы будет реплицирована, избавляя вас от необходимости вручную создавать ее на подчиненном сервере.