主从同步需严格验证server-id唯一、binlog启用且format为row、复制用户权限完整;任一缺失均导致slave_io_running或slave_sql_running为no,必须按序校准master_log_file/pos、网络连通性及relay-log配置。

主从同步不是“配完就自动跑起来”的事,server-id 冲突、log-bin 未启用、复制用户权限不全,三者任一出错都会导致 Slave_IO_Running: No 或 Slave_SQL_Running: No。必须逐项验证,不能跳步。
主库必须启用 binlog 并设对 format
没开二进制日志,从库根本没东西可拉——这是最常被忽略的起点。MariaDB 默认不启用 log-bin,光改 server-id 没用。
-
log-bin必须写在[mysqld]段下,值建议用简单前缀如mysql-bin,不要带路径(系统会自动写入 datadir) -
binlog-format强烈推荐ROW:它记录每行变更的完整镜像,避免UUID()、NOW()等非确定性函数在从库执行结果不一致 - 如果主库已运行很久且没开过 binlog,重启后首次
show master status返回空,说明日志文件没生成,需至少执行一条写操作(如CREATE TABLE t1(id INT))触发日志落盘
从库的 server-id 和 relay-log 要独立且可写
从库 server-id 不仅要和主库不同,还必须和集群内所有其他节点全局唯一。常见错误是两台从库都设成 2,导致中继日志位置混乱。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
relay-log文件名必须显式指定(如relay-bin),否则 MariaDB 可能用主机名+pid 命名,在容器或动态 IP 环境下易冲突 - 确保
datadir目录下有写权限:MariaDB 启动时会尝试创建relay-bin.000001,若失败,SHOW SLAVE STATUS\G中Relay_Log_File为空,IO thread直接拒绝启动 - 别漏掉
relay_log_recovery = 1:从库异常宕机后,该参数能自动丢弃损坏的中继日志并重拉,否则可能卡在旧 position 上反复报错
复制用户必须满足 host + 权限 + 密码三重匹配
授权语句里写的 'repl'@'192.168.1.%',从库连接时用的 IP 就得落在这个网段;密码大小写敏感;权限缺一不可。
- 执行
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%'后,必须跟FLUSH PRIVILEGES,否则权限不生效(尤其在跳过mysql_secure_installation的测试环境) - 检查主库是否监听正确地址:
netstat -tlnp | grep :3306,若只绑127.0.0.1,从库连不上,报错ERROR 2003 (HY000): Can't connect to MySQL server - 防火墙要放行 3306:CentOS 用
firewall-cmd --permanent --add-port=3306/tcp,Ubuntu 用ufw allow 3306
START SLAVE 前必须校准 CHANGE MASTER TO 的四个关键参数
从库执行 CHANGE MASTER TO 时,MASTER_LOG_FILE 和 MASTER_LOG_POS 必须严格对应主库 SHOW MASTER STATUS 当前输出,差一个字节都会导致 SQL 线程报错 Could not execute Write_rows event on table。
- 主库执行
SHOW MASTER STATUS后立即记下File(如mysql-bin.000003)和Position(如1234),中间不要做任何写操作 -
MASTER_HOST填从库能解析的地址(IP 最稳,DNS 易因 /etc/hosts 缺失失败);MASTER_USER/MASTER_PASSWORD必须和主库授权时完全一致 - 执行
START SLAVE后,立刻查SHOW SLAVE STATUS\G,重点盯Seconds_Behind_Master是否为0,以及两个Running字段是否都是Yes
真正难调试的点不在配置本身,而在于时间窗口:主库 SHOW MASTER STATUS 输出和从库 CHANGE MASTER TO 之间若有写入,position 就失效;从库重启后若没清空旧 relay log,relay_log_recovery 又关着,就会从错误位置重放。这些细节不写进日志,只在 SHOW SLAVE STATUS 的 Exec_Master_Log_Pos 和 Read_Master_Log_Pos 差值里暴露。










