MariaDB的复制功能是其高可用性和扩展性的核心组件,主要通过异步复制(默认)实现主从数据同步,支持多种架构(如主从复制、主主复制)。以下从基础配置、关键参数、常见问题及优化方向展开说明。
MariaDB复制的核心逻辑是主服务器(Master)记录所有数据变更到二进制日志(Binary Log),从服务器(Slave)通过I/O线程读取主库的二进制日志并写入中继日志(Relay Log),再通过SQL线程执行中继日志中的事件,实现数据同步。
/etc/my.cnf或/etc/mysql/mariadb.conf.d/50-server.cnf),添加以下参数:[mysqld]
server-id = 1 # 唯一标识(主从服务器必须不同)
log_bin = /var/log/mysql/mysql-bin.log # 启用二进制日志
binlog_do_db = your_database # 指定需要复制的数据库(可选,避免复制无用数据)
sudo systemctl restart mariadb
CREATE USER 'replicator'@'%' IDENTIFIED BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK; # 锁定表,确保数据一致性
SHOW MASTER STATUS; # 记录File(如mysql-bin.000001)和Position(如123)值
UNLOCK TABLES; # 解锁表
[mysqld]
server-id = 2 # 唯一标识(不能与主库重复)
relay_log = /var/log/mysql/mysql-relay-bin.log # 启用中继日志
log_bin = /var/log/mysql/mysql-bin.log # 可选,从库也可记录二进制日志(用于级联复制)
read_only = 1 # 设置为只读(对SUPER用户无效,增强安全性)
sudo systemctl restart mariadb
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='replicator',
MASTER_PASSWORD='strong_password',
MASTER_LOG_FILE='mysql-bin.000001', # 主库记录的File值
MASTER_LOG_POS=123; # 主库记录的Position值
START SLAVE;
SHOW SLAVE STATUS\G
需确保Slave_IO_Running和Slave_SQL_Running均为Yes,否则需根据错误信息排查问题(如网络连接、权限不足、二进制日志丢失等)。最常见的复制模式,主库负责写操作,从库负责读操作,实现读写分离,提升系统吞吐量。适用于对数据一致性要求较高的场景(如电商订单系统)。
两个节点互为主从,均可处理读写请求。需解决自动增长ID冲突问题,通过以下参数配置:
# 节点1配置
auto_increment_offset = 1 # ID起始值(奇数)
auto_increment_increment = 2 # ID步长(2)
# 节点2配置
auto_increment_offset = 2 # ID起始值(偶数)
auto_increment_increment = 2 # ID步长(2)
注意:主主复制存在数据不一致风险(如并发写同一行数据),需通过应用层控制或分布式锁避免。
错误1236(Fatal error: Could not read from master log):从库无法找到主库的二进制日志文件或位置。常见原因包括主库清除了二进制日志、从库配置的MASTER_LOG_FILE/MASTER_LOG_POS过期。解决方法:
sync_binlog=ON(确保二进制日志同步到磁盘);binlog_expire_logs_seconds(控制二进制日志保留时间,避免过早清除);slave_connections_needed_for_purge参数(默认1)控制主库仅在所有从库连接时才清除二进制日志。复制延迟:从库执行速度慢于主库,导致数据不一致。解决方法:
SHOW SLAVE STATUS\G(重点关注Seconds_Behind_Master,值为0表示无延迟);PURGE BINARY LOGS TO 'mysql-bin.00000X'(清理指定文件之前的日志,释放磁盘空间);pt-table-checksum(Percona Toolkit工具)对比主从数据差异,确保一致性。REPLICATION SLAVE权限,避免过度授权;