前言
之前搞读写分离是用的商业产品,最近研究了下proxysql感觉还不错,后面做了下部署测试,下面是测试步骤,包含mysql主从的配置的步骤。里面碰到的坑和问题,都有解决方案。
一、部署MySQL
1、到MySQL官网下载mysql安装包,我这里用的是mysql8.0:mysql-8.0.24-el7-x86_64.tar.gz
2、解压安装包到/usr/local目录下
tar -xvf mysql-8.0.24-el7-x86_64.tar.gz -C /usr/local/
mv mysql-8.0.24-el7-x86_64/ mysql
3、创建用户组和用户并修改权限
groupadd mysql
useradd -r -g mysql mysql
chown mysql:mysql -R /usr/local/mysql # 修改权限
4、创建数据目录,存放MySQL数据
cd / # 进入根目录
mkdir -p data # 创建数据文件夹
cd data/ # 进入数据文件夹
mkdir -p mysql/ # 创建mysql文件夹
chown mysql:mysql -R /data/mysql # 修改权限
5、卸载Centos7自带的Maridb数据库
rpm -qa | grep mariadb # 搜索相关的软件包
rpm -e --nodeps mariadb* # 搜索出来的软件包进行卸载
6、修改mysql配置文件my.cnf ================》注意本次没有使用/etc/my.cnf,把my.cnf放到了自定义目录下。

7、初始化mysql
chmod 777 /usr/local/mysql/my.cnf # 修改权限
/usr/local/mysql/bin/mysqld --initialize --defaults-file=/usr/local/mysql/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql # mysql初始化,
执行初始化报错,看了八遍并没有发现写错了,网上搜索了下发现,这个defaults-file必须放到mysqld的后面,而且必须紧跟在后面,放在其他任何地方都不行。

调整位置后重新初始化成功:
8、修改环境变量
vi /etc/profile # 配置环境变量
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile
9、设置systemd管理mysql

10、启动mysql并修改root密码
systemctl start mysql
mysql -u root -p #密码在error log中
alter user root@localhost identified by 'root'; ==========》在mysql8.0中,set password的方法已经不好使了。
flush privileges;
二、建立主从复制
1、参考以上步骤部署两套mysql(备库设置read only,server-id要与主库不一致,可以选择ip地址的最后一位)
2、在主库新建复制账号
create user repl identified by '123456';
grant replication slave on *.* to 'repl'@'%' identified by '123456';
3、备份主库的数据,(如果使用了gtid,在进行mysqldump的时候要加--set-gtid-purged=on!!!!!)
mysqldump -uroot -proot --single-transaction --master-data=2 --hex-blob --triggers --routines --events --all-databases > all_db.sql
4、拷贝到备库恢复
mysql -uroot -p <all_db.sql
5、在备库执行复制命令
change master to master_host='10.0.248.21', master_port=3306, master_user='repl', master_password='123456', master_log_file='mysql-bin.000004', master_log_pos=206868130;
6、启动复制
start slave;
三、部署ProxySQL
1、git上下载安装包
https://github.com/sysown/proxysql/releases
2、安装依赖包,(需要配置互联网yum源,对于生产环境如果无法连接外网yum源,可以在测试环境利用命令yum install --downloadonly --downloaddir=路径 安装包名 下载了rpm包,传到生产环境安装)
yum install perl perl-DB* -yum
3、安装proxysql

4、确认版本

6、登录
启动了6032和6033两个端口,默认管理端口是6032,客户端服务端口是6033,默认的用户名密码都是 admin,通过mysql的客户端可以登录。

7、配置后端server
这一步是把后端的数据库的角色加入到proxysql里面。weight字段是权重,可以不写。
insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(100, '192.168.56.101', 3306, 1, 'db0,ReadWrite'),(101, '192.168.56.102', 3306, 1, 'db0,ReadOnly');
8、添加复制关系
这一步是要把Monitor模块监控后端的read_only值,按照read_only的值将节点自动移动到读/写组。

9、添加监控用户
在数据库里建一个monitor用户给proxysql用。

10、proxysql指定default_hostgroup
这一步是在proxysql里添加访问后端db的用户,把你的应用用户放进去就ok。

11、proxysql添加监控用户

12、proxysql全局变量生效
以上添加的用户,server都需要加载到proxysql的内存实时生效,并保存到磁盘上。

13、proxysql添加路由
通过正则匹配,添加相应的路由规则,我这个示例中是把select路由到备机,update、insert、delete路由到主机。

14、查询后端db状态
SELECT * FROM mysql_servers;
15、查看路由执行情况
SELECT hostgroup hg, sum_time, count_star, digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;
16、查看路由规则
SELECT rule_id, match_digest, match_pattern, replace_pattern, cache_ttl, apply FROM mysql_query_rules
17、通过proxysql连接数据库
mysql -uroot -p -h127.0.0.1 -P6033




