Mysql数据库之读写分离

本文详细介绍了数据库读写分离技术的原理与实现过程,通过部署MySQL一主一从结构及MaxScale代理服务器,实现了服务器负载均衡,提高了数据库的读写效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:现在我忘的速度,已经超过了我学习的速度了....
-----------------
一 读写分离概述
读写分离很好理解,就是为了缓解服务器的压力,而将对数据库的查询操作(读)和插入操作(写),分隔,而孕育出来的技术.
区分读写操作的方法有两种,一是从客户端区分,二是从服务器区分,为了增加用户体验.开发者果断放弃了在用户端区分,进而在服务器端区分,进而实现读写分离技术.避免在一台服务器上同时进行读写操作.提高数据库服务器的负载能力.
二 拓扑图展示
因此读写分离原理就是由mysql代理面向客户端提供服务,收到sql写请求时,交给master服务器处理,收到sql读请求时,交给slave服务器处理
mysql代理服务器使用的是MaxScale代理软件详情请访问官网https://downloads.mariadb.com
下载地址
https://downloads.mariadb.com/files/MaxScale
三 构建流程
1.部署mysql一主一从结构
主服务器ip 192.168.4.51
从服务器ip 192.168.4.52
2.部署mysql代理服务器192.168.4.57
装包,修改配置文件,启动服务
3.测试客户端连接代理服务访问数据

四 部署服务
1.部署主从
配置主服务器192.168.4.51

]# vim /etc/my.cnf
[mysqld]
server_id=51    //指定服务器ID号 
log-bin=master51        //启用binlog日志,并指定文件名前缀
...
[root@master55 ~]# systemctl restart mysqld        //重启mysqld

主服务器授权用户,并查看binlog日志信息
]# mysql -uroot -p123456
mysql> grant all on . to ‘repluser’@’%’ identified by ‘123456’;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show master status;
±----------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±----------------±---------±-------------±-----------------±------------------+
| master51.000001 | 453 | | | |
±----------------±---------±-------------±-----------------±------------------+

配置从服务器192.168.4.52

]# vim /etc/my.cnf
[mysqld]
server_id=52   //不要重复,唯一,报存退出
连接mysql指定主库信息

mysql> change master to master_host='192.168.4.51',
    -> master_user='repluser',
    -> master_password='123456',
    -> master_log_file='master51.000001',
    -> master_log_pos=453;
启动slave
mysql> start slave;
查看
mysql> show  slave status\G;
确保两个线程yes
  Slave_IO_Running: Yes        //IO线程YES
  Slave_SQL_Running: Yes        //SQL线程YES

2.配置maxscale代理服务器
安装:rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm

修改配置文件

]# vim /etc/maxscale.cnf
[maxscale]
threads=auto            //运行的线程的数量
[server1]            //定义数据库服务器
type=server
address=192.168.4.51        //主服务器ip
port=3306
protocol=MySQLBackend        
[server2]
type=server
address=192.168.4.52        //从服务器IP
port=3306
protocol=MySQLBackend
[MySQL Monitor]                //定义监控的数据库服务器
type=monitor
module=mysqlmon
servers=server1, server2        //监控的数据库列表,不能写ip
user=maxscalemon                    //监控用户
passwd=123qqq...A                //密码
monitor_interval=10000        
#[Read-Only Service]        //不定义只读服务
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#passwd=mypwd
#router_options=slave
[Read-Write Service]            //定义读写分离服务
type=service
router=readwritesplit
servers=server1, server2
user=maxscalerouter            //路由用户
passwd=123qqq…A                //密码
max_slave_connections=100%
[MaxAdmin Service]        //定义管理服务
type=service
router=cli
#[Read-Only Listener]        //不定义只读服务使用的端口号
#type=listener
#service=Read-Only Service
#protocol=MySQLClient
#port=4008
[Read-Write Listener]            //定义读写服务使用的端口号
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006
[MaxAdmin Listener]        //管理服务使用的端口号
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=4016     //手动添加,不指定时使用的是默认端口在启动服务以后可以知道默认端口是多少

注意:除此以外的其他代码均可删除,不删除要注释掉

添加对应的授权用户,主服务器添加,从服务器自动同步

mysql> grant replication slave,replication client on *.* to  maxscalemon@'%' identified by "123qqq…A";      //授权监控用户
mysql> grant select on mysql.* to maxscalerouter@"%" identified by "123qqq…A";   //授权路由用户

确认添加后保险起见去从服务器上查看一下

启动服务查看对应端口和进程

]# maxscale -f  /etc/maxscale.cnf   
]# ps -C  maxscale        //查看进程
PID TTY          TIME CMD
17930 ?        00:00:00 maxscale   
]# netstat  -antup | grep :4006  //查看读写分离端口
tcp6       0      0 :::4006      :::*                    LISTEN      17930/maxscale
]# netstat  -antup | grep :4016  //查看管理服务端口
tcp6       0      0 :::4016       :::*                    LISTEN      17930/maxscale

测试配置
在代理服务器本机查看的命令

]# maxadmin  -uadmin -pmariadb -P4016
MaxScale> list  servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.4.51    |  3306 |           0 | Master, Running
server2            | 192.168.4.52    |  3306 |           0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
//确认主从都是running的状态

在其他主机查看就要去主服务器添加授权用户,添加完用户后,在主服务器建库建表插入一条数据,然后再到从服务器插入一条数据,利用从服务器不会同步数据到主服务器的特性,从其他主机使用授权用户访问读写分离代理服务器的4006端口,连接成功后使用查询语句可以看到2条插入的数据,表示读写分离服务构建成功.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值