使用Alpine Linux做基础镜像备份mysql8.0+数据库

时间:2023-02-22 15:18:03

说明

本篇文章仅是基于k8s cronjob备份mysql8.0+数据库,使用 Alpine Linux 作为基础镜像时遇到的问题做下简单的排坑,没有涉及到具体的部署细节,后面有时间再补上。

镜像打包

## 最新镜像
docker build -t  registry.cn-shanghai.aliyuncs.com/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+版本以上。

关于alpine linux可详见官网。

这里提供几种方法供参考,我使用的方法四

方法一:从 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()

参考文档