web-dev-qa-db-ja.com

MySQL:server_idが明示的に設定されていない場合、エラー「ERROR 1200(HY000)at line 1:The server is not configured as slave;」が発生します。

私たちのmysqlバージョンは、「5.2を使用するportbld-freebsd7.2(AMD64)用のmysql Ver 14.14 Distrib 5.1.35」です。

単純なマスター/スレーブ関係で、レプリケーションを備えた2つのデータベースサーバーがあります。 mysql2はマスター、mysql1はスレーブです。 1年前、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を再起動すると、レプリケーションは正常に機能します。

ただし、手動で「STOP SLAVE」「START SLAVE」を実行すると、エラーが発生します。

[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 
    

修正は、バロンシュワルツが http://www.xaprb.com/blog/2007/08/01/why-mysql-server-not-スレーブとして設定済み/

server-id = 1

3

2つのサーバーが同じserver_idを持つことはできません。また、 マスターから--server-idを省略した場合、デフォルトIDは0です。この場合、マスターはすべてのスレーブからの接続を拒否し、スレーブはマスターへの接続を拒否します

詳細については、 セクション15.1.1.2「レプリケーションスレーブ構成の設定」 を参照してください。

両方のサーバーのserver_id値が異なる場合でも、新しいマスターで バイナリログが有効になっている ことを確認してください。

2
RolandoMySQLDBA