Mysql数据库的读写分离

读写分离,即在主数据库中进行写操作(也可以进行增、删、改操作),在从数据库中进行读操作。在正常情况下,我们对主数据库进行的是增、删、改、查操作,数据库的写入时间比较长,而查询时间短,所以为了提高数据库的效率,我们把读写分离开来。

一、数据库读写分离的配置

环境:redhat 6.5 

server2   master  

server3   slave 

server4   mysql-proxy  (调度器)

1、在server2和server3中实现gtid的主从复制(可以仿照之前的博客。完成gtid的主从复制)

2、在server4中安装mysql-proxy

1)首先解压mysql-proxy包

--->  tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local/  # 解压在固定目录

--->  cd  /usr/local/

--->  mv  mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy    # 进行重命名

2)修改读写分离的配置文件

--->  cd /usr/local/mysql-proxy        

--->  mkdir  conf       # 在mysql-proxy目录下创建conf目录,存放配置文件

--->  mkdir  logs       # 创建logs目录,存放日志文件

--->  cd  /usr/local/mysql-proxy/share/doc/mysql-proxy    # 修改读写分离配置文件

--->  vim  rw-splittind.lua      # 该文件为lua脚本,表示连接数超过2开始读写分离

--->  vim /usr/local/mysql-proxy/conf/mysql-proxy.conf          # 编辑mysql-proxy的配置文件

[mysql-proxy]
user=root        # proxy运行的用户

keepalive=true   # 崩溃时,尝试重启

daemon=true      # 以守护进程方式运行

log-level=debug  # 定义log日志级别,由高到低分别有(error|warning|info|message|debug)
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log                            # 日志位置
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua  # 读写分离配置脚本
proxy-read-only-backend-addresses=172.25.2.3:3306                               # 指定后端主slave读数据
proxy-backend-addresses=172.25.2.2:3306   # 指定后端主master写入数据
proxy-address=0.0.0.0:3306                # proxy监听本机所有接口

 

--->  chmod 660 mysql-proxy.conf    # 修改配置文件的执行权限

3)启动mysql-proxy服务

--->  /usr/local/mysql-proxy/bin/mysql-proxy  --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf

--->  px  -ax         #  查看启动的服务进程

4)在server2(master)中对某个用户授权读和插入权限

mysql>  grant all on *.*  to root@'%' identified  by  'Xniu+123';

5)在测试机中测试。通过调度器server4来连接数据库

6)在server2和server3中安装lsof,来查看数据库的连接情况

--->  yum  install -y lsof

--->  lsof  -i  :3306     # 查看3306端口连接情况

server2:(由于刚开始只连接了一次,使用的是master主机)

server3:(此时是server3到server2,是主从问题)

7)当我们在测试机中第三次连接数据库的时候,会出现读写分离的情况(在server2中写,server3中读)。

server2:

server3:

 # 在真机中插入一条数据的时候,在master可以看到的话,说明写操作在server2中。若是slave中看到插入的数据,不能说明写操作在srver3中,因为server2和server3是主从关系。

server4:插入数据

server2:查看数据

 

posted @ 2018-10-13 23:51  UTHN_B  阅读(344)  评论(0编辑  收藏  举报