虚拟机搭建负载均衡,mysql主从复制和读写分离(四、搭建主从复制和读写分离)

虚拟机搭建负载均衡,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