数据读写分离 、 MySQL多实例

一、数据读写分离

在这里插入图片描述
在这里插入图片描述

1.1 部署maxscale服务

[root@ceph2 ~]# yum -y install maxscale-2.1.2-1.rhel.7.x86_64.rpm

1.2 更改maxscale配置文件

56设备上

vim /etc/maxscale.cnf
[maxscale]           #定义线程个数
threads=auto

[server1]             #定义数据库服务器
type=server
address=192.168.4.51   #master主机IP地址
port=3306
protocol=MySQLBackend

[server2]              #定义数据库服务器
type=server          
address=192.168.4.52   #slave主机IP地址
port=3306
protocol=MySQLBackend

[MySQL Monitor]        #定义要监视的数据库节点
type=monitor
module=mysqlmon
servers=server1,server2  #主、从数据库的主机名
user=myuser              #监控用户        
passwd=123qqq...A        #密码
monitor_interval=10000

[Read-Write Service]      #定义读写分离的数据库节点
type=service
router=readwritesplit
servers=server1,server2   #主、从数据库的主机名
user=myuser1              #路由用户
passwd=123qqq...A         #密码
max_slave_connections=100%

[MaxAdmin Service]        #定义管理服务
type=service
router=cli

[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                   #定义管理服务使用端口

监控账号:是监控主从服务的
需要的权限:replication slave, replication client ;
replication slave:用于监视和管理复制账号的权限;
replication client :确定复制状态(如show master status等等)

路由账号:是检查客户端访问服务的用户是否正确(回到数据库上去检查有没有该用户名)
需要权限:select

在数据库服务器(51、52)上的配置

mysql> grant replication slave ,replication client on *.* to myuser@"%" identified by "123qqq...A"; #监控账号权限
mysql> grant select on mysql.* to myuser1@"%" identified by "123qqq...A";  #路由权限

56设备启动服务

[root@ceph2 ~]# maxscale -f /etc/maxscale.cnf  #启动服务
[root@ceph2 ~]# ss -untlp | grep maxs  #查看端口和进程号
[root@ceph2 ~]# kill -q  “进程号” #关掉服务
[root@ceph2 ~]# maxadmin -uadmin -pmariadb -P4016  #登录查看服务主从服务器的状态

1.3 测试

1.在从服务器上新建表(不会同步到主服务器上)(查询访问)

52设备
mysql>  create database db6;
mysql> create table db6.user(name char(15));

使用客户端查看(数据库需要提供授权账号)

[root@client ~]# mysql -h192.168.4.56 -P4006 -ujim -p123qqq...A
mysql> select * from db6.user;  #可以看到数据,说明访问的从服务器

2.让客户端写入(写入访问)

51设备
mysql> grant all on *.* to  jim10@"%" identified by "123qqq...A"

56设备客户端

[root@client ~]# mysql -h192.168.4.42 -P4006 -ujim10 -p123qqq...
mysql> create database dd1;  #若52设备也就是从服务器上有dd1库说明,客户端时先访问的主服务器,然后再又主服务器复制给从服务器上

二、 MySQL多实例

在这里插入图片描述

2.1 安装软件

[root@proxy ~]# yum -y install  libaio  #依赖包
[root@proxy ~]# tar -xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz 
[root@proxy ~]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@proxy ~]# PATH=/usr/local/mysql/bin:$PATH  #临时配置,关掉终端就会失效
[root@proxy ~]# vim /etc/bashrc    #永久配置
export PATH=/user/local/mysql/bin:$PATH 

2.2 修改配置文件

[root@proxy ~]# vim /etc/my.cnf 
[mysqld_multi]	  #多实例服务的运行配置
mysqld=/usr/local/mysql/bin/mysqld_safe  #指定进程文件路径
mysqladmin=/usr/local/mysql/bin/mysqladmin  #指定管理命令路径
user=root



[mysqld1]  #实列进程名称
port=3307  #端口号
datadir=/dir1   #数据库目录,要手动创建 
socket=/dir1/mysql1.sock   #指定sock文件的路径和名称
pid-file=/dir1/mysqld1.pid  #进程pid号文件位置
log-error=/dir1/mysqld1.err  #错误日志位置

[mysqld2]
port=3308
datadir=/dir2
socket=/dir2/mysql2.sock
pid-file=/dir2/mysqld2.pid
log-error=/dir2/mysqld2.err

[mysqld3]
port=3309
datadir=/dir3
socket=/dir3/mysql3.sock
pid-file=/dir3/mysqld3.pid

2.3 启动服务

[root@proxy ~]# mysqld_multi start 1  #启动实列1,最后一行可以看到密码
[root@proxy ~]# mysql -uroot -p'LQpI7vcju9=U' -S /dir1/mysql1.sock 
mysql> alter user root@'localhost' identified by "123456";  #修改初始密码

实列2与与实列3照以上操作

[root@proxy ~]# ss -auntlp | grep mysql  #查看启动的端口
[root@proxy ~]#  mysqld_multi  --user=root --password=123456  stop 1 #关闭服务

2.4 测试

允许客户端可以连接主机的实例1 服务对db1库有完全权限 且实例1可以 记录用户执行的SQL命令

服务器

[root@proxy ~]# vim /etc/my.cnf
[mysqld1]
.......
server_id=1
log_bin=ppp

[root@proxy ~]# mysql -uroot -p123456 -S /dir1/mysql1.sock
mysql> show master status;
mysql> grant all on db1.* to mao@"%" identified by "123456";

客户端

[root@proxy1 ~]# mysql -umao -p123456 -P3307 -h192.168.4.51 
mysql> create database db1;
mysql> create table db1.t1(name char(10));
mysql> insert into db1.t1 values ("mao");

然后查看服务器

注意当服务启动失败是,如创建的数据库目录下有文件,需要先删除

发布了25 篇原创文章 · 获赞 2 · 访问量 579

猜你喜欢

转载自blog.csdn.net/f5500/article/details/104434138
今日推荐