Debian MariaDB复制功能详解
Debian下MariaDB复制功能详解
一、MariaDB复制概述
MariaDB复制是MariaDB实现高可用性、负载均衡和数据冗余的核心功能,通过将主服务器(Master)的数据变更同步到从服务器(Slave),支持读写分离、异地灾备和备份等场景。其核心机制依赖二进制日志(Binary Log)记录主服务器的变更事件,从服务器通过IO线程获取日志并写入中继日志(Relay Log),再由SQL线程重放日志实现数据同步。
二、复制核心组件与工作流程
1. 核心组件
- 二进制日志(Binary Log):主服务器记录所有数据变更(如INSERT、UPDATE、DELETE)的日志文件,是复制的“数据源”。
- 中继日志(Relay Log):从服务器接收主服务器二进制日志内容并存储的临时日志,用于SQL线程重放。
- IO线程:从服务器上的线程,负责连接主服务器并请求二进制日志事件,写入中继日志。
- SQL线程:从服务器上的线程,读取中继日志中的事件并在本地数据库执行,实现数据同步。
2. 工作流程
- 主服务器记录变更:用户对主服务器执行写操作时,主服务器将变更事件写入二进制日志(需开启
log_bin参数)。 - 从服务器请求日志:从服务器的IO线程通过
MASTER_INFO文件(存储主服务器连接信息和日志位置)向主服务器请求二进制日志。 - 主服务器发送日志:主服务器的
BINLOG_DUMP线程将二进制日志中从库上次请求位置之后的事件发送给从库。 - 从服务器写入中继日志:从服务器IO线程将接收到的日志事件写入中继日志(需开启
relay_log参数)。 - 从服务器重放日志:从服务器SQL线程读取中继日志中的事件,在本地数据库执行,完成数据同步。
三、常见复制架构
1. 一主一从
最基础的复制架构,主服务器处理所有写操作,从服务器处理读操作,适用于读密集型应用(如电商商品详情页)。优点是配置简单,能有效减轻主服务器读压力。
2. 一主多从
主服务器处理写操作,多个从服务器处理读操作,进一步提升读性能。适用于高并发读场景(如社交平台动态流)。需注意:从服务器越多,主服务器的IO压力越大(需发送更多日志)。
3. 双主复制(互为主从)
两个服务器均为主服务器,相互复制数据,均可处理读写操作。优点是高可用性高(任一服务器故障,另一服务器可继续提供服务);缺点是数据冲突风险(如同一ID在不同服务器上插入数据),需通过auto_increment_increment(自增步长)和auto_increment_offset(自增偏移量)解决(如服务器1:auto_increment_increment=2, auto_increment_offset=1;服务器2:auto_increment_increment=2, auto_increment_offset=2)。
4. 多级复制
从服务器同时作为其他从服务器的主服务器(如A→B→C),适用于大规模分布式系统。优点是减少主服务器的复制压力;缺点是复制延迟累积(C服务器的数据同步会滞后于A服务器)。
四、配置步骤(以一主一从为例)
1. 主服务器配置
- 编辑配置文件(
/etc/mysql/mariadb.conf.d/50-server.cnf),添加以下参数:[mysqld] server_id = 1 # 主服务器唯一ID(1-2^32-1) log_bin = /var/log/mysql/mysql-bin.log # 开启二进制日志 binlog_format = ROW # 日志格式(ROW记录行变更,更安全) bind_address = 0.0.0.0 # 允许远程连接 - 重启MariaDB服务:
sudo systemctl restart mariadb - 创建复制用户并授权:
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES; - 获取主服务器状态(记录
File和Position,后续从服务器配置需用到):FLUSH TABLES WITH READ LOCK; # 锁定表,确保数据一致性 SHOW MASTER STATUS; UNLOCK TABLES; # 解锁表
2. 从服务器配置
- 编辑配置文件(
/etc/mysql/mariadb.conf.d/50-server.cnf),添加以下参数:[mysqld] server_id = 2 # 从服务器唯一ID(需与主服务器不同) relay_log = /var/log/mysql/mysql-relay-bin.log # 开启中继日志 read_only = ON # 设置为只读(防止误操作,SUPER用户除外) - 重启MariaDB服务:
sudo systemctl restart mariadb - 配置主服务器连接信息:
CHANGE MASTER TO MASTER_HOST = 'master_ip', # 主服务器IP MASTER_USER = 'repl_user', # 复制用户 MASTER_PASSWORD = 'your_password', # 复制用户密码 MASTER_LOG_FILE = 'mysql-bin.000001', # 主服务器记录的File值 MASTER_LOG_POS = 123; # 主服务器记录的Position值 - 启动复制进程:
START SLAVE; - 检查复制状态(确保
Slave_IO_Running和Slave_SQL_Running均为Yes):SHOW SLAVE STATUS\G;
五、注意事项与常见问题
1. 数据一致性保障
- 主从只读设置:从服务器设置
read_only=ON,避免误操作导致数据不一致(SUPER用户可绕过)。 - 事务安全参数:主服务器开启
sync_binlog=ON(确保二进制日志同步到磁盘)、innodb_flush_log_at_trx_commit=ON(确保InnoDB事务日志同步到磁盘);从服务器开启sync_relay_log=ON、sync_relay_log_info=ON(确保中继日志同步)。
2. 常见错误解决
- 错误1236(找不到二进制日志):主库日志被
PURGE BINARY LOGS命令删除或过期。解决方法:- MariaDB 11.4及以上版本:设置
slave_connections_needed_for_purge=3(需所有从库连接时才清除日志),确保从库有足够时间获取日志。 - 手动同步:若日志已删除,需重新配置复制(从主库导出数据并重新执行
CHANGE MASTER TO)。
- MariaDB 11.4及以上版本:设置
3. 日志管理
- 清理旧日志:主服务器定期执行
PURGE BINARY LOGS TO 'mysql-bin.0000XX'(保留最近XX个日志文件),避免日志文件占用过多磁盘空间。 - 监控日志状态:使用
SHOW BINARY LOGS;查看主服务器二进制日志列表,SHOW SLAVE STATUS\G;查看从服务器复制进度。
六、监控与维护
- 查看主服务器状态:
SHOW MASTER STATUS;(确认二进制日志文件和位置)。 - 查看从服务器状态:
SHOW SLAVE STATUS\G;(重点关注Slave_IO_Running、Slave_SQL_Running和Seconds_Behind_Master(延迟秒数,0表示同步))。 - 测试复制功能:在主服务器插入数据,检查从服务器是否同步(如
INSERT INTO test_table VALUES (1);)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian MariaDB复制功能详解
本文地址: https://pptw.com/jishu/747264.html
