MySQL:если server_id не задан явно, то получите ошибку `ERROR 1200 (HY000) в строке 1:Сервер не настроен как подчиненный;`

dba.stackexchange https://dba.stackexchange.com/questions/4400

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top