k8s登录_一键快速登录WiseCloud MySQL数据库的方法

6d11caf1bfa72e55898e10501ce78336.png

原创作者:清如许

1、背景

数据库是计算机系统持久化数据的重要载体,睿云智合公司的容器云管理平台WiseCloud也用到了数据库。在云计算时代,MySQL是云端数据库的不二选择。

一个好的计算机系统,应该通过用户界面、服务接口调用等方式使用数据,用户直接操纵数据库的机会很少。但是在有一些场景下,有些用户不得不直接操纵数据库。例如:研发同事为了测试软件功能而预先置入测试数据;交付同事为了安装或升级系统、处理第三方系统的脏数据;客户管理员处理遗留系统的脏数据。

操纵MySQL数据库的工具有很多,可以根据实际需要选用,可以归入两类:图形界面客户端和字符界面客户端。

使用图形界面客户端,例如SQLyog、MySQL Workbench等,能方便地连接MySQL数据库,利用图形界面的列表框、菜单和按钮,进行数据的增删查改和数据库管理工作。

MySQL图形工具有优点,也有局限性。例如:安装MySQL图形工具需要Windows或者macOS等图形桌面,但是在生产环境下,自备电脑不能方便地接入生产网络,MySQL图形工具也就无用武之地了。又如:用MySQL图形工具配置数据库连接时,需要知道数据库连接参数四元组:数据库IP、端口、用户名和密码,而这些参数并不是随时随地能获得的,给维护工作增加了难度,维护门槛较高。

字符界面的mysql命令工具在Shell命令行下运行,能随时随地获得并安装,也不依赖于图形桌面环境,所以深得运维工程师的喜爱。

本文介绍的方法,以mysql命令为基础,不需要预先知道数据库连接四元组,就能一键(执行一条Shell命令)快速登录WiseCloud/MySQL数据库,相比图形工具而言更加灵活、方便。

对此话题感兴趣的话,或者想利用它来提高工作效率,不妨进来看一看。

2、一键登录MySQL脚本

2.1 实现技术原理

本文所说的一键登录到MySQL方法利用了Kubernetes(以下简称K8s)和Docker的一些特性,或者说信息暴露特性来实现。

K8s与Docker容器之间传递参数利用了容器进程的环境变量作为中介。也就是说K8s把Docker容器运行时需要的参数以一组环境变量的形式传递给容器进程,容器进程从环境变量获得参数,动态配置运行时系统。

对WiseCloud而言,连接数据库的四元组也在传递给容器的环境变量之列。如果预先知道四元组的变量名就能取得四元组变量值,然后调用mysql命令快速地登录到MySQL数据库。当然,mysql客户端和MySQL服务器之间的网络互通是登录的前提条件。

Docker命令的子命令inspect能查询到容器的所有环境变量,然后用grep命令过滤出带DB前缀特征值的环境变量,就是数据库四元组。

docker inspect container_id/container_name | grep DB

原理理清楚了,就可以动手写脚本了。

2.2 编写Shell脚本

Shell脚本要做以下几件事:

S1. 查询wisecloud-controller命名空间下是否存在预定名称或者命令的应用Pod。这个脚本实际上查询带有关键词orchestration的应用Pod。这一步是检查脚本是否运行在WiseCloud集群节点上,严格意义讲不是完全必要的,但有了这一步的话信息更丰富。以下命令输出结果是Pod名称。

kubectl -n wisecloud-controller get pod -o wide | grep orchestration | awk '{print $1}'

S2. 查询是否存在预定名称(特征模式)的应用容器。docker命令在运行容器的主机上执行才有效,不能跨主机执行。以下命令输出结果是一条容器ID记录。

docker ps | grep app-orch | awk '{print $1}' | tail -1

S3. 查询容器进程的运行时参数,并过滤出符合特征串DB的环境变量,并格式化为“export DB_USER=username”形式。以下命令输出结果是MySQL四元组。

docker inspect $docker_container_id | grep DB | awk '{print $1}' | awk -F '[
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,K8S中的MySQL数据库备份脚本可以使用多种工具和脚本来实现。其中,常用的工具包括mysqldump、xtrabackup、mysqlbackup和mysql shell。这些工具可以通过编写shell脚本或Windows bat脚本来执行备份操作。 一个示例的备份脚本如下所示: ```bash #!/bin/bash backup_path="/opt/app-ai/deepwise/data/mysql-backup" data_dir="/opt/app-ai/deepwise/data/mysql-data" DATE=$(date +%Y-%m-%d_%H-%M-%S) backup(){ if \[ ! -z "${data_dir}" \];then mkdir -p ${backup_path} date >> ${backup_path}/${DATE}.log echo "innobackupex --user=root --password=password --host=mysql-headless ${backup_path} > ${backup_path}/${DATE}.log 2>&1 &" innobackupex --user=root --password=password --host=mysql-headless ${backup_path} > ${backup_path}/${DATE}.log 2>&1 date >> ${backup_path}/${DATE}.log fi } clean(){ find ${backup_path}/ -name "*" -mtime +14 -exec rm -rf {} \; } backup clean ``` 这个脚本使用innobackupex工具来执行MySQL备份操作,并将备份文件存储在指定的路径中。同时,还包括了清理过期备份文件的功能。 此外,还可以使用Kubernetes的CronJob来定期执行增量备份操作。一个示例的CronJob配置如下所示: ```yaml apiVersion: batch/v1beta1 kind: CronJob metadata: namespace: deepwise name: mysql-incdump spec: jobTemplate: spec: completions: 1 template: spec: restartPolicy: Never volumes: - name: mysql-script hostPath: path: /opt/app-ai/deepwise/data/scripts - name: mysql-backup hostPath: path: /opt/app-ai/deepwise/data/mysql-backup - name: local-time hostPath: path: /etc/localtime - name: mysql-data hostPath: path: /opt/app-ai/deepwise/data/mysql-data containers: - name: mysqldump-container image: percona/percona-xtrabackup:2.4 volumeMounts: - name: mysql-script mountPath: /opt/app-ai/deepwise/data/scripts - name: local-time mountPath: /etc/localtime - name: mysql-backup mountPath: /opt/app-ai/deepwise/data/mysql-backup - name: mysql-data mountPath: /var/lib/mysql command: - "sh" - "/opt/app-ai/deepwise/data/scripts/backup_inc.sh" schedule: "0 0 * * *" ``` 这个CronJob配置使用percona/percona-xtrabackup镜像来执行增量备份操作,并将备份文件存储在指定的路径中。备份脚本backup_inc.sh位于/opt/app-ai/deepwise/data/scripts目录下。 请根据实际情况修改脚本和配置文件中的路径和参数,以适应您的环境和需求。 #### 引用[.reference_title] - *1* [分享(2)一个 mysqldump 备份 MySQL 数据库的脚本](https://blog.csdn.net/weixin_44496870/article/details/129706015)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [[kubernetes]-使用cronjob定时备份mysql](https://blog.csdn.net/xujiamin0022016/article/details/124648643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值