mysql的读写分离

什么是读写分离?

读写分离其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。使用读写分离可以大大降低数据库服务器的负载。

搭建前提:需要3台虚拟机。

server1:172.25.62.1(读写)
server2:172.25.62.2(只读)
server3:172.25.62.3(调度)
首先,必须在server1和server2上安装配置好mysql,安装步骤详见mysql的主从复制(异步复制)

搭建步骤:

首先,在server1和server2两台主机做好gtid的主从复制。

在server1:

1.修改配置文件

[root@server1 mysql]# vim /etc/my.cnf
 29 log-bin=mysql-bin
 30 server_id=1
 31 gtid_mode=ON
 32 enforce-gtid-consistency=ON
 33 log_slave_updates=ON
 34 log_bin=binlog

2.准备一个纯净的mysql环境

[root@server1 mysql]# systemctl stop mysqld  
[root@server1 mysql]# rm -rf *
[root@server1 mysql]# systemctl start mysqld  
[root@server1 mysql]# cat /var/log/mysqld.log | grep password

在这里插入图片描述
删除原来mysql的数据,查看初始密码。
3.进行安全初始化,登陆。

[root@server1 ~]# mysql_secure_installation 

在这里插入图片描述
重新初始化。

[root@server1 mysql]# mysql -p

在这里插入图片描述
登陆。
4.添加用户,数据库作为jtid复制的主库

mysql> grant replication slave on *.* to repl@'172.25.62.%' identified by 'Hang+123';

在这里插入图片描述

mysql> show master status;

在这里插入图片描述
查看状态。
5.在server1上创建登陆用户

mysql> grant insert,update,select on *.* to hang@'%' identified by 'Hang+123';

登陆用户为hang,全部设定好之后用这个用户登陆。

在server2:

同样,server2也需要一个纯净的数据库环境,这里不再累述。首先要修改配置文件

[root@server2 mysql]# vim /etc/my.cnf
 29 log-bin=mysql-bin
 30 server_id=2
 31 gtid_mode=ON
 32 enforce-gtid-consistency=ON
 33 log_slave_updates=ON
 34 log_bin=binlog

之后登陆mysql进行配置。

mysql> change master to master_host='172.25.62.1', master_user='repl', master_password='Hang+123', master_auto_position=1;

进行授权,设置主库为server1,本机作为从库。

mysql> show slave status\G

在这里插入图片描述
查看从库server2的状态,sql线程和io线程是否打开,这里都是yes。

mysql> start slave;

开启从库slave,开始gtid复制,这样jtid的复制就搭建好了,接下来就要进行读写分离的配置了。

在server3:

用server3做前两台主机的调度,设置server1可以读写,server2是只读。
1.获取mysql-proxy安装包,进行解压

在这里插入图片描述

[root@server3 ~]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local

2.制作软链接
在这里插入图片描述

[root@server3 local]# ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy

进入前面指定的/usr/local目录,做软链接,之后会生成mysql-proxy目录。
3.创建conf目录,新建文件


[root@server3 mysql-proxy]# mkdir conf
[root@server3 mysql-proxy]# cd conf/
[root@server3 conf]# vim mysql-proxy.conf
  1 [mysql-proxy]
  2 proxy-address=0.0.0.0:3306
  3 proxy-read-only-backend-addresses=172.25.62.2:3306		##设置只读
  4 proxy-backend-addresses=172.25.62.1:3306
  5 proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
  6 pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid
  7 log-file=/usr/local/mysql-proxy/log/mysql-proxy.log
  8 plugins=proxy
  9 log-level=debug
 10 keepalive=true
 11 daemon=true

修改配置文件,对server1和server2进行调度。

[root@server3 conf]# chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf

之后还要修改文件权限。

4.设置最大最小连接数

[root@server3 conf]# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
40                 min_idle_connections = 1,
41                 max_idle_connections = 2,		

最小连接数为1,最大连接数为2,超过两个连接时,写的数据回进行读写分离。也就是读的数据在server2上读,写的数据则写在server1上。
5.启动服务

[root@server3 conf]# /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
[root@server3 conf]# cat /usr/local/mysql-proxy/log/mysql-proxy.log 

在这里插入图片描述
查看日志,可以看到,server3和server1和server2的数据库连接成功,这样读写分离就设置成功了。

登陆:

在另一台主机登陆server3。

[root@foundation62 mysql]# mysql -h 172.25.62.3 -uhang -pHang+123

在这里插入图片描述
登陆成功,当登陆连接数超过2个时,读数据在server2上操作,写的数据则存入server1,这样可以大大降低数据库的访问负载。
在server3上可以查看连接数:

[root@server3 conf]# lsof -i:3306

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值