spring-ai-alibaba-admin/deploy/kubernetes/middleware/mysql/README.md
MySQL deployment 将 mysql-init-scripts ConfigMap 挂载到容器的 /docker-entrypoint-initdb.d 目录。
MySQL 官方镜像(基于 docker-entrypoint.sh)会在首次初始化数据库时自动执行该目录下的所有 .sql、.sh、.sql.gz 文件。
在 mysql-deployment.yaml 中:
volumes:
- name: mysql-init
configMap:
name: mysql-init-scripts
optional: true # 如果 ConfigMap 不存在,容器仍可启动
volumeMounts:
- name: mysql-init
mountPath: /docker-entrypoint-initdb.d
readOnly: true
必须在部署 MySQL Deployment 之前创建 ConfigMap,因为:
/docker-entrypoint-initdb.d 目录从项目根目录执行:
kubectl create configmap mysql-init-scripts \
--from-file=admin-schema.sql=docker/middleware/init/mysql/admin-schema.sql \
--from-file=agentscope-schema.sql=docker/middleware/init/mysql/agentscope-schema.sql \
-n spring-ai-admin \
--dry-run=client -o yaml | kubectl apply -f -
deploy.sh 脚本会自动检测 SQL 文件并创建 ConfigMap(在部署 MySQL 之前):
./deploy/deploy.sh
可以编辑 mysql-init-configmap.yaml,将 SQL 文件内容粘贴进去,然后:
kubectl apply -f deploy/middleware/mysql/mysql-init-configmap.yaml
kubectl get configmap mysql-init-scripts -n spring-ai-admin
kubectl describe configmap mysql-init-scripts -n spring-ai-admin
kubectl logs -f deployment/mysql -n spring-ai-admin
查找类似以下日志:
/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/admin-schema.sql
/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/agentscope-schema.sql
# 进入 MySQL Pod
kubectl exec -it deployment/mysql -n spring-ai-admin -- mysql -uadmin -padmin
# 在 MySQL 中执行
SHOW DATABASES;
USE admin;
SHOW TABLES;
A: 如果 MySQL 已经初始化完成,需要:
删除 MySQL Deployment 和 PVC(会丢失数据):
kubectl delete deployment mysql -n spring-ai-admin
kubectl delete pvc mysql-data -n spring-ai-admin
创建 ConfigMap:
kubectl create configmap mysql-init-scripts \
--from-file=admin-schema.sql=docker/middleware/init/mysql/admin-schema.sql \
--from-file=agentscope-schema.sql=docker/middleware/init/mysql/agentscope-schema.sql \
-n spring-ai-admin
重新部署 MySQL:
kubectl apply -f deploy/middleware/mysql/
A: 如果数据库已经初始化,更新 ConfigMap 不会自动执行新脚本。需要:
手动执行 SQL(推荐):
kubectl exec -it deployment/mysql -n spring-ai-admin -- mysql -uadmin -padmin admin < your-update.sql
或者删除 PVC 重新初始化(会丢失数据)
A: optional: true 表示如果 ConfigMap 不存在,容器仍然可以启动。这允许:
但在生产环境中,建议确保 ConfigMap 存在后再部署 MySQL。