最近、MySQL マスター/スレーブ レプリケーション アーキテクチャをデプロイしているときに、「Last_IO_Error: 致命的なエラー: マスターとスレーブの MySQL サーバー UUID が等しいため、スレーブ I/O スレッドが停止します。レプリケーションが機能するには、これらの UUID が異なる必要があります。」エラーが発生しました。メッセージ。つまり、同じ UUID がマスター/スレーブ アーキテクチャで使用されます。 server_id システム変数を確認してください。すでに異なる設定になっています。理由は何ですか?以下に詳細な説明を記載します。
1、错误消息 mysql> show slave staus; Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. 2、查看主从的server_id变量 master_mysql> show variables like 'server_id'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 33 | +---------------+-------+ slave_mysql> show variables like 'server_id'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 11 | +---------------+-------+ -- 从上面的情形可知,主从mysql已经使用了不同的server_id 3、解决故障 ###查看auto.cnf文件 [root@dbsrv1 ~] cat /data/mysqldata/auto.cnf ### 主上的uuid [auto] server-uuid=62ee10aa-b1f7-11e4-90ae-080027615026 [root@dbsrv2 ~]# more /data/mysqldata/auto.cnf ###从上的uuid,果然出现了重复,原因是克隆了虚拟机,只改server_id不行 [auto] server-uuid=62ee10aa-b1f7-11e4-90ae-080027615026 [root@dbsrv2 ~]# mv /data/mysqldata/auto.cnf /data/mysqldata/auto.cnf.bk ###重命名该文件 [root@dbsrv2 ~]# service mysql restart ###重启mysql Shutting down MySQL.[ OK ] Starting MySQL.[ OK ] [root@dbsrv2 ~]# more /data/mysqldata/auto.cnf ###重启后自动生成新的auto.cnf文件,即新的UUID [auto] server-uuid=6ac0fdae-b5d7-11e4-a9f3-0800278ce5c9 ###再次查看slave的状态已经正常 [root@dbsrv1 ~]# mysql -uroot -pxxx -e "show slave status\G"|grep Running Warning: Using a password on the command line interface can be insecure. Slave_IO_Running: Yes Slave_SQL_Running: Yes Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it ###主库端查看自身的uuid master_mysql> show variables like 'server_uuid'; +---------------+--------------------------------------+ | Variable_name | Value | +---------------+--------------------------------------+ | server_uuid | 62ee10aa-b1f7-11e4-90ae-080027615026 | +---------------+--------------------------------------+ 1 row in set (0.00 sec) ###主库端查看从库的uuid master_mysql> show slave hosts; +-----------+------+------+-----------+--------------------------------------+ | Server_id | Host | Port | Master_id | Slave_UUID | +-----------+------+------+-----------+--------------------------------------+ | 33 | | 3306 | 11 | 62ee10aa-b1f7-11e4-90ae-080027615030 | | 22 | | 3306 | 11 | 6ac0fdae-b5d7-11e4-a9f3-0800278ce5c9 | +-----------+------+------+-----------+--------------------------------------+ ### Author : Leshami ### Blog : http://www.php.cn/
4. Yansheng リファレンス
a、server_id の説明
各マスターとスレーブに一意の ID を与えるためにレプリケーションで使用されるサーバー ID。この変数は --server-id オプションによって設定されます。レプリケーションに参加するサーバーごとに、そのサーバーの ID として機能する
b 、server_uuid の説明
MySQL 5.6 以降、サーバーはユーザーが指定した --server-id に加えて真の UUID を生成します。これはグローバルな読み取り専用変数 server_uuid
(global Read) -only 変数) 起動時に、MySQL サーバーは次のように UUID を自動的に取得します:a) ファイル data_dir/auto.cnf (data_dir はサーバーのデータ ディレクトリ) に書き込まれた UUID の読み取りと使用を試みます。 ); 成功すると終了します。
auto.cnf ファイルの形式は、my.cnf または my.ini に使用されるものと似ています。 MySQL 5.6 では、auto.cnf には、単一の server_uuid [1992] 設定と
値を含む単一の [auto] セクションのみがあります。auto.cnf ファイルは自動的に生成されます。このファイルを書き込んだり変更したりしないでください
また、MySQL 5.6 以降、MySQL レプリケーションを使用する場合、マスターとスレーブは一方の UUID を認識し、他方の UUID を確認できます。 SHOW SLAVE HOSTS の出力。START SLAVE が実行されると (事前ではありません)、マスターの UUID の値は、SHOW SLAVE STATUS の出力でスレーブで利用可能になります。MySQL 5.6.5 では、その後、サーバーの server_uuid は、そのサーバー上で開始されるトランザクションの GTID にも使用されます
詳細については、セクション16.1.3「グローバル トランザクションによるレプリケーション