温馨提示×

Debian MariaDB复制功能怎么用

小樊
32
2025-12-09 04:07:06
栏目: 云计算

Debian 上 MariaDB 复制功能使用指南

一 环境准备与基础配置

  • 准备两台或以上服务器,安装 MariaDB(Debian 常见路径为:/etc/mysql/mariadb.conf.d/50-server.cnf 或 /etc/mysql/my.cnf)。确保网络与防火墙放行 3306 端口,时间同步(如 NTP)。为提升可靠性,建议主从版本尽量一致。主库需开启二进制日志,从库启用中继日志,并为每个实例设置唯一的 server-id

二 一主一从复制步骤

  • 主库配置

    • 编辑配置文件 [mysqld] 段,开启二进制日志并设定唯一 server-id
      • server-id=1
      • log-bin=mysql-bin
    • 如仅复制指定库,可加:binlog_do_db=your_db;不建议复制 mysql 系统库。保存后重启 MariaDB。
    • 创建复制专用账号并授权:
      • CREATE USER ‘repl’@‘从库IP或%’ IDENTIFIED BY ‘强密码’;
      • GRANT REPLICATION SLAVE ON . TO ‘repl’@‘从库IP或%’;
      • FLUSH PRIVILEGES;
    • 锁定全库快照并获取起点:
      • FLUSH TABLES WITH READ LOCK;
      • SHOW MASTER STATUS; 记录 File 与 Position;
      • UNLOCK TABLES;
    • 如已有存量数据,先导出并在从库导入(见第四部分)。
  • 从库配置

    • 编辑配置文件 [mysqld] 段,设定唯一 server-id 并启用中继日志:
      • server-id=2
      • relay-log=mysql-relay-bin
    • 重启 MariaDB,配置主库连接信息(使用上一步记录的 File/Position):
      • CHANGE MASTER TO
        • MASTER_HOST=‘主库IP’,
        • MASTER_USER=‘repl’,
        • MASTER_PASSWORD=‘强密码’,
        • MASTER_LOG_FILE=‘记录的File’,
        • MASTER_LOG_POS=记录的Position;
    • 启动复制并校验:
      • START SLAVE;
      • SHOW SLAVE STATUS\G
      • 确认 Slave_IO_Running=Yes、Slave_SQL_Running=Yes,Seconds_Behind_Master 接近 0

三 进阶用法

  • GTID 复制(推荐,便于故障切换与一致性)

    • 主从 my.cnf 启用:gtid_domain_id=唯一值;主库建议 sync_binlog=1
    • 从库执行(无需手动指定 File/Position):
      • CHANGE MASTER TO … , MASTER_USE_GTID=slave_pos;
      • START SLAVE;
    • 校验:Slave_IO_Running/Slave_SQL_Running 均为 Yes
  • 双主复制(互为主从,写双向)

    • 两台服务器均开启:log-bin、server-id 不同,并开启 log_slave_updates(让从库上的变更也写入其二进制日志,以便对方继续复制)。
    • 为避免自增冲突,设置:
      • auto_increment_increment=2
      • auto_increment_offset=1(服务器A)/ 2(服务器B)
    • 各自创建复制账号,互为主从指向对方;注意应用侧避免同一行在多主上并发写入导致冲突。
  • 多主一从(一个从库汇聚多个主库)

    • MariaDB 支持多通道复制,使用命名通道配置多个主库:
      • CHANGE MASTER ‘chan1’ TO … ;
      • CHANGE MASTER ‘chan2’ TO … ;
      • START SLAVE ‘chan1’; START SLAVE ‘chan2’;
    • 复制信息会分别保存在 master-chan1.info、relay-log-chan1.info 等文件中。

四 常见检查与故障排查

  • 状态与延迟
    • SHOW SLAVE STATUS\G 关注:Slave_IO_Running、Slave_SQL_Running、Last_Error、Seconds_Behind_Master(0 表示无延迟)。
  • 常见原因
    • server-id 冲突、复制账号权限或来源 IP 限制不当、主从数据不一致、未正确记录或填写 File/Position(非 GTID 场景)、网络/防火墙阻断 3306、主库 binlog 被清理导致位点失效。
  • 存量数据初始化
    • 主库导出:mysqldump -uroot -p --opt --single-transaction --master-data=2 --databases 需要的库 > dump.sql
    • 从库导入:mysql -uroot -p < dump.sql
    • 非 GTID:导入后直接用 SHOW MASTER STATUS 的位点配置从库;GTID:导入后直接用 MASTER_USE_GTID=slave_pos。

0