MySQL读写分离 --maxscale
Maxscale部署
构建思路
1、部署MySQL一主一从结构一主服务器:192.168.1.130 -从服务器:192.168.1.99(前面已部署好主从配置具体可参考: MySQL主从配置)
2、部署MysQL代理服务器(Maxscale)192.168.1.130 -装包、修改配置文件、启动服务
3、测试配置-客户端连接代理服务访问数据
主服务器 | 192.168.1.130 |
从服务器 | 192.168.1.99 |
下载安装中间件
中间件下载地址:https://dlm.mariadb.com/browse/mariadbmaxscale/49/789/?_ga=2.180365351.1460156067.1640182534-1832063011.1640182534
安装中间件:
rpm -ivh maxscale-2.3.20-1.centos.7.x86_64.rpm
master主库创建用户
已经实现主从复制的前提下:主库创建的用户,能同步到从库上
创建监控用户
create user maxscale_monitor@'%' identified by "Admin@123456";
grant replication slave, replication client on *.* to maxscale_monitor@'%';
创建路由用户
create user maxscale_route@'%' identified by "Admin@123456"; GRANT SELECT ON mysql.user TO maxscale_route@'%'; GRANT SELECT ON mysql.db TO maxscale_route@'%'; GRANT SELECT ON mysql.tables_priv TO maxscale_route@'%'; GRANT SHOW DATABASES ON *.* TO maxscale_route@'%';
配置maxscale
vim /etc/maxscale.cnf [maxscale] #开启线程个数,默认是1,设置为auto会通cpu核数相同 threads=auto #相关目录设置 #basedir=/usr/local/maxscale/ #指定日志文件 默认在/var/log/maxscale/maxscale.log logdir=/usr/local/mysql/maxscale/logs datadir=/usr/local/mysql/maxscale/data piddir=/usr/local/mysql/maxscale/logs cachedir=/usr/local/mysql/maxscale/cache [server1] #定义服务器IP地址 type=server address=192.168.1.130 port=3306 protocol=MariaDBBackend [server2] #因为有俩个服务器,复制上面的配置 type=server address=192.168.1.99 port=3306 protocol=MariaDBBackend [MariaDB-Monitor] #监视进程 type=monitor module=mariadbmon servers=server1,server2 #数据库服务器列表 user=maxscale_monitor #使用哪个用户执行这个程序,使用哪个用户,需要到数据库服务器进行相应的授权,监视server1,sever2 password=Admin@123456 monitor_interval=2000 #2000毫秒查看一次 #[Read-Only-Service] #只读服务配置 我们是可读可写 所以注释 #type=service #router=readconnroute #servers=server1 #user=myuser #password=mypwd #router_options=slave [Read-Write-Service] #定义读写服务 type=service router=readwritesplit servers=server1,server2 #读写分离用户 user=maxscale_route #路由用户,用来验证监视用户(客户端连接用户)是否存在 #我们使用客户端连接数据库,MySQL代理怎样知道你当前登录的用户是否存在,使用这个用户去查看use表 password=Admin@123456 [MaxAdmin-Service] #管理服务 type=service router=cli #命令行 #[Read-Only-Listener] #定义只读的端口所以我们注释掉 #type=listener #service=Read-Only-Service #protocol=MariaDBClient #port=4008 [Read-Write-Listener] #监听读写服务端口 type=listener service=Read-Write-Service protocol=MariaDBClient port=4006 [MaxAdmin-Listener] #管理服务端端口号,可以自定义也可以选择默认 type=listener service=MaxAdmin-Service protocol=maxscaled port=4016 #自定义端口 #socket=default
启动maxscale
创建maxscale相关目录,所属用户是mysql
mkdir /usr/local/mysql/maxscale
mkdir /usr/local/mysql/maxscale/data
mkdir /usr/local/mysql/maxscale/logs
mkdir /usr/local/mysql/maxscale/cache
chown -R mysql:mysql /usr/local/mysql/maxscale
指定mysql用户启动
maxscale --config=/etc/maxscale.cnf --user=mysql
netstat -ntelp
ps -C maxscale #查看进程信息
ss -lnutp | grep maxscale #查看端口信息
登录maxscale管理器
[root@localhost local]# maxadmin -uadmin -pmariadb -P4016 MaxScale> list servers Servers. -------------------+-----------------+-------+-------------+-------------------- Server | Address | Port | Connections | Status -------------------+-----------------+-------+-------------+-------------------- server1 | 192.168.1.130 | 3306 | 4 | Master, Running server2 | 192.168.1.99 | 3306 | 1 | Slave, Running -------------------+-----------------+-------+-------------+--------------------
测试连接
方法一(建议使用此方法比较直观):
1.可以在从库中新增一条数据
2.登录主库进行查询如果查询不到则成功
3.使用下面测试账号登录 mysql -urtest -pAdmin@123456 -h 192.168.1.130 -P 4006 查询在从库新增的数据,查询到的话则证明服务搭建完成
写操作走主库,读操作走从库,能实现读写分离
方法二:
创建测试账户
create user 'rtest'@'%' identified by 'Admin@123456'; ALTER USER 'rtest'@'%' IDENTIFIED WITH mysql_native_password BY 'Admin@123456'; grant select,insert on *.* to 'rtest'@'%'; #注意:这里只给了查询和新增的权限,授权所有权限可以使用下面这条语句 #grant all privileges on *.* to 'rtest'@'%'; flush privileges;
连接maxscale
mysql -urtest -pAdmin@123456 -h 192.168.1.130 -P 4006
查看服务器名
Select @@hostname;
开启事务,maxscale切换到master
start transaction;
回滚
rollback;
拓展:
#事务:一组操作,要么全成功要么全失败
1开启事务:strat transaction
2回滚事务,即撤销指定sql语句(只有insert /delete /update):rollback
3提交事务 提交未存储事务:commit
保留点,事务处理中设置的点:savepoint
1start transaction
永久修改主机名 (修改后重启服务器生效)
在 Linux 系统中如果想要永久修改主机名,那么必须将新主机名写入文件。但需要注意 CentOS 版本的不同所需要的文件是不一样的:
如果是 CentOS 7 以下(不包括 7)的版本,则需要修改 /etc/sysconfig/network 文件。即修改 HOSTNAME=新主机名 。
如果是 CentOS 7 及以上(包括 7)的版本,则需要修改 /etc/hostname 文件。直接填入新主机名即可。
注:CentOS 7 及以上版本也是有 /etc/sysconfig/network 文件的,但是没有 HOSTNAME 选项,即使是添加也不会生效。
如果你是一匹千里马,那么请做自己的伯乐。