MySQL数据读写分离
作者:互联网
MySQL数据读写分离
数据读写分离:把客户端的访问数据的查询请求和写数据的请求分别给不同的数据库服务器处理。
数据读写分离实现方式:
1 通过程序实现: 明确告诉程序员查询操作和写数据的操作必须连接固定的数据库服务器
2 架设服务结构实现: 使用数据读写分离服务的软件(mysql中间件):
maxscale
mysql-proxy
mycat
部署mysql 一主一从 主从同步结构
1.1.1 配置主库192.168.4.51
1.1.2 配置从库192.168.4. 52
1.2 配置MySQL代理服务器 192.168.4.57
systemctl stop mysqld
systemctl disable mysqld
装包
rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm
修改配置文件
cp /etc/maxscale.cnf /etc/maxscale.cnf.bak
]# vim /etc/maxscale.cnf
[maxscale] 定义服务启动后 线程的数量
threads=auto[server1] 定义主库服务器ip地址及端口号
type=server
address=192.168.4.51
port=3306
protocol=MySQLBackend
[server2] 定义从库服务器ip地址及端口号
type=server
address=192.168.4.52
port=3306
protocol=MySQLBackend[MySQL Monitor] 定义maxscale服务监视的数据库服务器
type=monitor
module=mysqlmon
servers=server1, server2 监视的数据库服务器
user=monitoruser 监控用户名
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=scaluser 路由用户名
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
根据配置文件做相应的配置
1 在2台数据库服务器上创建监控用户monitoruser 和 路由用户scaluers
在主库51上添加用户
mysql> grant replication slave, replication client on *.* to monitoruser@"%"
-> identified by "123qqq...A";mysql> grant select on mysql.* to scaluser@"%"
-> identified by "123qqq...A";mysql> select host,user from mysql.user where user in ("monitoruser","scaluser");
在从库52上查看
mysql> select host,user from mysql.user where user in ("monitoruser","scaluser");
+------+-------------+
| host | user |
+------+-------------+
| % | monitoruser |
| % | scaluser |
+------+-------------+
在57主机测试数据库的授权用户
mysql -h192.168.4.51 -umonitoruser -p123qqq...A
mysql -h192.168.4.52 -umonitoruser -p123qqq...A
mysql -h192.168.4.51 -uscaluser -p123qqq...A
mysql -h192.168.4.52 -uscaluser -p123qqq...A
启动服务
[root@host57 ~]# netstat -utnlp | grep :4006
[root@host57 ~]# netstat -utnlp | grep :4016
[root@host57 ~]# maxscale -f /etc/maxscale.cnf 启动服务
[root@host57 ~]# killall -9 maxscale 停止服务
查看服务信息
[root@host57 ~]# ps -C maxscale
PID TTY TIME CMD
4863 ? 00:00:00 maxscale
[root@host57 ~]# netstat -utnlp | grep maxscale
tcp6 0 0 :::4016 :::* LISTEN 4863/maxscale
tcp6 0 0 :::4006 :::* LISTEN 4863/maxscale
在maxscale本机连接管理端口查看监控状态
[root@host57 ~]# maxadmin -uadmin -pmariadb -P4016
MaxScale> help
MaxScale>
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.4.51 | 3306 | 0 | Master, Running
server2 | 192.168.4.52 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------MaxScale> exit
1.3 客户端测试
1.3.1 在2台数据库服务器上添加客户端访问数据的连接用户
在主库授权访问数据的连接用户jim 密码123qqq...A
mysql> create database db7;
mysql> create table db7.t1(name char(10));
mysql> grant select ,insert on db7.* to jim@"%" identified by "123qqq...A";
mysql> select host,user from mysql.user where user="jim";
+------+------+
| host | user |
+------+------+
| % | jim |
+------+------+
1.3.2 客户端50 连接代理服务器192.168.4.57 查询数据或存储数据
[root@mysql50 ~]# mysql -h192.168.4.57 -P4006 -ujim -p123qqq...A
mysql> select * from db7.t1;
mysql> insert into db7.t1 values("tom");
mysql> select * from db7.t1;
mysql> exit
52本机向表里插入记录B
mysql -uroot -p密码
mysql> insert into db7.t1 values(“BBBBBB”);
50本机向表里插入记录B
mysql -h192.168.4.57 -P4006 -ujim -p123qqq...A
mysql> select * from db7.t1; 显示的B记录说明是在从库查询的记录
标签:...,读写,分离,maxscale,192.168,user,mysql,MySQL,type 来源: https://blog.csdn.net/weixin_45273572/article/details/100516139