Centos7配置MySQL读写分离[通俗易懂]

Centos7配置MySQL读写分离[通俗易懂]背景82和83两台Mysql已经实现了主从复制。即将使用mysql-proxy进行读写分离,配置192为proxy,写82读83。mysql-proxymysql-proxy是一个处于客户端和服务器之间的中间件,它可以检测,分析或改变它们的通信。简单说就是一个中间层代理,一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载…

大家好,又见面了,我是你们的朋友全栈君。

背景

  • 82和83两台Mysql已经实现了主从复制
  • 即将使用mysql-proxy进行读写分离,配置192为proxy,写82读83。

mysql-proxy

  • mysql-proxy是一个处于客户端和服务器之间的中间件,它可以检测,分析或改变它们的通信。简单说就是一个中间层代理,一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说只需要连接到mysql-proxy的监听端口即可(默认4040)

下载mysql-proxy

https://downloads.mysql.com/archives/proxy/   根据系统选择

解压

1
2
tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz /usr/local/mysql-proxy

新建文件夹

1
2
mkdir /usr/local/mysql-proxy/lua   创建脚本存放目录
mkdir /usr/local/mysql-proxy/logs   创建日志目录

复制配置文件

1
2
cp share/doc/mysql-proxy/rw-splitting.lua ./lua  #复制读写分离配置文件
cp share/doc/mysql-proxy/admin-sql.lua ./lua   #复制管理脚本

创建配置文件

1
vi /etc/mysql-proxy.cnf   #创建配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
[mysql-proxy]
user=root  运行mysql-proxy用户
admin-username=proxy  主从mysql共有的用户
admin-password=proxy  用户的密码
proxy-address=10.120.112.192:4040   mysql-proxy运行ip和端口,不加端口,默认4040
proxy-read-only-backend-addresses=10.120.114.83  指定后端从slave读取数据
proxy-backend-addresses=10.120.114.82   指定后端主master写入数据
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua   指定读写分离配置文件位置
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua   指定管理脚本
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log  日志位置
log-level=debug  定义log日志级别,由高到低分别有(error|warning|info|message|debug)
daemon=true  以守护进程方式运行
keepalive=true   mysql-proxy崩溃时,尝试重启

修改读写分离配置

1
vi /usr/local/mysql-proxy/lua/rw-splitting.lua
1
2
3
4
5
6
7
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
      
      
 min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1
 max_idle_connections = 1, #默认8,改为1
 is_debug = false
}
end

启动mysql-proxy

1
2
3
4
5
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

netstat -tupln | grep 4040 #已经启动

killall -9 mysql-proxy #关闭mysql-proxy使用

测试读写分离

创建Proxy用户

在主服务器创建Proxy用户用户mysql-proxy使用,从服务器也会同步这个操作

1
grant all on *.* to 'proxy'@10.120.112.192' identified by 'proxy';

连接mysql-proxy

使用客户端连接代理

1
mysql -u proxy -h 10.120.112.192 -P 4040 -p proxy;

测试思路

测试写

关闭83从服务器的slave服务,在proxy192上执行insert操作,发现新增的数据都在82主服务器上。

测试读

在proxy192上执行select语句,发现查出来的数据并不包括刚才insert的数据,说明读的是83从服务器上的数据。

切换读库引擎

  • 读库默认引擎是InnoDB,修改为MyISAM会使查询速度变快。
  • 修改从服务器/etc/my.cnf

    1
    2
    3
    4
    5
    6
    7
    
    [mysqld]
    default-storage-engine=MyISAM  创建新表时将使用的默认存储引擎 
    key_buffer_size=128M
    myisam_sort_buffer_size=256M
    myisam_max_sort_file_size=5G
    myisam_repair_threads=1
    myisam_recover
    
  • 批量修改引擎

乱码问题

通过mysql-proxy读写分离查询的时候,可能会出现乱码。原因是当我们使用mysql-proxy读写分离时,客户端发出查询请求前一般会先发送一条’set names gbk’的语句来声明客户端编码,然后再发出实际查询的SQL语句,若数据库编码和客户端发出的不一致则会乱码。

解决方法是强行执行后端读服务器的字符编码,编辑 /etc/my.cnf文件:

1
2
3
4
[mysqld]
init-connect='SET NAMES UTF8'
skip-character-set-client-handshake
character-set-server=utf8
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138685.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Windows Phone 奇怪现象之ListBox在WP8能载入数据在WP7.x不能

    Windows Phone 奇怪现象之ListBox在WP8能载入数据在WP7.x不能

    2021年8月22日
    64
  • 关于OleDbCommand中操作数据库的几种方法的区别「建议收藏」

    关于OleDbCommand中操作数据库的几种方法的区别「建议收藏」在vb.net中利用OleDb的OleDbCommand类操作数据库,有以下这些方法: ExecuteNoQuery()返回值类型integer,常用来执行增删改操作,返回操作影响的行数ExecuteReader()返回一个只读的数据集,常用来作查询操作ExecuteScalar()返回值类型Object,执行查询,并返回查询所返回的结果集中第一行的第一列,常用来作一

    2022年5月19日
    34
  • 通信端口感叹号_PCI简易通讯控制器有黄色感叹号怎么办?

    通信端口感叹号_PCI简易通讯控制器有黄色感叹号怎么办?近日有网友新安装了Win7系统,安装完成后感觉电脑都顺畅了很多,不过在打开设备管理器的时候发现,在其他设备下的PCI简易通讯控制器有个黄色感叹号,出现这个感叹号也意味着这个控制器的驱动未安装,对此我们该如何解决呢?解决方法1、打开设备管理器,右键点击“PCI简易通讯控制器”,在下拉菜单中点击属性;2、在打开的“PCI简易通讯控制器属性”窗口显示:该设备的驱动程序未被安装,我们点击更新驱动程序;3…

    2022年5月25日
    194
  • dom4j解析xml字符串

    dom4j解析xml字符串与利用DOM、SAX、JAXP机制来解析xml相比,DOM4J表现更优秀,具有性能优异、功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml。dom4j是一套开源的api。实际项目中,往往选择dom4j来作为解析xml的利器。先来看看dom4j中对应XML的DOM树建立的继承关系针对于XML标准定义,对应于图2-1列出的内容,do

    2022年6月21日
    39
  • linux系统docker安装rabbitmq

    linux系统docker安装rabbitmq安装rabbitmq比较简单1.下载镜像dockerpullrabbitmq:managementrabbitmq:management含有web模块下载完成:2.运行镜像启动镜像dockerrun-d–hostnamedev-scrm–namerabbit-eRABBITMQ_DEFAULT_USER=rabbit-eRABBITMQ_DEFAULT_PASS=rabbit-p15672:15672-p5672:5672rabbitmq:m

    2022年5月24日
    50
  • 5.3 SPPNet

    5.3 SPPNet5.3SPPNet学习目标 目标 知道SPPNet与RCNN的对比特点 掌握空间金字塔池化(spatialpyramidpooling)的原理和作用 掌握SPPNet的训练过程以及测试结果对比 知道SPPNet优缺点总结 应用 无 5.3.1SPPNet介绍针对之前R-CNN的缺点,我们来看1、每个候选区域都进行了卷积操作提取特征,计算量大速度低效。2、对于卷积网络来讲都需要输入的

    2022年6月1日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号