主从报错1593
搭建mysql主从,
start slave ;后查看show slave status \G 发现报错
Last_IO_Errno: 1593
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work
(or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
分析报错
这个报错的意思是server_id相同,无法构建主从
查看主从两个库的server_id发现都是4294967295
(root@localhost) [(none)] SHOW VARIABLES LIKE 'server_id';
+---------------+------------+
| Variable_name | Value |
+---------------+------------+
| server_id | 4294967295 |
+---------------+------------+
1 row in set (0.00 sec)
查看两个库的配置文件
主库 server_id=80082088203306
从库 server_id=80082088203307
发现配置文件的参数设置并没有生效
翻看日志记录发现初始化实例的时候有一个告警
[Warning] option 'server_id': unsigned value 80082088203307 adjusted to 4294967295
这个警告信息表示,MySQL配置文件中的server_id选项的值超出了无符号整数的范围,因此被调整为4294967295。为了解决这个问题,你需要在配置文件中设置一个有效的server_id值,并重新启动MySQL服务。
注:在MySQL中,整数类型用于存储整数值,其中INT类型是有符号的,其范围是从-2147483648到2147483647。然而,当整数类型被定义为无符号(使用UNSIGNED属性)时,它的范围会加倍,因为无符号整数不能表示负数,所以其最小值是0,最大值则是4294967295。
如何解决
将从库配置文件server_id修改后,重启数据库。
通过change master 和start slave 搭建主从,解决报错
补充知识点
server_id
和server_uuid
有什么区别
server_id
和server_uuid
都是MySQL中用于标识服务器实例的独特属性,但它们在作用域、用途和格式上存在区别。具体分析如下:
- 作用域:
server_id
是在MySQL配置中设置的全局变量,它在同一主从复制拓扑中必须是唯一的。而server_uuid
是自动生成的,每个MySQL实例都有一个独特的server_uuid
,通常作为日志事件的标识符。 - 用途:
server_id
主要用于控制数据复制过程中的一致性和避免冲突,确保每个从服务器能够正确识别和应用主服务器上的二进制日志事件。server_uuid
则用作日志文件中事件的唯一标识,帮助跟踪和管理事务日志。 - 格式:
server_id
是一个整数,可以在MySQL配置文件中指定或通过命令行参数设置。server_uuid
是一个UUID(通用唯一识别码),由MySQL自动生成,通常是一串32位的十六进制数字。
总结来说,server_id
和server_uuid
虽然都用于标识MySQL服务器实例,但它们的使用场景和格式有所不同。server_id
是为了区分不同的服务器实例以维护复制的一致性,而server_uuid
则提供了一种机制来唯一标识每个服务器产生的日志事件。