MySQL 主从复制:配置、监控与故障切换
一、引言
MySQL 主从复制是一种常用的数据库架构,它将主数据库的数据变更同步到一个或多个从数据库,在读写分离、数据备份、高可用等方面有着广泛应用。本文将详细介绍 MySQL 主从复制的主从配置、复制延迟监控以及故障切换。
二、主从配置
(一)主库配置
- 编辑 MySQL 配置文件(通常为
my.cnf
或my.ini
),设置唯一的服务器 ID(server - id),如server - id = 1
。 - 启用二进制日志功能,设置
log - bin = /path/to/mysql - bin.log
,指定二进制日志文件的存储路径。 - 重启 MySQL 服务使配置生效。
- 创建用于主从复制的账号,例如:
CREATE USER'repl_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO'repl_user'@'%'; FLUSH PRIVILEGES;
- 执行
SHOW MASTER STATUS;
命令,记录下File
和Position
的值,后续从库配置会用到。
(二)从库配置
- 同样编辑 MySQL 配置文件,设置唯一的服务器 ID,如
server - id = 2
。 - 重启 MySQL 服务。
- 配置从库连接主库信息:
CHANGE MASTER TO MASTER_HOST='master_host_ip', MASTER_USER='repl_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='master_log_file_name', MASTER_LOG_POS=master_log_position;
其中,
master_host_ip
是主库的 IP 地址,master_log_file_name
和master_log_position
分别是在主库上获取的File
和Position
的值。 - 启动从库复制线程:
START SLAVE;
- 使用
SHOW SLAVE STATUS\G;
命令检查从库状态,确保Slave_IO_Running
和Slave_SQL_Running
都为Yes
,并且Seconds_Behind_Master
显示正常的延迟情况。
三、复制延迟监控
(一)使用 SHOW SLAVE STATUS
从库执行 SHOW SLAVE STATUS\G;
命令,其中 Seconds_Behind_Master
字段表示从库相对于主库的延迟时间(以秒为单位)。虽然它不是完全精确的,但能大致反映延迟情况。
(二)自定义脚本监控
可以编写脚本定期查询从库状态,获取 Seconds_Behind_Master
的值,并设置阈值。当延迟超过阈值时,发送警报通知运维人员。例如,使用 Python 结合 mysql - connector - python
库实现:
import mysql.connector
def check_slave_latency():
cnx = mysql.connector.connect(user='user', password='password',
host='slave_host', database='')
cursor = cnx.cursor()
cursor.execute("SHOW SLAVE STATUS\G")
result = cursor.fetchall()
for row in result:
if 'Seconds_Behind_Master' in row[0]:
latency = row[1]
if latency > 10: # 假设阈值为 10 秒
print("Slave replication latency is high!")
cursor.close()
cnx.close()
if __name__ == "__main__":
check_slave_latency()
四、故障切换
(一)手动故障切换
当主库出现故障时,可以手动将从库提升为主库。步骤如下:
- 在从库上停止复制线程:
STOP SLAVE;
- 重置从库配置,使其成为主库:
RESET MASTER;
- 更新应用程序的数据库连接配置,指向新的主库。
(二)自动故障切换
可以使用工具如 MHA(Master High Availability)来实现自动故障切换。MHA 会监控主库状态,当主库故障时,自动将一个从库提升为主库,并通知应用程序更新连接信息。
MySQL 主从复制的合理配置、有效监控和及时故障切换,能够为数据库系统提供可靠的高可用性和性能优化。
本文链接:https://blog.runxinyun.com/post/517.html 转载需授权!
留言0