说明
本篇文章仅是基于 k8s cronjob
备份mysql8.0+数据库,使用 Alpine Linux 作为基础镜像时遇到的问题做下简单的排坑,没有涉及到具体的部署细节,后面有时间再补上。
镜像打包
## 最新镜像
docker build -t /test/mysql-backup:202302211550 .
定时执行
基于k8s crontabjob 运行形式,每天凌晨12点整开始运行。
解决的坑
MySQL 8: caching_sha2_password not supported
详细报错如下:
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: Error loading shared library /usr/lib/mysql/plugin/caching_sha2_password.so: No such file or directory
我基础镜像使用的是 Alpine linux
镜像,仅包含 MariaDB 版本的 mysql-client,并且他们不打算很快支持 sha2,待备份 mysql 数据库均是8.0+版本以上。
这里提供几种方法供参考,我使用的 方法四 。
方法一:从 mysql 8 手动编译 mysql-client
这种方法太费劲,对于想使用 Alpine Linux 作为build镜像的基础镜像来说,更费劲一些,算是个思路吧。
方法二:切换到 debian 作为该镜像的基础镜像
如果能容忍build后镜像的大小,这种方式完全是可行的,当然你也可以选择使用 CentOS 或 Ubuntu 作为基础镜像。
方法三:更改数据库配置
大家使用的mysql可能部署在不同的系统,可能是windows也可能是Linux
方法四:安装扩展包
## Alpine:3.8+
apk add --no-cache mariadb-connector-c-dev
这会将缺少的 caching_sha2_password.so
库添加到 /usr/lib/mariadb/plugin/caching_sha2_password.so
中。
Max retries exceeded with url
详细报错如下:
requests.exceptions.ConnectionError: HTTPSConnectionPool(host=‘xxx’, port=443): Max retries exceeded with url
这边采用的措施:
## 增加重试连接次数
requests.adapters.DEFAULT_RETRIES = 5
## 关闭多余的连接
s = requests.session()
s.keep_alive = False
## 增加休眠时间
time.sleep(3)
## 及时关闭连接和证书认证
res = requests.post(url, headers=headers, data = json.dumps(post_data),verify=False)
res.close()