温馨提示×

Ubuntu MariaDB主从复制配置教程

小樊
36
2025-12-22 13:21:33
栏目: 云计算

Ubuntu MariaDB 主从复制配置教程

一 环境准备与网络要求

  • 准备两台 Ubuntu 服务器(建议 22.04 LTS),分别作为 MasterSlave,安装 MariaDB(版本尽量一致,例如都为 10.6.x10.11.x)。
  • 确保网络互通,开放 TCP 3306 端口(系统防火墙如 ufw/firewalld 与云安全组均需放行)。
  • 建议 NTP 时间同步,避免复制延迟或 GTID 判断异常。
  • 如 Master 已有业务数据,需先完成一次一致性备份并在导入 Slave 后再开启复制。

二 主库 Master 配置

  • 安装与初始化
    • 安装:sudo apt update && sudo apt install mariadb-server
    • 安全加固:sudo mysql_secure_installation(设置 root 密码、移除匿名用户等)
  • 修改配置文件(常见路径:/etc/mysql/mariadb.conf.d/50-server.cnf/etc/mysql/my.cnf
    • [mysqld] 段添加或修改:
      server-id = 1
      log_bin = /var/log/mysql/mysql-bin.log
      # 可选:仅同步指定库
      # binlog_do_db = your_database_name
      bind-address = 0.0.0.0
      
    • 重启:sudo systemctl restart mariadb
  • 创建复制专用账号并授权
    • 登录 MariaDB:mysql -u root -p
    • 执行:
      CREATE USER 'replicator'@'%' IDENTIFIED BY 'YourStrongPass!';
      GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
      FLUSH PRIVILEGES;
      
  • 获取二进制日志位点(用于从库接入)
    • 在锁定业务写的前提下获取位点(维护窗口执行):
      FLUSH TABLES WITH READ LOCK;
      SHOW MASTER STATUS;
      
    • 记录输出中的 FilePosition(如:mysql-bin.000001、488),随后执行:
      UNLOCK TABLES;
      
    • 如需迁移存量数据,可在锁表期间使用 mysqldump 全量导出并在从库恢复,再继续后续复制配置。

三 从库 Slave 配置

  • 安装与初始化
    • 安装:sudo apt update && sudo apt install mariadb-server
    • 安全加固:sudo mysql_secure_installation
  • 修改配置文件(常见路径:/etc/mysql/mariadb.conf.d/50-server.cnf/etc/mysql/my.cnf
    • [mysqld] 段添加或修改:
      server-id = 2
      relay_log = /var/log/mysql/mysql-relay-bin.log
      # 可选:便于排查与级联复制
      log_bin = /var/log/mysql/mysql-bin.log
      # 可选:仅同步指定库
      # binlog_do_db = your_database_name
      read_only = 1
      bind-address = 0.0.0.0
      
    • 重启:sudo systemctl restart mariadb
  • 配置复制链路并启动
    • 登录 MariaDB:mysql -u root -p
    • 使用 Master 上记录的位点执行(请替换为实际值):
      CHANGE MASTER TO
        MASTER_HOST='master_ip',
        MASTER_USER='replicator',
        MASTER_PASSWORD='YourStrongPass!',
        MASTER_LOG_FILE='mysql-bin.000001',
        MASTER_LOG_POS=488;
      
      START SLAVE;
      
  • 检查复制状态
    • 执行:SHOW SLAVE STATUS\G
    • 关键字段需满足:Slave_IO_Running: YesSlave_SQL_Running: Yes,且 Seconds_Behind_Master 接近 0

四 验证与常见问题

  • 功能验证
    • 在 Master 创建库表或插入数据,在 Slave 上确认是否一致出现,例如:
      -- Master
      CREATE DATABASE IF NOT EXISTS test_repl;
      USE test_repl;
      CREATE TABLE t(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50));
      INSERT INTO t(name) VALUES ('alice'), ('bob');
      
      -- Slave
      SELECT * FROM test_repl.t;
      
  • 常见问题排查
    • 无法连接主库:检查 bind-address、系统防火墙与云安全组是否放行 3306,以及复制账号主机白名单是否正确。
    • Slave_IO_Running=No:核对 MASTER_HOST/USER/PASSWORD、网络连通性、以及 MASTER_LOG_FILE/POS 是否与 Master 当前位点一致(必要时在 Master 重新执行 SHOW MASTER STATUSSTOP SLAVE; CHANGE MASTER TO ...; START SLAVE;)。
    • 复制延迟或中断:关注 Seconds_Behind_Master、主库负载、从库 I/O 与 SQL 线程错误日志;必要时调整从库参数或优化长事务。

五 进阶与扩展

  • 仅同步指定库表:在主库使用 binlog_do_db,在从库使用 replicate_do_db/replicate_wild_do_table 精确控制;跨库操作较多时建议谨慎使用库级白名单。
  • 读写分离实践:应用层或中间件将 指向 Master, 分摊到多个 Slave;从库建议设置为 read_only=1 防止误写。
  • 高可用扩展:基于主从可进一步构建 MHAOrchestrator、或结合 Keepalived/VRRP 实现故障切换与虚拟 IP 漂移,提升业务连续性。

0