MySQL数据的读写分离之maxscale的使用方式

 更新时间:2023年12月25日 10:50:12   作者:我是菜鸟131  
这篇文章主要介绍了MySQL数据的读写分离之maxscale的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

数据的读写分离

什么是读写分离

把客户端访问数据的读(selec)请求和写(insert、update、delete)请求分别分配给不同的数据库服务器处理

如何实现客户端访问数据的,读写分离

通过程序实现

  • 读请求----->数据库服务器
  • 写请求----->另一台数据库服务器

配置服务实现(在服务器上安装软件,提供服务)

  • 中间件软件
  • mysql-proxy
  • mycat
  • maxscale
  • client---->服务器----mysql

读写分离的原理

由MySQL代理面向客户端提供服务

  • 收到SQL写请求时,交给master服务器处理
  • 收到SQL读请求时,交给slave服务器处理

为什么要配置数据读写分离

数据分流,分担单台服务器得工作压力

构建思路 

1.部署MySQL一主一从结构

  • 主服务器:192.168.4.51
  • 从服务器:192.168.4.52

2.部署MySQL代理服务器

  • 装包,修改配置文件,启动服务

3.测试配置

  • 客户端连接代理服务访问数据

配置数据读写分离

拓扑图:

首先配置51与52的的主从复制,51为主,52为从

具体配置过程请看:MySQL主从复制

#192.168.4.52
mysql -uroot -p123456 -e "show slave status\G"

配置代理服务器57

1)安装提供服务的软件

部署Maxscale代理软件

由MySQL的兄弟公司MariaDB开发

下载地址:https://dlm.mariadb.com/browse/mariadbmaxscale/49/789/?_ga=2.180365351.1460156067.1640182534-1832063011.1640182534

本人使用的环境centos7.9 、MySQL5.7.35 、maxscle2.3.20

wget https://dlm.mariadb.com/1065384/MaxScale/2.3.20/centos/7/x86_64/maxscale-2.3.20-1.centos.7.x86_64.rpm
yum -y install maxscale-2.3.20-1.centos.7.x86_64.rpm
ss -nultp | grep 3306  #因为要做代理服器,不能开启MySQL数据服务,如果开启请关闭
systemctl stop mysqld
rpm -ql maxscale
主配置文件日志文件
/etc/maxscale.cnf/var/log/maxscale

2)修改服务配置文件

 vim /etc/maxscale.cnf
 [maxscale]   #默认服务启动后线程的个数,auto自动,可以自己修改
 threads=auto
#线程是进程的最小工作单位,他两的区别,线程共享资源,进程独享资源
[server1]  #指定服务器的IP地址,有两台所以要写两次,并且名称不能一致,其他为默认配置
  type=server
  address=192.168.4.51
  port=3306
  protocol=MariaDBBackend
[server2]  #定义服务器的IP地址
  type=server
  address=192.168.4.52
  port=3306
  protocol=MariaDBBackend
  
  [MariaDB-Monitor]   #监视进程
  type=monitor
  module=mariadbmon
  servers=server1,server2    #数据库服务器列表
  user=maxscalemon     #使用哪个用户执行这个程序,使用哪个用户,需要到数据库服务器进行相应的授权,监视server1,sever2
  password=123456
  monitor_interval=2000   #多长时间查看一次,默认单位毫秒
#[Read-Only-Service]    #只读服务的配置
 # type=service               #我们注释掉这个配置,因为我们希望在访问时,既可以读也可以写
  #router=readconnroute
  #servers=server1
  #user=myuser
  #password=mypwd
  #router_options=slave
  [Read-Write-Service]     #定义读写服务
  type=service
  router=readwritesplit    #读写分离用户
  servers=server1,server2
  user=maxscalerouter    #路由用户,用来验证监视用户(客户端连接用户)是否存在
  #我们使用客户端连接数据库,MySQL代理怎样知道你当前登录的用户是否存在,使用这个用户去查看use表
  password=123456
  
  [MaxAdmin-Service]   #管理服务
  type=service
  router=cli    #命令行
  
  #[Read-Only-Listener]   #定义只读的端口,因为上面我们不需要这个选项注释掉,这里也需要注释
  #type=listener
  #service=Read-Only-Service
  #protocol=MariaDBClient
  #port=4008
  
  [Read-Write-Listener]  #监听读写服务的端口
  type=listener
  service=Read-Write-Service
  protocol=MariaDBClient
  port=4006
  
  [MaxAdmin-Listener]    #管理服务端口号,如果不想让他选择默认,也可以进行添加
  type=listener
  service=MaxAdmin-Service
  protocol=maxscaled
  #socket=default
  port=4016    #自定义端口

3)配置数据库服务器

添加相应的用户

添加监控用户:maxscalemon

添加路由用户:maxscalerouter

