企业 Mysql读写分离配置

MySQL中可以实现读写分离的插件有mysql-proxy / Mycat / Amoeba ,这些工具都可以实现效果,mysql-proxy是系统自带的一个插件,我们可以用它来进行操作实验

操作配置

读写分离的操作也是要基于主从复制,这里使用gtid的复制方式就可以,
如果之前有配置就先关闭mysqld服务,更改配置文件,清空/var/lib/mysql目录里的数据,重新进行安全初始化。

读写分离配置

这里我们配置的主机有三台,两台作为数据库主从复制,一个作为读,一个作为写,第三台主机作为porxy节点
mysql-porxy的下载地址:https://downloads.mysql.com/archives/proxy/
在这里插入图片描述
下载proxy的安装包解压拆分到 /usr/local/ 下

tar xfz mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz -C /usr/local/

为了方便使用做一个软连接
在这里插入图片描述
需要注意的是mysql-proxy里面是没有带配置文件的,所以需要自行建立conf目录写入一个配置文件
在这里插入图片描述
配置文件的内容如下:

[mysql-proxy]	#指定语句块
proxy-address=0.0.0.0:3306	#指定proxy访问的主机和端口,3306是一个对外的通用端口
proxy-backend-addresses=172.25.254.5:3306	#执行写主机的ip和端口
proxy-read-only-backend-addresses=172.25.254.7:3306	#指定读主机的ip和端口
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua	#只当读写分离操作使用的lua文件路径
pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid	#指定pid的存放路径
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log	#指定日志的存放路径
log-level=message	#指定日志的等级
daemon=true			#使用后台方式运行
keepalive=true		#开启守护进程
plugins=proxy		#指定使用的插件

保存后记着要创建 log 目录,还需要将配置文件的权限改为660
在这里插入图片描述
这里因为我们没有那么多测试主机,所以将lua脚本里原本启动机制的最小4个最大8个连接,改为1和2
在这里插入图片描述
运行mysql-proxy,查看日志是否运行正常
在这里插入图片描述
在这里插入图片描述

读写分离测试

proxy启动正常后,做测试还需要在主节点的数据库添加一个用用户授权他可以执行添加、查看、更新等远程操作

mysql> grant insert,update,select on *.* to testuser@'%' identified by 'He1234..';
mysql> FLUSH PRIVILEGES;	#刷新授权表

mysql> use local		#使用自己创建的数据库
mysql> create table users (		#在数据库里创建一个表格
    -> username varchar(10) not null,
    -> password varchar(10) not null );

使用访问测试主机去通过配置proxy的主机使用创建的远程用户登录MySQL,这里使用的测试登录的主机可以使用linux真机,或使用安装mariadb的虚拟机进行登录,
172.25.254.6上是我们配置proxy的主机
在这里插入图片描述
我们使用测试主机去同时连接3次查看数据库,在proxy的配置主机上使用命令: lsof -i:3306 ,查看3306接口的状态

[root@server6 mysql-proxy]# lsof -i:3306
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysql-pro 21517 root   10u  IPv4  77924      0t0  TCP *:mysql (LISTEN)
mysql-pro 21517 root   11u  IPv4  77932      0t0  TCP server6.hehe.com:mysql->172.25.254.4:59918 (ESTABLISHED)		#第一次被172.25.254.4主机连接
mysql-pro 21517 root   12u  IPv4  77933      0t0  TCP server6.hehe.com:52034->server5.hehe.com:mysql (ESTABLISHED)	#寻找server5 MySQL的主节点
mysql-pro 21517 root   13u  IPv4  78019      0t0  TCP server6.hehe.com:mysql->172.25.254.4:59920 (ESTABLISHED)		#第二次连接
mysql-pro 21517 root   14u  IPv4  78020      0t0  TCP server6.hehe.com:52036->server5.hehe.com:mysql (ESTABLISHED)
mysql-pro 21517 root   15u  IPv4  78133      0t0  TCP server6.hehe.com:mysql->172.25.254.4:59922 (ESTABLISHED)		#第三次连接
mysql-pro 21517 root   16u  IPv4  78134      0t0  TCP server6.hehe.com:45020->server7.hehe.com:mysql (ESTABLISHED)	#因为之前更改的配置两次请求以上就会开启读写分离,所以去寻找server7这台只读的数据库节点

读写分离的读访问测试完。我们来测试写
这里先去关闭server7上的主从复制,使它无法再从主节点server5上获取数据。然后我们在测试机的访问上写入数据是成功的,但是查看不到数据,因为读是访问的server7,而写是在server5上,所以在测试机上看不到写入的数据

#server7上停止主从复制
mysql> stop slave;
Query OK, 0 rows affected (0.14 sec)

#测试机写入数据,并查看数据
MySQL [local]> insert into users values ('user2','222');
Query OK, 1 row affected (0.08 sec)

MySQL [local]> select * from users;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 111      |
+----------+----------+
1 row in set (0.00 sec)

#在server5上可以看到写入的数据
mysql> use local
Database changed
mysql> select * from users;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 111      |
| user2    | 222      |
+----------+----------+
2 rows in set (0.00 sec)

这样我们就证明了实现了读写分离

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Howei__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值