一.Mysql读写分离
1.1Mysql数据库读写分离:客户端访问数据的查询请求和写请求分别给不同的数据服务器处理
查询 select
写 insert update delete
1.2为什么要数据读写分离?
减轻一台数据库服务器的并发访问压力,提高数据库服务器利用率
1.3如何实现读写分离?
通过程序实现(让程序员写代码实现)
通过安装软件提供的服务实现(中间件)
使用mysql中间件提供的服务实现:mycat mysql-proxy maxscale
1.4配置数据读写分离?(maxscale + mysql一主一从同步)
192.168.4.50 ----client
192.168.4.51----主
192.168.4.52-----从
192.168.4.57—读写分离
Client50 maxscale
mysql-sever51(写) mysql-server52(读)
master slave
配置步骤:
1.部署mysql一主一从同步结构
(1)配置主服务器51,具体配置如下:
启用binlog日志----用户授权----查看binlog日志信息
(2)配置从服务器52,具体配置如下:
指定server_id----指定主服务器信息----启动slave进程----查看程序
2.配置数据读写分离服务器192.168.4.57
2.1拷贝软件包到57主机
]#scp maxscale-2.1.2-1.rhel.7.x86_64.rpm [email protected]:/root
2.2安装软件
]# rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm
2.3修改配置文件
]# vim /etc/maxscale.cnf
[maxscale]
threads=auto
[server1]----------定义第一台数据库服务器
type=server
address=192.168.4.51
port=3306
protocol=MySQLBackend
[server2]--------定义第二台数据库服务器
type=server
address=192.168.4.52
port=3306
protocol=MySQLBackend
[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2
user=scalemon
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=scaleroute
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
]# sed -i ‘/^#/d’ /etc/maxscale.cnf //把有注释的行删掉
]#cat /etc/my.cnf
3.配置用户授权(在主库192.168.4.51)
mysql> grant replication slave, replication client on . to scalemon@"%" identified by “123qqq…A”;
mysql> grant select on mysql.* to scaleroute@"%" identified by “123qqq…A”
mysql> select user,host from mysql.user ;
4.在57上验证用户授权
]# yum -y install mariadb
]# mysql -h192.168.4.54 -uscaleroute -p123qqq…A
]# mysql -h192.168.4.54 -uscalemon -p123qqq…A
]# mysql -h192.168.4.53 -uscalemon -p123qqq…A
]# mysql -h192.168.4.53 -uscaleroute -p123qqq…A
4.1.启动服务
]# maxscale -f /etc/maxscale.cnf
]# ps -C maxscale
]# ss -untlp | grep maxscale
]# killall -9 maxscale
]# maxscale -f /etc/maxscale.cnf
4.2在本机访问管理管端口查看监控状态
]#maxadmin -P端口 -u用户 -p密码
]#maxadmin -P4016 -uadmin -pmariadb
5.客户端连接57访问数据
mysql> create database db8; //在51创建库
mysql> create table db8.t1(id int);
mysql> grant select,insert on db8.* to yaya@"%" identified by “123qqq…A”;
]# mysql -h192.168.4.57 -P4006 -uyaya -p123qqq…A //客户端50访问要加端口
mysql> show grants; //客户端查看自己的授权
mysql> select * from db8.t1; //对db8库进行查看和添加
mysql> insert into db8.t1 values(1111);
mysql> insert into db8.t1 values(2222);
mysql> select * from db8.t1;
51和52可以看到一样的数据
51 ~]# mysql -uroot -pabc123 -e “select * from db8.t1”;
52 ~]# mysql -uroot -p123456 -e “select * from db8.t1”;
52 ~]# mysql -h192.168.4.57 -P4006 -uyaya -p123qqq…A
mysql> select * form db8.t1;
mysql> insert into db8.t1 values(333); //在从库上再添加数据
mysql> select * from db8.t1;
51 ~]# mysql -uroot -pabc123 -e “show master status”
51 ~]# mysql -uroot -pabc123 -e “select * from db8.t1” //主库可以看到从库添加数据