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
权限,避免过度授权;