mysql 主从复制 读写分离 MHA
在高可用性和高性能的数据库系统中,MySQL主从复制、读写分离和MHA(Master High Availability)是重要的技术手段。下面详细介绍它们的概念、配置方法和实践。
1. MySQL 主从复制
概念
MySQL主从复制是一种从主数据库(Master)到一个或多个从数据库(Slave)的数据复制机制。主库上的数据变更会异步地复制到从库,从而实现数据的冗余备份和读写分离。
配置方法
-
配置主库
- 编辑
my.cnf
文件:[mysqld] server-id=1 log-bin=mysql-bin
- 重启MySQL服务:
sudo systemctl restart mysql
- 创建用于复制的用户并授权:
CREATE USER 'replica'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;
- 获取主库的二进制日志位置:
SHOW MASTER STATUS;
- 编辑
-
配置从库
- 编辑
my.cnf
文件:[mysqld] server-id=2
- 重启MySQL服务:
sudo systemctl restart mysql
- 配置从库:
CHANGE MASTER TOMASTER_HOST='master_host_ip',MASTER_USER='replica',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=position; START SLAVE;
- 检查复制状态:
SHOW SLAVE STATUS\G;
- 编辑
2. 读写分离
读写分离是将写操作定向到主库,而将读操作定向到从库,从而提高系统的读性能。实现读写分离的方法有多种,常见的方法是使用中间件,如ProxySQL或MySQL Router。
ProxySQL 配置方法
-
安装ProxySQL
sudo apt-get install proxysql
-
配置ProxySQL
- 登录到ProxySQL管理控制台:
mysql -u admin -p -h 127.0.0.1 -P 6032
- 配置主从服务器:
INSERT INTO mysql_servers (hostgroup_id, hostname, port, weight) VALUES (1, 'master_host_ip', 3306, 1); INSERT INTO mysql_servers (hostgroup_id, hostname, port, weight) VALUES (2, 'slave_host_ip', 3306, 1);
- 配置读写分离规则:
INSERT INTO mysql_query_rules (rule_id, match_pattern, destination_hostgroup, apply) VALUES (1, '^SELECT', 2, 1);
- 加载并保存配置:
LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK; LOAD MYSQL QUERY RULES TO RUNTIME; SAVE MYSQL QUERY RULES TO DISK;
- 登录到ProxySQL管理控制台:
3. MHA(Master High Availability)
MHA是一个自动化的主从复制故障切换解决方案,能够在主库出现故障时,自动选择新的主库并重新配置复制。
配置方法
-
安装MHA
- 安装MHA Manager:
sudo apt-get install mha4mysql-manager
- 安装MHA Node:
sudo apt-get install mha4mysql-node
- 安装MHA Manager:
-
配置MHA Manager
-
创建配置文件:
[server default] manager_workdir=/var/log/mha/app1 manager_log=/var/log/mha/app1/manager.log user=manager password=password repl_user=replica repl_password=password ssh_user=root[server1] hostname=master_host_ip[server2] hostname=slave1_host_ip[server3] hostname=slave2_host_ip
-
配置SSH免密登录:
ssh-keygen -t rsa ssh-copy-id root@server1 ssh-copy-id root@server2 ssh-copy-id root@server3
-
-
启动MHA Manager
- 启动MHA Manager:
masterha_manager --conf=/etc/mha/app1.cnf
- 检查MHA状态:
masterha_check_status --conf=/etc/mha/app1.cnf
- 启动MHA Manager:
总结
通过配置MySQL主从复制、实现读写分离以及使用MHA进行高可用性管理,可以有效地提高数据库系统的性能和可靠性。这些技术手段不仅能分担数据库负载,还能在主库故障时快速恢复,确保系统的稳定运行。