MySQL:если server_id не задан явно, то получите ошибку `ERROR 1200 (HY000) в строке 1:Сервер не настроен как подчиненный;`
-
16-10-2019 - |
Вопрос
Наша версия mysql — «mysql Ver 14.14 Distrib 5.1.35, для portbld-freebsd7.2 (amd64) с использованием 5.2»
У нас есть два сервера баз данных с репликацией в простых отношениях главный/подчиненный. mysql2
хозяин, mysql1
является рабом.Год назад, mysql
был хозяином и mysql2
был рабом.Нам пришлось поменять их роли во время аппаратного сбоя.
На мастере мы явно устанавливаем server_id (идентификатор сервера)
[root@mysql2 ~]# grep server-id my.cnf
server-id = 2
[root@mysql2 ~]# mysql -e "SHOW VARIABLES LIKE 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+
Но этот параметр не был установлен в my.cnf на подчиненном устройстве.
[root@mysql1 ~]# grep server-id my.cnf
Упс.Это не должно иметь значения, поскольку по умолчанию для server_id установлено значение 1.
[root@mysql1 ~]# mysql -e "SHOW VARIABLES LIKE 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
Если я перезапущу MySQL, репликация будет работать нормально.
Однако, если я вручную «СТОП ВЕДОМЫЙ» «ЗАПУСК ВЕДОМОГО», я получаю сообщение об ошибке:
[root@mysql1 ~]# mysql -e "STOP SLAVE;"
[root@mysql1 ~]# mysql -e "START SLAVE;"
ERROR 1200 (HY000) at line 1: The server is not configured as slave; fix in config file or with CHANGE MASTER TO
Почему я получаю эту ошибку, если я явно не задал значение в my.cnf?Почему репликация работает при перезапуске, но не при "ОСТАНОВКЕ SLAVE"? "НАЧАТЬ РАБА;"?
- Похоже, что MySQL присвоил переменной значение по умолчанию.
server_id
. Согласно файлу my.cnf по умолчанию,
server_id
по умолчанию будет1
# required unique id between 1 and 2^32 - 1 # defaults to 1 if master-host is not set # but will not function as a master if omitted #server-id = 1
Исправление состоит в том, чтобы явно указать идентификатор сервера в my.cnf, как предложил барон Шварц на странице http://www.xaprb.com/blog/2007/08/01/why-mysql-server-not-configured-as-slave/
идентификатор сервера=1
Решение
Два сервера не могут иметь одинаковый server_id.Также, Если вы опустите --server-id для ведущего устройства, идентификатор по умолчанию будет равен 0, и в этом случае ведущий отклоняет соединения со всеми ведомыми устройствами, а ведомое устройство отказывается подключаться к ведущему устройству..
Для дополнительной информации, см. раздел 15.1.1.2, «Настройка конфигурации ведомого устройства репликации»..
Даже если оба сервера имеют разные значения server_id, убедитесь, что новый мастер имеет двоичное ведение журнала включено.