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

2022年9月3日11:17:58

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

  • 作者:lmp5023
  • 原文链接:https://blog.csdn.net/lmp5023/article/details/126406681
    更新时间:2022年9月3日11:17:58 ,共 1691 字。