mySQL:如果未明确设置server_id,则在第1行中获取错误`错误1200(hy000):服务器未配置为从属;````````
-
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值,请确保新主人有 启用了二进制记录.
不隶属于 dba.stackexchange