mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
411 字
2 分钟
蓝盾数据库迁移

数据备份#

备份脚本准备#

#!/bin/bash
MYSQL_USER=root
MYSQL_HOST=127.0.0.1
MYSQL_PASSWD=
ignoredblist='information_schema|mysql|test|db_infobase|performance_schema|sys'
dblist="$(mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWD -Nse"show databases;"|grep -Ewv "$ignoredblist" | xargs echo)"
mysqldump -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWD --skip-opt --create-options --default-character-set=utf8mb4 -R -E -q -e --single-transaction --no-autocommit --max-allowed-packet=1G --hex-blob -B $dblist > /tmp/bk_mysql_alldata.sql

将其中的MYSQL_USER、MYSQL_HOST、MYSQL_PASSWORD更换成需要备份的数据库及用户名密码。存为 dbbackup_mysql.sh 文件。

将脚本拷贝到容器内执行#

以自建的蓝盾mysql为例

# 将上面的数据备份脚本拷贝至自建的蓝盾mysql的pod中
kubectl cp -n blueking /data/dbbackup_mysql.sh bk-ci-mysql-0:/tmp/dbbackup_mysql.sh
# 开始执行数据备份
kubectl exec -it -n blueking bk-mysql-mysql-master-0 -- bash /tmp/dbbackup_mysql.sh
# 将备份好的sql从pod拷贝到本机暂存
kubectl cp -n blueking bk-ci-mysql-0:/tmp/bk_mysql_alldata.sql /data/bkmysql_bak/bk_mysql_alldata.sql

最后一步数据拷贝可以不做,直接在这个pod里进行后续的数据导入操作。

数据导入#

上一步的数据备份是用root用户进行操作,备份中涉及存储过程函数和赋权。

注意:如果导入到阿里云mysql服务中需要处理导出的sql文件,因为阿里云提供的mysql服务,root作为保留字段,不能由用户自由创建,但允许创建拥有root权限的账户,所以需要修改备份数据中相关的内容,更换成实际使用的数据库用以替换成 superuser 为例执行如下命令:

# 统计"`root`@"字符串一共有多少个
grep -o '`root`@' bk_mysql_alldata.sql | wc -l
# 将"`root`@" 修改为 "`superuser`@"
sed -i 's/`root`@/`superuser`@/g' bk_mysql_alldata.sql
# 二次确认
grep -o '`superuser`@' bk_mysql_alldata.sql | wc -l

导入#

mysql -h $NEW_MYSQL_HOST -usuperuser -p$YOUR_PASSWORD --force < bk_mysql_alldata.sql

检查#

mysql -h$MYSQL_HOST -usuperuser -p$MYSQL_PASSWD -Nse"show databases like 'devops_ci%';"

Helmfile更新#

变更 bkci\environments\default\bkci\bkci-custom-values.yaml.gotmpl 文件后执行 helmfile 相关命令更新服务。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

蓝盾数据库迁移
https://hua-ri.cn/posts/蓝盾数据库迁移/
作者
花日
发布于
2025-08-05
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时