公司有使用默认安装目录的ProxySQL跑业务. 在升级2.0.8 至 2.0.12的时候发现卸载2.0.8后这些使用默认方式安装的ProxySQL实例就会被关闭.
原因是rpm包安装和卸载前后执行了一些动作
1 | [root@bj1-mysql-manager-prod-01 tmp]# rpm --scripts -qp /tmp/proxysql-2.0.8-1-centos7.x86_64.rpm |
安装
preinstall
1 | if [ -f /var/lib/proxysql/PROXYSQL_UPGRADE ]; then |
这就是看如果有PROXYSQL_UPGRADE
这个文件就删除掉,这个文件主要是rpm -Uvh升级时会用到
postinstall
1 | # Create relevant user, directories and configuration files |
创建目录, 创建用户, 设置开机启动proxysql.service.
这里主要就是一点, 用systemd管理rpm包安装的proxysql
卸载
preuninstall
1 | # When uninstalling always try stop the service, ignore failures |
这里就是把rpm包安装的proxysql实例给关了. 所有如果用默认方式安装的ProxySQL实例, 卸载rpm包的时候这个实例就会被关闭, 所以不建议用这个实例, 应该自己创建, 并且建议把rpm包生成的配置文件, systemd都mv改名, 否则机器重启默认实例启动会占用6032,6033端口
preuninstall
1 | preuninstall scriptlet (using /bin/sh): |
这里, 总之就是如果是写在就删了proxysql.service文件后$1
我不知道咋取的systemctl daemon-reload
另外,为提供操作中可参考的信息,rpm还提供了一种信号机制:不同的操作会返回不同的信息,并放到默认变量$1中。
0代表卸载、1代表安装、2代表升级
如果是升级则会再启动
可以使用rpm -Uvh升级吗?
ansible yum可以完成升级工作, 但不要使用ansible yum升级, 使用此方式升级2.0.8 - 2.0.12会自动安装并启动一个proxysql1
2proxysql 125223 1 0 21:17 ? 00:00:00 /usr/bin/proxysql --idle-threads -c /etc/proxysql.cnf
proxysql 125225 125223 0 21:17 ? 00:00:00 /usr/bin/proxysql --idle-threads -c /etc/proxysql.cnf
这个proxysql会占用6032 和 6033 端口. 这种方式实际上应该是使用rpm -Uvh完成的升级, 我手动使用rpm -Uvh升级效果和ansible yum是一致的
应该通过shell rpm -e 2.0.8 再rpm -ivh 2.0.12进行升级, 这种方式不影响(影响rpm默认安装的proxysql实例,因为会关闭)已经运行的proxysql进程 (文件句柄没有释放)1
2
3
4
5
6
7[root@centos-1 data]# lsof | grep delete| grep proxysql
proxysql 118312 root txt REG 253,0 36156384 101426928 /usr/bin/proxysql (deleted)
proxysql 118313 root txt REG 253,0 36156384 101426928 /usr/bin/proxysql (deleted)
proxysql 118313 118315 root txt REG 253,0 36156384 101426928 /usr/bin/proxysql (deleted)
proxysql 118313 118316 root txt REG 253,0 36156384 101426928 /usr/bin/proxysql (deleted)
proxysql 118313 118317 root txt REG 253,0 36156384 101426928 /usr/bin/proxysql (deleted)
proxysql 118313 118318 root txt REG 253,0 36156384 101426928 /usr/bin/proxysql (deleted)
另外升级后请1
2
3mv /etc/proxysql.cnf /etc/proxysql.cnf.bak
mv /etc/systemd/system/proxysql.service /etc/systemd/system/proxysql.service.bak
mv /etc/systemd/system/proxysql-initial.service /etc/systemd/system/proxysql-initial.service.bak
目前上海的proxysql我都是采用这种方式升级
结论
检查是否有rpm默认安装的proxysql实例, 如果有, 请先升级这个proxysql实例!