一、数据读写分离
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");
然后查看服务器
注意当服务启动失败是,如创建的数据库目录下有文件,需要先删除