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