mysql主从复制系列(3)——一主多从搭建

983 阅读2分钟

一主多从架构

在主库读取请求压力非常大的场景下, 可以通过配置一主多从复制架构实现读写分离, 把大量对实时性要求不是特别高的读请求通过负载均衡分布到多个从库上, 降低主库的读取压力,在主库出现异常宕机的情况下, 可以把一个从库切换为主库继续提供服务 (中间切换过程无法提供服务)。

先用2台主机做测试

主库:192.168.5.149:3306

从库1:192.168.5.150:3307


1. 配置主机远程登录,确保从库主机可以登录到主库主机

主机配置文件

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 

bind-address 改 0.0.0.0  或者 注释掉 (这样mysql服务就可以监听全网的连接)


systemctl restart mysql


确保要登录的用户host为 %

select user, host from mysql.user; 

(这步在后面grant replication slave on *.* to 'slave'@'%' identified by 'slave'; 可以保证)


设置防火墙

开放3306端口,服务器需要配置安全组规则,有防火墙需要开放3306
sudo ufw allow 3306  或者  sudo ufw disable


2. 主库配置

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 

port修改(主库就用3306)


开启server-id log_bin


systemctl restart mysql  
// 启用一个用户 slave,用于从库登录到主库
grant replication slave on *.* to 'slave'@'%' identified by 'slave';

// 这里给 slave用户赋all privileges 
grant all privileges on *.* to 'slave'@'%' identified by 'slave';

flush privileges;

show master status;   // 查看master状态


主库配置好了以后就先不要改动了,改动会影响状态


3. 从库配置

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 

修改port


把server-id改成与主机不同的,log_bin打开



systemctl restart mysql 

把slave主机的master_host切换到192.168.5.149

change master to master_host='192.168.5.149', master_port=3306, master_user='slave', master_password='slave', master_log_file='mysql-bin.000001', master_log_pos=1023;

start slave;      // stop slave; 可停止进行slave模式

show slave status\G


(看到两个Yes了不,上面的slave_io_running破玩意老是NO,翻到下面报错The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.可以参考这篇,什么,不是报这个错,自己搜过别的!!!!)



4. 测试一下主从复制

主机给个命令 (你能感受到我的愤怒┗|`O′|┛ 嗷~~)



从机  成功啦~