REPLICATION CLIENT 不可省略,因其是 Flink CDC 启动时执行 SHOW MASTER STATUS、获取 binlog 文件名/position 及 GTID(如 Executed_Gtid_Set)的硬性前提,属全局权限,必须通过 GRANT REPLICATION CLIENT ON . 显式授予。

必须给 CDC 用户授 REPLICATION CLIENT 权限,否则 Flink CDC 或 Debezium 无法获取 binlog 位点或主库状态,直接启动失败。
为什么 REPLICATION CLIENT 不可省略?
这个权限不是“锦上添花”,而是 CDC 工具读取 SHOW MASTER STATUS 和执行 BINLOG DUMP 命令的硬性前提。即使只做增量同步(不拉全量快照),Flink CDC 启动时仍需先查主库当前 binlog 文件名和 position——没这个权限,Last_IO_Error 会报 Access denied; you need (at least one of) the REPLICATION CLIENT privilege(s)。
-
REPLICATION SLAVE负责「拉日志」,REPLICATION CLIENT负责「问位置」,二者缺一不可 - 开启 GTID 时更关键:GTID 模式下工具必须调用
SHOW MASTER STATUS获取Executed_Gtid_Set,否则无法定位起始位点 - 某些 MySQL 8.0+ 版本在 strict mode 下,连
SHOW BINARY LOGS都需要该权限
GRANT REPLICATION CLIENT 的正确写法
权限必须在主库执行,且不能只给库级或表级——它是个全局权限,ON *.* 是唯一合法作用域。
- 用户创建要用显式认证插件:
CREATE USER 'cdc_user'@'192.168.5.%' IDENTIFIED WITH mysql_native_password BY 'vR8$kN2@pQ9!'; - 授权语句必须带
ON *.*:GRANT REPLICATION CLIENT ON *.* TO 'cdc_user'@'192.168.5.%'; - 别漏掉
REPLICATION SLAVE:GRANT REPLICATION SLAVE ON *.* TO 'cdc_user'@'192.168.5.%'; - 如果还要读表结构或做初始快照,才额外加
SELECT和SHOW DATABASES;纯增量同步可不加 - 执行完不用强制
FLUSH PRIVILEGES,GRANT本身已刷新权限缓存
常见错误现象与排查点
授了权但还是连不上?重点检查这几点:
- 用户 host 匹配失败:比如从库 IP 是
192.168.5.30,但授权用了'cdc_user'@'%',而主库skip_name_resolve = ON且 DNS 不通,导致实际匹配到'cdc_user'@'192.168.5.30'这个未授权账号 - 密码插件不一致:MySQL 8.0 默认用
caching_sha2_password,但 Flink CDC 旧版驱动只认mysql_native_password,所以建用户时必须显式指定 - 权限被
DROP USER后残留:曾用DROP USER 'cdc_user'@'%'删除过用户,但没清空 mysql.user 表里同名不同 host 的记录,新CREATE USER实际没生效 -
SHOW REPLICA STATUS\G里IO_Running: No且Last_IO_Error提到REPLICATION CLIENT—— 直接说明主库缺这个权限,别绕弯子查网络或防火墙
真正容易被忽略的是:很多团队只记得开 REPLICATION SLAVE,却以为 REPLICATION CLIENT 是“管理用权限”,不给业务同步用户。结果每次重启 CDC 任务都卡在初始化阶段,日志里反复出现 Failed to get binlog position —— 其实就差一条 GRANT。


















