一.什么是读写分离
读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。
二.数据库读写分离的配置
实验主机
172.25.254.4 server4 master
172.25.254.5 server5 slave
172.25.254.6 server6 mysql-proxy
在server4和server5上做主从复制
在server6上做mysql-proxy(调度器)
1.解压proxy数据包,并将解压后的目录放在/usr/local下
2.建立目录存放读写分离的配置文件和日志
3.编辑读写分离的配置文件
[root@server6 conf]# vim mysql-proxy.conf
vim mysql-proxy.conf mysql-proxy --help-all
[mysql-proxy]
user=root # proxy运行的用户身份
proxy-address=0.0.0.0:3306 # proxy监听本机所有接口
proxy-backend-addresses=172.25.254.4:3306 # 后端master(读写)主机
proxy-read-only-backend-addresses=172.25.254.5:3306 # 后端slave(读)主机
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua # lua脚本所在的位置
log-level=debug
daemon=true
keepalive=true
4.将mysql-proxy的二进制命令放进系统环境变量中
[root@server6 bin]# vim ~/.bash_profile
[root@server6 bin]# source ~/.bash_profile
5.lua脚本实现读写分离,修改数据库发生读写分离时的最大最小值
cd /usr/local/mysql-proxy/share/doc/mysql-proxy/
[root@server6 conf]# vim mysql-proxy.conf 修改数据库发生读写分离时的最大最小值
6.修改权限
chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf
7.启动mysql-proxy
mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
8.在mster给root一个远程登陆的权限
查看监听端口
测试:
开启一个shell连接mysql
在主库安装slof
再开启一个shell连接mysql
通过外界连接第三次数据库,读数据在server5上,写数据在server4上:
向数据库中写入数据:
当slave端未关闭,master和slave,包括远程登录都可以查看到写入的内容。
关闭slave从库再次远程登录调度器,插入信息,查看,并没发现刚插入的信息,
因为slave端被关闭,没有读取到主库的信息
查看主库,发现主库有刚插入的数据
当开启slave从库,查看数据,发现数据过来。
远程登录调度器,也可以发现数据,因此slave只读,实现读写分离。