mySQL:如果未明确设置server_id,则在第1行中获取错误`错误1200(hy000):服务器未配置为从属;````````

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(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

当我不明确设置我的cnf值时,为什么会出现此错误?当我重新启动时,为什么复制能够起作用,而当我“停止奴隶”时却不起作用; “开始奴隶;”?

  • 看来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 
    

修复程序是按照Baron Schwartz建议在my.cnf中明确设置server-id http://www.xaprb.com/blog/2007/08/01/why-mysql-server-not-configured-asfigured-as-as-slave/

服务器-ID = 1

有帮助吗?

解决方案

不允许两个服务器具有相同的server_id。还, 如果您省略了Master的Server-ID,则默认ID为0,在这种情况下,主拒绝了所有从属的连接,而从属拒绝拒绝连接到Master.

了解更多信息, 请参阅第15.1.1.2节,“设置复制从配置”.

即使两个服务器都有不同的server_id值,请确保新主人有 启用了二进制记录.

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top