mysql读写分离-mysql-proxy的配置
读写分离介绍
读写分离适合于读特别多的场景,一台只写,一台只读,提高读的效率。
实现的思路
前提:
读写分离建立在两台机器上,并且这两台机器是做了主从复制的,主库只写,从库只读,从而实现的。
实现:
第一种:
在主库创建一个只写的用户,而从库创建一个只写的用户,让程序去连接不同的服务器可达到读写分离的效果。
第二种:
通过代理软件,这种的好处是程序不需要关心写和读的操作分别连接的哪台服务器,只管往代理机器发即可,代理软件进行判断发往不同的mysql服务器。
通过代理实现的软件有:mysql-proxy,amoeba
代理方式的实现
图解:
环境:
需要开三台机器。
192.168.101 # 主库-只写
192.168.102 # 从库-只读
192.168.100 # 代理
安装lua脚本语言:
# 这个是mysql-proxy需要的
官方下载地址:
http://www.lua.org/ftp/
(1)安装依赖 yum install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make readline-devel -y (2)下载包 wget http://www.lua.org/ftp/lua-5.3.5.tar.gz -P /opt/ (3)解压包 cd /opt/ tar xf lua-5.3.5.tar.gz (4)修改Makefile文件 cd /opt/lua-5.3.5/ vi Makefile # 设置 INSTALL_TOP= /usr/local/lua (5)编译 make linux && make install (6)添加环境变量 vim /etc/profile 添加: export LUA_HOME=/usr/local/lua export PATH=$PATH:$LUA_HOME/bin 环境变量生效: source /etc/profile
安装mysql-proxy:
(1) 下载mysql-proxy包
wget https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -P /opt/
(2) 解压包和创建软连接
tar xf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit mysql-proxy085
(3) 创建logs目录
mkdir /opt/mysql-proxy085/logs
(4) 添加环境变量
echo "PATH=/opt/mysql-proxy085/bin/:$PATH" >> /etc/profile
source /etc/profile
(5) 配置代理文件
vim /etc/mysql-proxy.cnf
配置内容:
[mysql-proxy] # 运行mysql-proxy用户 user=root # mysql-proxy连接后端mysql服务器的用户 admin-username=mysql_proxy_user # mysql-proxy连接后端mysql服务器的密码 admin-password=123456 # 代理的监听地址端口,默认端口4040 proxy-address=0.0.0.0:3307 #指定后端主master写入数据 proxy-backend-addresses=192.168.1.101:3306 #指定后端从slave读取数据 proxy-read-only-backend-addresses=192.168.1.102:3306 #指定读写分离配置文件位置 proxy-lua-script=/opt/mysql-proxy085/share/doc/mysql-proxy/rw-splitting.lua #日志位置 log-file=/opt/mysql-proxy085/logs/mysql-proxy.log #定义log日志级别,由高到低分别有(error|warning|info|message|debug) log-level=debug #以守护进程方式运行 daemon=true #mysql-proxy崩溃时,尝试重启 keepalive=true
# 配置参数自行修改
(6) 修改配置文件权限
chmod 660 /etc/mysql-proxy.cnf
(7) 主库添加授权用户
grant all privileges on *.* to 'mysql_proxy_user'@'192.168.1.%' identified by '123456';
flush privileges;
(8) 启动代理
mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
(9) 连接通过代理账户连接代理开启的ip及端口
注:前提你连接的这台机器得弄个mysql客户端
# 测试的话:mysql包解压了,添加环境变量即可
# 后端的话:直接通过模块就连接1.100机器3307端口即可
mysql -umysql_proxy_user -p123456 -h192.168.1.100 --port=3307
(10) 成功
注:lua是必须要安装的
试验结果:
注:写操作,主从两台机器都会操作,因为他们是主从复制的。
想要看出效果需要修改lua脚本,因为它有限制(表示多少连接才开启读写分离):
vim /opt/mysql-proxy085/share/doc/mysql-proxy/rw-splitting.lua
# min_idle_connnections参数表示最少多少个连接,才开始读写分离
查询读写次数的sql语句:
show global status where Variable_name in('com_select','com_insert','com_delete','com_update');
show global staus like 'com_select'; # 单个的
原文地址:https://www.cnblogs.com/zezhou/p/11525081.html
- MySQL中的半同步复制(r11笔记第65天)
- Linux系统LVM逻辑卷创建过程以及自动化脚本
- 一个闪回区报警的数据恢复(r11笔记第62天)
- 利用腾讯云COS云对象存储定时远程备份网站
- 分享一个自写的Python远程命令和文件(夹)传输类
- Oracle数据误操作全面恢复实战(r11笔记第78天)
- 远程协助解决异常宕库的问题(r11笔记第75天)
- Nginx-helper纯代码版,文章评论发布自动清理Fastcgi缓存
- MySQL和Oracle行值表达式对比(r11笔记第74天)
- 闪回数据库不是“万金油”(r11笔记第73天)
- 修改Apache的超时设置,解决长连接请求超时问题
- Oracle 12cR2初体验(r11笔记第91天)
- MySQL中的undo截断(r11笔记第89天)
- Linux系统 df 命令显示异常、分区丢失问题解决
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 自定义Chrome等浏览器搜索引擎
- hiveServer2服务端安装
- hive数据加载
- Python 技术篇-使用opencv读取图片实例演示,python安装opencv库
- 关于页更改并加入一些在线服务
- Hadoop-2.6.0为基础的Hive安装
- Python 技术篇-opencv读取中文路径图片报错及解决办法
- Javaweb鼠标事件案例分析—鼠标移入移出表格颜色变化
- docker registry V2私有仓库搭建
- Python 路径问题:cv2.error: OpenCV(4.1.0)...size.width>0 && size.height>0 in function 'cv::imshow'. 原因与解决
- 算法案例分析—字符串模式匹配算法
- Docker-软件工程集装箱技术
- PyQt5 技术篇-获取电脑屏幕桌面的宽、高和分辨率
- 使用Python快速抠图
- 值得白嫖的数据库常用操作语句汇总(数据库、数据表、数据操作)