主库是唯一可写节点,从库仅通过IO_THREAD和SQL_THREAD重放binlog同步数据;server-id必须全局唯一且log-bin为强制配置;MySQL角色与主从无关;从库read_only可被超级用户绕过,需定期校验。
主库和从库在数据流向和权限设计上根本不同
主库是唯一允许写入的节点,所有 INSERT、UPDATE、DELETE 操作必须发生在主库;从库默认拒绝写入(即使手动执行也会报错或被复制冲突中断),它只通过 IO_THREAD 和 SQL_THREAD 重放主库的 binlog 来保持数据一致。这不是配置限制,而是复制机制的底层约定——一旦从库被写入,就可能破坏与主库的二进制日志序列对应关系,导致同步断裂。
server-id 和 binlog 是区分主从的硬性前提
MySQL 不靠角色名或标签识别主从,而靠两个强制配置项:
-
server-id必须全局唯一,主库和每个从库都不能相同(例如主库设为137,从库设为138) - 主库必须启用
log-bin(如log-bin = binlog),从库可不开启,但若要升级为主库或参与级联复制,也得开 - 从库还需显式配置
relay-log(如relay-log = relay-bin),否则中继日志无法落盘,SQL_THREAD就没东西可执行
漏配任一参数,START SLAVE 会静默失败或报错 ERROR 2003 (HY000) / ERROR 1236,而不是提示你缺了哪项。
MySQL 角色(ROLE)和主从无关,别混淆概念
MySQL 的 ROLE 是 8.0+ 引入的权限管理抽象层,和主从复制完全解耦。它不决定服务器是主还是从,也不影响复制行为: