mysql读写分离

mysql读写分离

  • 原理
    让主数据库(master)处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库(slave)处理SELECT查询操作。

前置准备

主机说明
192.168.4.51主数据库
192.168.4.52从数据库
192.168.4.1代理服务器
192.168.4.53客户端

主从数据库搭建

#192.168.4.51
vim /etc/my.cnf
==========================
[mysqld]
server_id=51
log-bin=db51
===================================
systemctl restart mysqld

mysql -uroot -p
	grant replication slave on *.* to look@'%' identified by '123abc...A'
	exit

#192.168.4.52
vim /etc/my.cnf
=============================
[mysqld]
server_id=52
==================================
systemctl restart mysqld

mysql -uroot -p
	change master to 
	master_host='192.168.4.51',
	master_user='look',
	master_password='123abc...A',
	master_log_file='db51.000001',
	master_log_pos='154';
	
	start slave ;
	show slave status;  #查看IO SQL进程是否正常
	
	

#4.51测试
mysql -uroot -p
	create database aa;

#4.52查看
mysql -uroot -p
	show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| aa                 | #从库上有aa数据库了
| db1                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

配置maxscale代理服务器

#4.1
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=123abc...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=123abc…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     #手动添加,不指定时使用的是默认端口在启动服务以后可以知道默认端口是多少
================================================================================
主从授权用户
#主从同步  所以只要在主库上配置即可
#4.51
mysql -uroot -p
	grant replication slave,replication client on *.* to maxscalemon@'%' identified by '123abc...A';
	grant select on mysql.* to maxscalerouter@'%' identified by '123abc...A';
	
	create database gamedb;#创建测试数据库
	create talbe gamedb.a(id int);#创建表
	grant select,insert on gamedb.* to yaya666@'%' identified by '123abc...A';
	
	
#分别配置代理服务器所需的路由角色权限,监控角色权限的

#4.52查看权限是否成功设置
mysql -uroot -p
	select user,host from mysql.user where user like 'maxscale%'
+----------------+------+
| user           | host |
+----------------+------+
| maxscalemon    | %    |
| maxscalerouter | %    |
+----------------+------+


#代理4.1测试授权
yum -y  install mariadb  #安装提供mysql命令的软件包
mysql -h 192.168.4.51 -umaxscalemon -p123abc…A
mysql -h 192.168.4.52 -umaxscalemon -p123abc…A
mysql -h 192.168.4.51 -umaxscalerouter -p123abc…A
mysql -h 192.168.4.52 -umaxscalerouter -p123abc…A
启动服务器代理服务
maxscale -f /etc/maxscale.cnf   启动服务代理服务
ps -C maxscale  #查看进程
PID TTY          TIME CMD
4004 ?        00:00:02 maxscale

ss -nutlp | grep 4006	#查看读写分离端口
ss -nutlp | grep 4016    #查看管理服务端口
查看服务是否成功
#4.1
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
-------------------+-----------------+-------+-------------+--------------------



#4.53客户端访问代理服务
mysql -h192.168.4.1 -uyaya666 -p123abc...A
	#成功登陆  可以执行操作了
	show user();	
+----------------------+
| user()               |
+----------------------+
| yaya666@192.168.4.1  |  #登录是在代理服务器4.1登录
+----------------------+

验证读写分离

  • 从服务器上插入数据 客户端查询的到,主服务器上没有 证明读分离
  • 从服务器stop slave 客户端插入数据 查询主从服务器 只在主上查询到 证明写分离
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值