2014-11-12 4 views
0

Я пытаюсь настроить репликацию master-slave между 2 серверами mysql на CentOS. После установки, если я создаю базу данных под названием «fakeDB» на главном, она создает ее на подчиненном устройстве. Потрясающие! Но если бы я затем попытаться создать таблицу на мастер я получаю эту ошибку на подчиненном:Ошибка MySQL-Slave «Неизвестная база данных»

Last_Errno: 1049 
Last_Error: Error 'Unknown database 'fakeDB'' on query. Default database: 'fakeDB'. Query: 'create table tmp (name varchar(100))' 

Но база данных существует на подчиненном! Поэтому я начал и создал базу данных и таблицу tmp на обоих серверах. Я сбросил все, а затем попытался вставить строку в мастер. Затем я получил эту ошибку на ведомом устройстве:

Last_SQL_Errno: 1146 
Last_SQL_Error: Error 'Table 'fakeDB.tmp' doesn't exist' on query. Default database: 'fakeDB'. Query: 'insert into tmp values ('asdf')' 

Но опять-таки эта база данных существует, а также таблица на обоих серверах. Я могу получить к ним доступ вручную. Вот переменные, которые я установил в файле my.cnf на обоих серверах.

server-id = 1 #set as 2 for master 
log_bin = /var/lib/mysql/mysql-bin.log 
relay-log = /var/lib/mysql/mysql-relay-bin.log 
binlog_do_db = fakeDB 

Что я делаю неправильно?

+0

Как вы подтвердили наличие базы данных на ведомом устройстве? Вы запустили запрос вручную (с отключением репликации) на каждом сервере и выяснили, удалось ли он? Это было бы моим первым шагом, чтобы убедиться, что подчиненный работает правильно. – Devon

+0

есть. Я выполнил вход в mysql из командной строки на подчиненном устройстве и выпустил «use fakeDB». он сказал, что базы данных не существует. Затем я создал его на хозяине, затем снова попробовал команду на рабе, и он сказал, что он там. Но после этого я не мог заставить ничего работать. Создание таблицы или вставка строки говорит, что база данных не существует, хотя она показывает, что она есть. –

ответ

3

Ok. Я понял. Оказывается, это было что-то глупое. У меня был этот вариант установлен в моем файле конфигурации на подчиненном:

lower_case_table_names=1 

Так что, когда я создал базу данных на мастер, как fakeDB она создала его на подчиненном, как fakedb. Таким образом, на подчиненном устройстве я могу выдать use fakeDB;, и он работает, потому что команда нечувствительна к регистру, но тогда запросы, выданные мастером, были не такими insert into fakeDB.tmp, потому что имя базы данных fakedb.

+0

Полезно знать. Благодарим за то, что вы его обновили. – Devon

Смежные вопросы