최근 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. 확장 참조
a. server_id 설명
복제에 사용되는 각 서버 ID입니다. 마스터와 슬레이브는 고유한 ID입니다.
복제에 참여하는 각 서버에 대해
1~232–1( 2 범위의 양수를 선택해야 합니다. 32승 빼기 1) 해당 서버의 ID로 작동합니다.
b server_uuid 설명
MySQL 5.6부터 , 서버는 사용자가 제공한 --server-id
외에 실제 UUID를 생성합니다. 이는 전역 읽기 전용 변수인 server_uuid로 사용할 수 있습니다(전역 읽기 전용 변수)
MySQL 서버가 시작되면 다음과 같이 자동으로 UUID를 얻습니다.
a) data_dir/auto 파일에 기록된 UUID를 읽고 사용하려고 합니다. .cnf(여기서 data_dir은
서버의 데이터 디렉터리입니다.) 성공하면 종료됩니다.
b) 그렇지 않으면 새 UUID를 생성하고 이 파일에 저장하고 필요한 경우 파일을 만듭니다.
auto . cnf 파일의 형식은 my.cnf 또는 my.ini 파일에 사용되는 것과 유사합니다. MySQL 5.6에서
auto.cnf에는 단일 server_uuid [1992] 설정과
값을 포함하는 단일 [auto] 섹션만 있습니다. ;
중요
auto.cnf 파일은 자동으로 생성되지 않습니다.
또는 이 파일을 수정하세요
또한 MySQL 5.6부터는 MySQL 복제를 사용할 때 마스터와 슬레이브가 하나를 알고 있습니다
다른 UUID의 값은 SHOW SLAVE HOSTS의 출력에서 볼 수 있습니다.
START SLAVE가 실행되면(이전은 아님) 마스터의 UUID 값은
슬레이브에서 사용할 수 있습니다. SHOW SLAVE STATUS의 출력.
MySQL 5.6.5 이상에서는 서버의 server_uuid가 해당 서버에서 발생하는 트랜잭션의 GTID에도 사용됩니다.
자세한 내용은 다음을 참조하세요. Section 16.1.3, “Replication with Global Transaction
위 내용은 슬레이브가 동일한 MySQL 서버 UUID를 갖는 내용입니다. 자세한 내용은 PHP 중국어 웹사이트(www. .php.cn) !