虚拟机搭建负载均衡,mysql主从复制和读写分离(一、搭建虚拟机)
虚拟机搭建负载均衡,mysql主从复制和读写分离(二、克隆虚拟机)
虚拟机搭建负载均衡,mysql主从复制和读写分离(三、搭建负载均衡)
虚拟机搭建负载均衡,mysql主从复制和读写分离(四、搭建主从复制和读写分离)
由于mysql权限限制,root用户连接不了navicat,解决方法:
mysql -u root -p
use mysql
update user set host='%' where user='root' \g
FLUSH PRIVILEGES \g
quit;
systemctl restart mysqld 重启mysql
为了方便测试还需要关闭防火墙,这里设置开机不启动防火墙,不然端口不开放也是连接不了Navicat的。
systemctl stop firewalld 先关闭本次的防火墙
systemctl disable firewalld 再设置每次启动时自动关闭防火墙
firewall-cmd --state 查看防火墙状态
这样就能连接navicat了。
图5-1
由于虚拟机是克隆的所以server-id都相同,现在需要把第二台和第三台虚拟机改成不同的。
图5-2
注意,auto.cnf中的server-uuid也可能一样的,查看一下
find / -name auto.cnf
vi /www/server/data/auto.cnf
如果主服务器和从服务器server-uuid一样,使用如下方法解决
停止从库的mysqld服务,删除他的auto.cnf文件,再启动数据库服务即可:
systemctl stop mysqld.service
mv /www/server/data/auto.cnf /www/server/data/auto.cnf.bak (重命名,你也可以直接删除,重启会重新生成auto.cnf)
systemctl start mysqld.service
接下来设置主库:
mysql -u root -p
grant all privileges on *.* to 'user1'@'%' identified by '123456' with grant option;(设置一个用户)
show master status;(查看主库信息)
图5-3
切换到从库:
1.mysql -u root -p
2.change master to master_host='192.168.121.111',master_user='user1',master_password='123456',master_log_file='mysql-bin.000016',master_log_pos=445;
3.start slave;
4.show slave status\G
图5-4
这两个都显示yes就是成功了。
在主库中创建一个数据库,从库也自动创建。
图5-5
六、读写分离
由于小编使用的是thinkphp6框架,框架自带了读写分离功能,只需要在配置文件里设置好主从数据库就可以了。
找到config文件下面的database.php,修改如下,
'type' => "mysql",
// 服务器地址
'hostname' => "192.168.121.111,192.168.121.112",
// 数据库名
'database' => "test",
// 用户名
'username' => "root",
// 密码
'password' => "123456",
// 端口
'hostport' => env('database.hostport', '3306'),
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => env('database.charset', 'utf8'),
// 数据库表前缀
'prefix' => env('database.prefix', ''),
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 1,
// 数据库读写是否分离 主从式有效
'rw_separate' => true,
mysql插入和查询数据
图6-1
在调试工具中可以看到读写分离设置成功。
图6-2