Mysql读写分离详解
来源:互联网 发布:怎么优化自己网站 编辑:程序博客网 时间:2024/05/12 23:25
Mysql读写分离原理
原理就是让Master 数据库处理事务性增、删除、修改、更新操作(create、insert、delete、update),Slave数据库处理Select操作。
读写分离的前提是基于MYSQL主从复制,这样可以保证在Master上修改数据,Slave同步之后,WEB应用可以读取到Slave侧的数据。
Mysql读写分离有以下几种方式:
1.Mysql-proxy读写分离
2.Amoeba读写分离
3.Mycat读写分离
4.通过开发代码实现
本文主要介绍mysql-proxy方式实现读写分离
Mysql-proxy介绍:
Mysql-proxy是Mysql官方提供的中间件服务,支持无数客户端连接,同时后端可以连接若干台Mysql-Server服务器,Mysql-proxy自身基于Mysql协议,连接Mysql-proxy客户端无需修改任何设置,跟正常连接Mysql Server没有区别。
Mysql-proxy是应用App(客户端)与Mysql Server之间的一个连接代理,Mysql-proxy负责将App应用的SQL请求根据转发规则,转发至相应的后端数据库,基于lua脚本,可以实现复杂的连接控制和过滤,从而实现数据读写分离和负责均衡的需求。
下图为Mysql-proxy读写分离的架构图:
Mysql-proxy读写分离安装配置
1.环境准备
准备两台MYSQL服务器配置为主从复制,具体安装配置请见:http://blog.csdn.net/scott_bing/article/details/78353427
Mysql-proxy服务器:192.168.241.136
2.安装配置
a.下载mysql-proxy,解压并重命名至/usr/local/mysql-proxy
wget -c -P /src http://mirrors.sohu.com/mysql/MySQL-Proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
tar zxvf /src/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz-C /usr/local/
mv /usr/local/mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
b.创建系统用户mysql-proxyuseradd –r mysql-proxy
c.配置环境变量
/etc/profile中添加一下代码:
export PATH=$PATH:/usr/local/mysql-proxy/bin/
然后执行source /etc/profile使环境变量生效
d.启动mysql-proxy中间件,命令如下:
mysql-proxy --daemon --log-level=debug --user=mysql-proxy --keepalive--log-file=/var/log/mysql-proxy.log --plugins="proxy"--proxy-backend-addresses="192.168.241.133:3306"--proxy-read-only-backend-addresses="192.168.241.135:3306"--proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua"--plugins=admin --admin-username="admin"--admin-password="admin"--admin-lua-script="/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua"
--proxy-backend-addresses="192.168.241.133:3306"主mysql写
--proxy-read-only-backend-addresses="192.168.241.135:3306"从mysql读3.安装后测试mysql-proxy读写状态是否正常
a.Mysql-proxy启动后,在服务器端查看端口
4040为proxy代理端口,用于WEB应用连接
4041为管理端口,用于SA或DBA管理员连接
b.基于4041端口Mysql-proxy查看读写分离状态,登录4041管理端口(在master/slave登录操作)
mysql -h192.168.241.136 -uadmin -padmin -P 4041
登录后执行select命令,如图state均为up状态,type类型为rw、ro,则证明读写分离状态成功
select * from backends;
c.如果状态未unknown未知状态,可以在unknown数据库上登录mysql-proxy的4040端口,执行:show databases;命令,直到state变成up状态为止。
若unknown数据库上登录不了mysql-proxy的4040端口,需给mysql-proxy授权:
grant all on *.* to discuz@'192.168.241.136' identified by 'discuz';
mysql -h192.168.241.136 -udiscuz -pdiscuz -P 4040 -e 'show databases';
这边选择业务数据库discuz来测试
4.进行读写业务数据测试写数据
以3306端口登录至Master库,进行数据写入操作,执行以下代码:
use discuz;
create table db_test(id varchar(20),name varchar(20),age int(10));
insert into db_test values(01,'Mike',18);
insert into db_test values(02,'James',20);
---------------------------------------------------------------------------------------------------------------------------------------
读数据
以4040端口登录mysql-proxy,进行数据读操作,执行以下代码:
mysql -h192.168.241.136 -udiscuz -pdiscuz -P 4040 -e 'select * from discuz.db_test'
5.discuz配置mysql-proxy
登录apache服务器,修改discuz网站发布目录/usr/local/apache/htdocs,全局配置文件config_global.php,查找dbhost段,将192.168.241.133修改为192.168.241.136:4040,如下图:刷新页面即可。
- Mysql读写分离详解
- mysql读写分离
- Mysql 读写分离
- MYSQL实现读写分离
- Mysql读写分离
- mysql读写分离实现
- mysql读写分离实战
- mysql amoeba读写分离
- mysql 读写分离
- MySQL 读写分离
- mysql读写分离
- mysql服务器端读写分离
- mysql读写分离实战
- mysql数据库读写分离
- mysql 读写分离
- mysql读写分离
- mysql 读写分离
- Mysql proxy读写分离
- iOS字典的排序问题
- Java
- 银行卡在身边,卡里钱不翼而飞是怎么回事?
- Linux CentOS 修改MySQL安装目录
- Hadoop理论基础
- Mysql读写分离详解
- Tensorflow 学习与复习 Epoch_4_01 Cifar10_模型训练
- Linux目录管理
- 匿名函数(Lambda表达式)与箭头函数
- http respond header
- VRTK 实现菜单出现在视野前方(HTC设备)
- mybatis详解-(8)配置自增主键
- python怎么实现发现所需目录不存在时新建目录
- mysql中的事务、锁与线程安全