千家信息网

MySQL数据库之读写分离

发表于:2024-11-21 作者:千家信息网编辑
千家信息网最后更新 2024年11月21日,一、概述:MySQL数据库主从结构配置以后,正常情况下数据库的所有读写操作全部都在主数据库上面,从数据库仅仅作为数据备份使用,显然无法有效的使用服务器资源,那么实现读写分离的需求就不可避免。二、拓扑图
千家信息网最后更新 2024年11月21日MySQL数据库之读写分离

一、概述:

MySQL数据库主从结构配置以后,正常情况下数据库的所有读写操作全部都在主数据库上面,从数据库仅仅作为数据备份使用,显然无法有效的使用服务器资源,那么实现读写分离的需求就不可避免。

二、拓扑图说明:

如上图所示,本文要实现的是读MySQL数据库的写入操作(增删改)等在Master服务器(192.168.4.10)上面实现,而对MySQL数据库的读取操作(查询)等在Slave服务器(192.168.4.20)上面完成。

如果在程序员编程时创建两个数据库连接Connection,在程序中对数据库的读取操作使用一个数据库Connection,而对数据库的写入操作使用另外一个数据库Connection,也可以实现对数据库的读写分离。但是显然这种实现方式不够灵活,因此一般不使用这种方式。

本文中将使用MaxScale软件来实现MySQL数据库的读写分离。MaxScale是由http://www.skysql.com/开发的一款MySQL数据库中间件,支持高可用,负载均衡,具有良好的可扩展性,高性能的基于事件驱动的同时具有代理和管理功能的中间件。该软件将部署在拓扑图中的MySQL代理服务器(192.168.4.100)上,客户机的访问请求指向MySQL代理服务器,该服务器将把对数据库的写入操作指向到192.168.4.10,对数据库的读取操作指向到192.168.4.20。

三、配置说明:

1、MaxScale配置

(1)修改配置文件:

[root@100 ~]# vim /etc/maxscale.cnf

A、指定数据库服务器
[server1]
type=server
address=192.168.4.10
port=3306
protocol=MySQLBackend

[server2]
type=server
address=192.168.4.20
port=3306
protocol=MySQLBackend

B、指定要监控的数据库服务器
[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2
user=scalemon #代理服务器监控服务连接数据库服务器的用户名(需要在数据库服务器上面授权)
passwd=123456 #代理服务器监控服务连接数据库服务器的密码

monitor_interval=10000 //活跃检查时间间隔,10000毫秒=10秒
C、指定读写分离在哪些主机之间执行
[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale #用于检查用户连接数据库时用的授权用户是否合法的用户名(需要对mysql数据库有select权限)
passwd=123456 #用于检查用户连接数据库时用的授权用户是否合法的用户名

max_slave_connections=100%
D、定义管理服务和方式(不用改)
[MaxAdmin Service]
type=service
router=cli
E、只读服务器配置选项(不用,全部注释掉)
[Read-Only Service]
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#passwd=mypwd
#router_options=slave

#[Read-Only Listener]
#type=listener
#service=Read-Only Service
#protocol=MySQLClient
#port=4008
F、读写分离的监听端口配置
[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006 //客户端读写分离服务访问端口
G、管理服务的监听端口配置
[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=4009 //管理服务使用的端口

2、在主数据库服务器添加授权

mysql > grant replication slave,replication client on *.* to scalemon@"%" identified by "123456";
mysql > grant select on mysql.* to maxscale@"%" identified by "123456";

3、在代理服务器上面启动服务并检查数据库服务器状态

(1)启动服务:

[root@100 ~]# maxscale --config=/etc/maxscale.cnf

(2)检查状态

[root@100 ~]# maxadmin -uadmin -pmariadb -P4009
MaxScale> list servers
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.4.11 | 3306 | 0 | Master, Running
server2 | 192.168.4.12 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------

4、验证测试

在192.168.4.120上使用授权用户连接代理服务器(192.168.4.100:4006),在从数据库服务器(192.168.4.20)上面Insert一些数据,在客户端可以读到,那么说明客户端读数据时是在从数据库(192.168.4.20);在192.168.4.120上使用授权用户连接代理服务器(192.168.4.100:4006),Insert一些数据成功,在主从数据库上面都可以看到,说明客户端写数据时是在主数据库服务器(192.168.4.10)上面。

数据 数据库 服务 服务器 用户 代理 配置 客户 检查 客户端 端口 管理 指向 方式 用户名 管理服务 监控 合法 不用 中间件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 电子保函平台软件开发公司 方舟搞垮服务器 服务器提示网页响应慢 微型数据库的设计与实现 滁州软件开发多少钱 蔚蓝下载mod数据库 苹果泰拉瑞亚如何开服务器 小学网络安全工作责任书 网络安全可以讲什么内容 软件开发合同可以贷款吗 北京一凡熙杰网络技术有限公司 用户如何使用数据库管理系统 网吧无盘服务器辐射大吗 网络安全手抄报怎么画六年级 阿里云共享服务器安全吗 数据库怎么在添加数据库 静安区市场软件开发服务大概费用 g5400支持服务器内存条吗 金铲铲之战服务器不同能一起玩么 什么数据库数据比较不干净 天涯明月刀数字捏脸数据库 我想软件开发难学吗 人口数据库包含哪些 网络安全公司曲总 jdbc怎么加入数据库 数据库系统的五个特点 深圳java软件开发哪家好 头歌数据库查看表结构和表名 文件和打印服务器 官网服务器有什么用
0