以下是在Linux上实现MySQL负载均衡的常见方法及步骤:
通过主从复制将读操作分发到从服务器,减轻主库压力。
主库配置
/etc/my.cnf:设置server-id=1,启用二进制日志log-bin=mysql-bin,指定复制数据库binlog-do-db=your_db。CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';。systemctl restart mysql,并记录SHOW MASTER STATUS中的File和Position。从库配置
/etc/my.cnf:设置server-id=2,启用中继日志relay-log=mysql-relay-bin,read_only=1。CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='记录的File', MASTER_LOG_POS=记录的Position;。START SLAVE;,通过SHOW SLAVE STATUS检查状态。sudo apt-get install mysql-router。/etc/mysql-router.cnf,指定主从服务器地址及模式(读写分离或负载均衡)。[routing]
default-backend=readwrite://主库IP:3306,slave1:3306,slave2:3306
sudo systemctl start mysql-router。sudo apt-get install haproxy。/etc/haproxy/haproxy.cfg,设置负载均衡模式(如roundrobin轮询)。frontend mysql_front
bind *:3306
default_backend mysql_back
backend mysql_back
balance roundrobin
server mysql1 主库IP:3306 check
server mysql2 从库IP:3306 check
sudo systemctl start haproxy。/etc/proxysql.cnf,定义读写规则和服务器组。[mysql_query_rules]
rule1= {match_pattern="^SELECT", destination_hostgroup=2} # 读请求转发到从库组
[mysql_hostgroups]
hostgroup1= {servers=主库IP:3306, mode=readwrite} # 主库组
hostgroup2= {servers=从库IP:3306, mode=readonly} # 从库组
sudo systemctl start proxysql。Seconds_Behind_Master)。参考来源: