mysql的读写分离配置

前言

环境:CentOS 7.9 、mysql 5.7 已配置好master、salve主从复制

读写分离

在大规模、高并发的企业环境中,为了缓解数据库的访问压力,我们一般的解决办法是对数据库进行读写分离,即前端用户对数据的增删改访问的是master主库,对数据的读取检索访问的salve库,这样就能大大减缓master主库的访问压力。

读写分离常见的实现方式

1、业务代码的读写分离
需要开发工程师在业务代码中,判断数据操作是读还是写,读则连接salve从库进行操作,写则连接master从库进行操作。目前大部分语言的框架中都有关于配置mysql的读写分离,其基本含义就是,代码判断传入SQL语句是否包含select,包含则可以则认为该语句是读操作,则连接salve从数据库,否则连接master主库,代码还可以可以实现当从salve库连接不上时链接master主库来读。
2、通过数据库中间件代理的方式实现读写分离
在业务代码和数据库中,添加了一个数据库中间件(代理),即业务代码首先连接中间件服务器,由中间件服务器判断数据操作是读还是写,读则连接salve从库进行操作,写则连接master从库进行操作。常见的mysql中间件有很多,如mycat、mysql router、Atlas、Proxysql等,如下图所示:
在这里插入图片描述

方法一、读写分离

可以给开发人员提供2个不同的账号,如下:

master主库IP: 192.168.1.1	端口: 3306	数据库: web	用户名: web_w	密码: AAABBB001
授权: grant select,insert,update delete on 'web'.* to	'web_w'@'192.168.1.%'	identified by 'AAABBB001';

salve从库IP: 192.168.1.2	端口: 3306	数据库: web	用户名: web_r	密码: AAABBB001
授权: grant select on 'web'.* to	'web_r'@'192.168.1.%'	identified by 'AAABBB001';

此方法显然不够专业,但也能满足需求,只需开发在程序中DAL层调用不同的数据库用户即可。

方法二、读写分离

只给开发提供一个用户,即主从使用相同的用户账号,但授予不同的权限。

master主库IP: 192.168.1.1	端口: 3306	数据库: web	用户名: web	密码: AAABBB001
授权: grant select,insert,update delete on 'web'.* to	'web'@'192.168.1.%'	identified by 'AAABBB001';

此时,对salve从库撤销权限,如下:
revoke insert,update,delete on 'web'.* to	'web'@'192.168.1.%'	identified by 'AAABBB001';

或者忽略权限
在master主库配置文件/etc/my.cnf中[mysqld]下添加:
binlog-ignore-db = mysql					#等号两边有空格,指定mysql是因为mysql是储存权限的数据库
replication-ignore-db = mysql

方法三、设置salve从库只读

只给开发提供一个用户,即主从使用相同的用户账号,授予相同的权限,但设置salve从库为只读状态。

master主库IP: 192.168.1.1		端口: 3306		数据库: web		用户名: web		密码: AAABBB001
授权: grant select,insert,update delete on 'web'.* to	'web'@'192.168.1.%'	identified by 'AAABBB001';

此时配置salve从库只读:
vim /etc/mysql.cnf
[mysqld]
read-only

说明: read-only参数设置了salve从库只读,表示从库不允许被前端用户更新,但具有super权限的用户和来自线程的用户是具有对从库更新的权限的,如
root用户、主从复制的用户rep用户等.

企业中读写分离配置方案

我们可以在给开发人员提供一个web用户,限制master的权限的主从复制,同时为了保险还可以设置salve从库为只读状态,如下配置:

在master主库配置文件my.cnd中[mysqld]下添加:
binlog-ignore-db = mysql						#等号两边有空格,指定mysql是因为mysql是储存权限的数据库
replication-ignore-db = mysql

master主库创建用户并授权:
grant select,insert,update delete on 'web'.* to	'web'@'192.168.1.%'	identified by 'AAABBB001';

此时配置salve从库为只读read-only:
vim /etc/mysql.cnf
[mysqld]
read-only

疑问?

我们在master主库中的配置文件中添加了这两个参数binlog-ignore-db = mysql 和replication-ignore-db = mysql,那么master主库创建用户web的时候,从库有没有创建该用户呢?如果没有创建那么需要自己手动创建一个吗然后在设置从库为read-only只读吗?
欢迎回答。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值