You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB执行带FOR CHANNEL的CHANGE MASTER报1064语法错误

问题根因

报错的核心原因是语法不兼容:FOR CHANNEL是MySQL多源复制的专属语法,MariaDB直到10.7.0版本才新增对该语法的兼容支持,你当前使用的从库版本为10.4.25,属于不支持该语法的版本范围,因此执行时直接抛出1064语法错误。
MariaDB从10.0版本就已支持多主一从(多源复制)架构,但采用原生独立语法实现,和MySQL的channel语法逻辑类似但写法不同,需要用自定义连接名区分不同主库的复制链路。

正确配置步骤
  • 第一步:调整从库基础配置
    编辑从库的MariaDB配置文件(Linux环境通常为/etc/my.cnf.d/server.cnf或/etc/my.cnf,Windows环境为安装目录下的my.ini),在[mysqld]段配置复制基础参数,注意不要提前配置默认主库关联参数,避免和多源链路冲突:
[mysqld]
server-id = 3  # 该ID必须和两台主库的server-id全局唯一,不能重复
relay-log = relay-bin
log-slave-updates = 1  # 若需要后续做级联复制则开启,不需要可关闭
read_only = 1  # 普通账号只读限制,可选配置

修改完成后重启MariaDB服务让配置生效。

  • 第二步:在两台主库上提前创建复制授权账号
    分别登录两台MariaDB主库,执行授权语句给从库开放复制权限,注意将从库IP替换为从库的实际地址:
GRANT REPLICATION SLAVE ON *.* TO 'replica1'@'从库IP' IDENTIFIED BY 'pass@123';
FLUSH PRIVILEGES;

同时分别在两台主库上执行SHOW MASTER STATUS;,记录下当前的binlog文件名和位点值,作为CHANGE MASTER的输入参数。

  • 第三步:在从库上配置第一条主库复制链路
    MariaDB原生多源语法直接将自定义连接名放在CHANGE MASTER关键字后,不需要加FOR CHANNEL子句,以你要配置的192.168.56.116主库为例,连接名自定义为master1_test116:
CHANGE MASTER 'master1_test116' TO 
MASTER_HOST='192.168.56.116', 
MASTER_PORT=3306, 
MASTER_USER='replica1', 
MASTER_PASSWORD='pass@123', 
MASTER_LOG_FILE='mysql-bin.000002', 
MASTER_LOG_POS=327;
  • 第四步:在从库上配置第二条主库复制链路
    用同样的语法配置第二台主库,自定义新的连接名(比如master2_test117),替换为第二台主库的实际IP、端口、binlog文件名和位点参数即可:
CHANGE MASTER 'master2_test117' TO 
MASTER_HOST='192.168.56.117', 
MASTER_PORT=3306, 
MASTER_USER='replica1', 
MASTER_PASSWORD='pass@123', 
MASTER_LOG_FILE='mysql-bin.000003', 
MASTER_LOG_POS=456;
  • 第五步:启动复制链路并校验状态
    分别指定连接名启动两条复制链路:
START SLAVE 'master1_test116';
START SLAVE 'master2_test117';

启动后分别指定连接名查看复制状态,确认链路正常:

-- 查看第一台主库的复制状态
SHOW SLAVE 'master1_test116' STATUS\G
-- 查看第二台主库的复制状态
SHOW SLAVE 'master2_test117' STATUS\G

当两个链路的查询结果中Slave_IO_Running和Slave_SQL_Running均显示为Yes时,说明多源复制配置正常运行。

注意事项
  • 所有节点(2台主库+1台从库)的server-id必须全局唯一,重复ID会导致复制IO线程中断。
  • 后续对单条复制链路做启动、停止、重置、状态查询操作时,都必须带上对应的自定义连接名,直接执行无连接名的START SLAVE/STOP SLAVE/SHOW SLAVE STATUS只会操作默认复制链路,不会影响你配置的多源链路。
  • 若后续升级从库到10.7及以上版本,才可以使用MySQL风格的FOR CHANNEL语法,低版本不要混用两类语法。

内容的提问来源于stack exchange,提问作者Manish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:15:34