mysql:server_idが明示的に設定されていない場合、1行目でエラー `エラー1200(HY000)を取得します:サーバーはスレーブとして構成されていません;`
-
16-10-2019 - |
質問
私たちのMySQLバージョンは、「5.2を使用したPortbld-FreeBSD7.2(AMD64)用」の「MySQL Ver 14.14 Distrib 5.1.35」です。
単純なマスター/スレーブ関係の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
my.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
修正は、バロン・シュワルツによって示唆されているように、my.cnfでサーバーidを明示的に設定することです http://www.xaprb.com/blog/2007/08/01/why-mysql-server-not-configured-as-slave/
Server-ID = 1
解決
2つのサーバーには、同じserver_idを持つことはできません。また、 マスターから-Server-IDを省略した場合、デフォルトIDは0です。この場合、マスターはすべての奴隷からのつながりを拒否し、奴隷はマスターに接続することを拒否します.
詳細については、 セクション15.1.1.2、「複製奴隷構成の設定」を参照してください.
両方のサーバーが異なるserver_id値を持っている場合でも、新しいマスターが持っていることを確認してください バイナリロギングが有効になっています.