一、简介
MySQL读写分离是一种通过将数据库的读操作和写操作分配到不同的数据库服务器上来提高数据库性能和可扩展性的技术。这种架构的目标是通过分担数据库服务器的负载,提高系统的响应速度和可用性。下面是MySQL读写分离的一些基本概念和原理:
- 读写分离概念:
- 读操作:通常比写操作更频繁,而且读取数据不会改变数据库的状态。因此,可以将读操作分配到一个或多个只负责处理读请求的数据库服务器上,从而提高并发性能。
- 写操作:写操作通常涉及到数据的修改,因此相对较慢。将写操作集中在一个数据库服务器上,确保数据的一致性。
- 架构组成:
- 主数据库(写操作):负责处理写操作,保持数据的一致性。
- 从数据库(读操作):负责处理读操作,从主数据库同步数据,并提供读取服务。
- 数据同步机制:
- 主从复制(Master-Slave Replication):主数据库将写操作的变更记录发送到从数据库,从数据库按照相同的顺序应用这些变更,保持数据一致性。
- 二进制日志(Binary Log):主数据库记录所有对数据的修改操作,从数据库通过读取主数据库的二进制日志来实现数据同步。
- 读写分离的优势:
- 提高性能:通过将读操作分散到多个从数据库,提高了数据库的读取性能。
- 提高可用性:当主数据库发生故障时,从数据库仍然可以提供读取服务,提高了系统的可用性。
- 降低主服务器压力:主数据库只需处理写操作,减轻了主服务器的负担,提高了系统的稳定性。
- 注意事项:
- 数据同步延迟:由于同步过程存在一定的延迟,因此在读取数据时需要考虑数据同步的时间差。
- 主从切换:在主数据库发生故障时,需要手动或自动切换到一个备用主数据库。
二、操作步骤
2.1 环境准备
操作系统:centos7 准备
#安装jdk
https://www.oracle.com/cn/java/technologies/downloads/
rpm -ivh jdk-19_linux-x64_bin.rpm
2.2 部署mysql-proxy
#下载地址
https://downloads.mysql.com/archives/proxy/
#创建目录
mkdir /usr/local/mysql
#解压下载好的tar包到/usr/local/mysql
tar -zxf mysql-proxy.xxx.tar.gz -O /usr/local/mysql
#更改/etc/mysql-proxy.cnf
vim /etc/mysql-proxy.cnf
[mysql-proxy]
user=root #运行mysql-proxy用户
admin-username=proxy #主从mysql共有的用户
admin-password=123.com #用户的密码
proxy-address=192.168.0.204:4000 #mysql-proxy运行ip和端口,不加端口,默认4040
#一般情况下读多写少
proxy-read-only-backend-addresses=192.168.0.203 #指定后端从slave读取数据
proxy-backend-addresses=192.168.0.202 #指定后端主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=info #定义log日志级别,由高到低分别有(error|warning|info|message|debug)
daemon=true #以守护进程方式运行
keepalive=true #mysql-proxy崩溃时,尝试重启
按Esc后:wq保存退出
#授权
chmod 660 /etc/mysql-porxy.cnf
#配置读写
vi /usr/local/mysql-proxy/lua/rw-splitting.lua
...
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1
max_idle_connections = 1, #默认8,改为1
}
...
按Esc后:wq保存退出
#启用读写分离
mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
3、创建用户
create user 'proxy'@'mysql-proxyIP' IDENTIFIED BY 'proxy';
4、授权用户
grant all on *.* to 'proxy'@'mysql-proxyIP';
alter USER 'proxy'@'mysql-proxyIP' IDENTIFIED WITH mysql_native_password BY 'proxy';
测试:mysql -h {mysql-proxyIP} -u proxy -P {mysql-proxyPORT} -p
标签:数据库,分离,lua,proxy,mysql,操作,读写
From: https://blog.51cto.com/u_14871454/8963547