#在主/从服务器创建授权用户192.168.4.51
mysql -uroot -p123456
#replication slave   监控主从的状态是否正常
#replication client   监控主从的服务是否运行
grant replication slave,replication client on *.* to maxscalemon@"%" identified by "123456";
grant select on mysql.* to maxscalerouter@"%" identified by "123456";
#因为是主从复制,所以在主服务上配置,从服务器也会同步相应数据
select user,host from mysql.user;  #查看用户
#192.168.4.52
mysql -uroot -p123456 -e"select user,host from mysql.user" #查看是否同步成功

4)启动代理服务

#192.168.4.51
maxscale -f /etc/maxscale.cnf
ls /var/log/maxscale   #maxscale软件的日志信息,如果没有启动可以查看错误信息
ps -C maxscale   #查看进程信息
ss -lnutp | grep maxscale   #查看端口信息

MaxScale cannot be run as root. Failed to write child process message!

如果启动抱以上错误:可以使用以下方式解决

maxscale -f /etc/maxscale.cnf -U maxscale 指定启动用户名
maxscale -f /etc/maxscale.cnf -U maxscale maxscalemon

5)查看服务信息

验证配置 

1)在代理服务器本机连接管理服务,查看监控信息

#在代理服务器本机访问管理
#maxadmin -uadmin -pmariadb -P端口  默认用户admin默认密码,默认密码maridb
maxadmin -uadmin -pmariadb -P4016
list servers  #查看监控信息,调用的是 [MariaDB-Monitor]模块

2)在客户端连接代理服务器57访问数据

在连接之前先添加相应的授权用户

#192.168.4.51
mysql -uroot -p123456
create database db7;
create table db7.a (id int);
grant select,insert on db7.* to jim@"%" identified by "123456";
#192.168.4.3
mysql -h 192.168.4.57 -P4006 -ujim -p123456
select * from db7.a;
insert into db7.a values(100);
select * from db7.a;

3)验证是否实现了数据的读写分离

在从服务器52本机进行数据插入。

因为52是从服务器所以插入52的数据并不会同步到51

#192.168.4.52
mysql -uroot -p123456
insert into db7.a values(120);
select * from db7.a;

在主服务器上查看

在客户端重新连接,重新查看表里的内容

mysql -h 192.168.4.57 -P4006 -ujim -p123456
select * from db7.a;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • mysql中的json处理方案

    mysql中的json处理方案

    这篇文章主要介绍了mysql中的json处理方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • mysql for update是锁表还是锁行实例详解

    mysql for update是锁表还是锁行实例详解

    在并发一致性控制场景中,我们常常用for update悲观锁来进行一致性的保证,但是如果不了解它的机制,就进行使用,很容易出现事故,比如for update进行了锁表导致其他请求只能等待,从而拖垮系统,这篇文章主要介绍了mysql for update是锁表还是锁行操作,需要的朋友可以参考下
    2024-03-03
  • ubuntu系统中Mysql ERROR 1045 (28000): Access denied for user root@ localhost问题的解决方法

    ubuntu系统中Mysql ERROR 1045 (28000): Acces

    这篇文章主要介绍了ubuntu系统安装mysql登陆提示 解决Mysql ERROR 1045 (28000): Access denied for user root@ localhost问题,需要的朋友可以参考下
    2017-05-05
  • mysql存储过程详解

    mysql存储过程详解

    我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它
    2012-07-07
  • mysql出现ERROR 1819 (HY000)的解决方法

    mysql出现ERROR 1819 (HY000)的解决方法

    这篇文章主要为大家详细介绍了mysql出现ERROR 1819 (HY000)的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • mac 装5.6版本mysql 设置密码的简易方法

    mac 装5.6版本mysql 设置密码的简易方法

    这篇文章主要介绍了mac 装5.6版本mysql 设置密码的简易方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • MySQL数据库迁移全过程

    MySQL数据库迁移全过程

    本文详细解析了MySQL数据库迁移的整个过程,包括准备工作、迁移方法、注意事项和优缺点,文章介绍了三种常见的迁移方法:使用mysqldump导出和导入、使用ibd文件迁移和使用目录整体迁移,每种方法都有其优缺点,选择合适的方法取决于具体的迁移需求和环境
    2025-02-02
  • mysql日志文件General_log和Binlog开启及详解

    mysql日志文件General_log和Binlog开启及详解

    MySQL中的数据变化会体现在上面日志中,下面这篇文章主要给大家介绍了关于mysql日志文件General_log和Binlog开启及详解的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • MySQL5.7.18下载和安装过程图文详解

    MySQL5.7.18下载和安装过程图文详解

    本文通过图文并茂的形式给大家介绍了MySQL5.7.18下载和安装过程,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-07-07
  • 聊聊MySQL中的参数

    聊聊MySQL中的参数

    这篇文章主要介绍了MySQL中的参数是什么,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-09-09

最新评论