Целый день был "рабом" в этом вопросе.
У меня есть настройка «главный / подчиненный», которая работает, но когда я пытаюсь выполнить репликацию на другое имя базы данных на подчиненном устройстве, это не удается. Вот как выглядит my.cnf:
server-id=101
report-host=Slave01
replicate_do_db='DB1'
replicate-rewrite-db=DB1->DB2
replicate-ignore-table=DB2.SOME_TABLE_NAME
Если я уберу строку replicate-rewrite-db, она будет работать отлично и реплицирует базу данных DB1 с ведущего на ведомое устройство. Положение главного журнала, которое я использую на ведомом устройстве, находится после вызова CREATE DATABASE DB1 на ведущем устройстве. После этой позиции журнала создаются таблицы и импортируются данные на главном сервере. Я не настраиваю и не запускаю подчиненное устройство до тех пор, пока не создам базу данных DB2.
Любые идеи?
Обновление: видел это в журнале ошибок mysql:
120531 15:48:19 [Note] Slave I/O thread: connected to master 'slave_user@master_server:3306', replication started in log 'mysql-bin.000001' at position 107
120531 15:48:20 [ERROR] Slave: Error 'Unknown database 'DB1'' on query. Default database: 'DB1'. Query: 'CREATE TABLE `ANOTHER_TABLE` (
Я получил подсказку в комментарии, но с тех пор пользователь удалил ее.
Уловка состоит в том, чтобы не использовать replicate-do-db, а использовать только replicate-rewrite-db:
#replicate_do_db='DB1'
replicate-rewrite-db=DB1->DB2
Комментирование строки replicate_do_db в my.cnf исправило это для меня.
Спасибо таинственному пользователю, который указал мне правильное направление, кем бы вы ни были.
Важное примечание: необходимо добавить имя переписанной базы данных. Добавьте эту строку в свой my.cnf:
replicate-do-db=DB2
Итак, ваш конфигурационный файл должен наконец быть таким:
server-id=101
report-host=Slave01
replicate_do_db = DB2
replicate-rewrite-db = DB1->DB2
replicate-ignore-table=DB2.SOME_TABLE_NAME
Я протестировал и он работает