文章目录
一、读写分离原理
mariadb(mysql)读写分离的基本的原理是让主数据库处理事务性增加、修改、更新、删除操作(CREATE、INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。读写分离的前提是基于主从复制,这样可以保证在master上修改数据,slave同步之后,web应用可以读取到slave端的数据。
二、读写分离环境
| 服务器 | IP | 查询命令 |
|---|---|---|
| 数据库Master的IP | 192.168.1.200 | |
| 数据库Slave的IP | 192.168.1.210 | |
| mysql-proxy服务器的IP | 192.168.1.220 | |
| mariadb版本 | mariadb-server-10.3.11-2.module_el8.0.0+35+6f2527ed.x86_64 | |
| rpm -qa | grep mariadb | ||
| mysql-proxy版本 | mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit | |
| linux版本 | CentOS Linux release 8.0.1905 (Core) | cat /etc/redhat-release |
三、读写分离部署
一、服务器200、210、220安装数据库mariadb(mysql)服务
安装过程请参照博客:https://blog.csdn.net/renfeigui0/article/details/102743258
二、服务器200、210配置mariadb(mysql)服务主从复制,确保主从工作正常运行
配置过程请参照博客:https://blog.csdn.net/renfeigui0/article/details/102797353
三、服务器220安装mariadb(mysql)proxy服务
1、登录官网https://downloads.mysql.com/archives/proxy/,根据自己的系统选择合适的软件版本。

2、下载mariadb(mysql)proxy软件,解压并移动到指定目录/usr/local/mysql-proxy。
wget https://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
ls
tar zxf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy
3、使用如下命令,编辑环境变量配置文件内容。
export PATH=$PATH:$HOME/bin:/usr/local/mysql-proxy/bin
4、进入mysql-proxy目录,编辑配置文件,增加如下配置文件内容。(配置文件中不要有注释空格等其他内容,不然启动程序时会报错)。
cd /usr/local/mysql-proxy/
vi mysql-proxy.conf
配置文件内容
[mysql-proxy]
plugins=proxy
proxy-address=192.168.1.220:4040
proxy-backend-addresses=192.168.1.200:3306
proxy-read-only-backend-addresses=192.168.1.210:3306
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
log-file=/usr/local/mysql-proxy/mysql-proxy.log
log-level=debug
keepalive=true
daemon=true
5、启动mysql-proxy服务,如果报错“(0660 or stricter required)”,如下图一,修改配置文件权限为660即可,服务正常启动后如下图二。查看启动日志,如下图三。
mysql-proxy --defaults-file=/usr/local/mysql-proxy/mysql-proxy.conf
chmod 660 /usr/local/mysql-proxy/mysql-proxy.conf
mysql-proxy --defaults-file=/usr/local/mysql-proxy/mysql-proxy.conf
netstat -antp |grep mysql-proxy
cat /usr/local/mysql-proxy/mysql-proxy.log #查看日志
图一

图二

图三

6、修改读写分离配置文件rw-splitting.lua,1表示只要有一个连接,就进行读写分离。重启mysql-proxy服务。
find / -name rw-splitting.lua
vi /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
pkill mysql-proxy
mysql-proxy --defaults-file=/usr/local/mysql-proxy/mysql-proxy.conf

7、主从服务器200、210,登录数据库授权账户mysqlproxy,密码123456,访问所有数据库所有权限。
grant all on *.* to 'mysqlproxy'@'%'identified by '123456';
flush privileges;
grant all on *.* to 'mysqlproxy'@'%'identified by '123456';
flush privileges;
8、读写分离测试。
写入测试(在proxy上使用建表语句成功在master上创建数据表stu,slave通过主从复制,得到stu数据表。在slave服务器上使用“stop slave”命令先停止slave,再从proxy上插入数据,master上通过查询看到新插入的数据,slave上却查询不到新插入的数据,表明通过proxy插入语句的数据是写入master的数据表中。proxy也查询不到新数据,表明通过proxy查询的数据是查询的slave的数据库)
| 步骤 | master | slave | proxy |
|---|---|---|---|
| 1 | mysql -uroot -p | mysql -uroot -p | mysql -umysqlproxy -p -P 4040 -h 192.168.1.220 |
| 2 | show databases; | show databases; | show databases; |
| 3 | use newdb; | use newdb; | use newdb; |
| 4 | show tables; | show tables; | show tables; |
| 5 | create table stu (age int, name char(40) ); | ||
| 6 | show tables; | show tables; | show tables; |
| 7 | stop slave; | ||
| 8 | insert into stu values (220, ‘proxy’); | ||
| 9 | select * from stu; | select * from stu; | select * from stu; |


读取测试(salve服务器使用“start slave”启动slave服务,先通过proxy插入三条数据,然后slave删除一条数据,再次在proxy查询时,只能看到2条数据,说明proxy查询读的是从库)
| 步骤 | master | slave | proxy |
|---|---|---|---|
| 1 | start alave; | ||
| 2 | insert into stu values (200, ‘master’); | ||
| 3 | insert into stu values (210, ‘slave’); | ||
| 4 | insert into stu values (220, ‘proxy’); | ||
| 5 | select * from stu; | select * from stu; | select * from stu; |
| 6 | delete from stu where age=‘220’; | ||
| 7 | select * from stu; | select * from stu; | select * from stu; |

9、mysql-proxy.conf配置文件说明。
| 参数 | 说明 |
|---|---|
| [mysql-proxy] | |
| plugins=proxy | 在mysql-proxy启动时加载的插件。 |
| proxy-address=192.168.1.220:4040 | 代理服务监听的地址和端口,不加端口号时,默认4040。 |
| proxy-backend-addresses=192.168.1.200:3306 | 指定后端master,写入mysql服务器的地址和端口。 |
| proxy-read-only-backend-addresses=192.168.1.210:3306 | 指定后端slave,只读mysql服务器的地址和端口。 |
| proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua | 指定读写分离配置文件位置。 |
| log-file=/usr/local/mysql-proxy/mysql-proxy.log | 指定日志文件位置。 |
| log-level=debug | 定义log日志级别,由高到低分别有(error |
| keepalive=true | 以守护进程方式启动mysql-proxy。 |
| daemon=true | 在mysql-proxy崩溃时尝试重启。 |
本文详细介绍Mysql读写分离的原理与环境搭建,包括主从复制配置、mysql-proxy服务安装及读写分离测试,适合数据库优化及负载均衡场景。
数据库的读写分离mysql-proxy(四)(centos8)&spm=1001.2101.3001.5002&articleId=103183858&d=1&t=3&u=8d47691c32184d3fb4b0fc10fb1f7071)
1530

被折叠的 条评论
为什么被折叠?



