Ubuntu MariaDB主从复制配置教程
导读:Ubuntu MariaDB 主从复制配置教程 一 环境准备与网络要求 准备两台 Ubuntu 服务器(建议 22.04 LTS),分别作为 Master 与 Slave,安装 MariaDB(版本尽量一致,例如都为 10.6.x 或 1...
Ubuntu MariaDB 主从复制配置教程
一 环境准备与网络要求
- 准备两台 Ubuntu 服务器(建议 22.04 LTS),分别作为 Master 与 Slave,安装 MariaDB(版本尽量一致,例如都为 10.6.x 或 10.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
- 在 [mysqld] 段添加或修改:
- 创建复制专用账号并授权
- 登录 MariaDB:
mysql -u root -p - 执行:
CREATE USER 'replicator'@'%' IDENTIFIED BY 'YourStrongPass!'; GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%'; FLUSH PRIVILEGES;
- 登录 MariaDB:
- 获取二进制日志位点(用于从库接入)
- 在锁定业务写的前提下获取位点(维护窗口执行):
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; - 记录输出中的 File 与 Position(如: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
- 在 [mysqld] 段添加或修改:
- 配置复制链路并启动
- 登录 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;
- 登录 MariaDB:
- 检查复制状态
- 执行:
SHOW SLAVE STATUS\G - 关键字段需满足:Slave_IO_Running: Yes、Slave_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;
- 在 Master 创建库表或插入数据,在 Slave 上确认是否一致出现,例如:
- 常见问题排查
- 无法连接主库:检查 bind-address、系统防火墙与云安全组是否放行 3306,以及复制账号主机白名单是否正确。
- Slave_IO_Running=No:核对 MASTER_HOST/USER/PASSWORD、网络连通性、以及 MASTER_LOG_FILE/POS 是否与 Master 当前位点一致(必要时在 Master 重新执行
SHOW MASTER STATUS后STOP 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 防止误写。
- 高可用扩展:基于主从可进一步构建 MHA、Orchestrator、或结合 Keepalived/VRRP 实现故障切换与虚拟 IP 漂移,提升业务连续性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu MariaDB主从复制配置教程
本文地址: https://pptw.com/jishu/777927.html
