mysql - 使用环境变量执行 MySQL init 命令创建数据库
问题描述
我正在尝试创建一个数据库,如果它不存在并设置权限,但我无法让它工作,我一直在You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci' at line 1
我已经包含了我尝试执行命令的各种方式
yaml:
initContainers:
- name: database-setup
image: mysql:5.7
imagePullPolicy: IfNotPresent
# command: ["rm", "-fr", "/var/lib/mysql/lost+found"]
# SQL Syntax error:
command: [sh,-c,mysql -h mysql-service -p$MYSQL_ROOT_PASSWORD -e "CREATE DATABASE IF NOT EXISTS `$WORDPRESS_DB_NAME` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON $WORDPRESS_DB_NAME.* TO '$WORDPRESS_DB_USER'@'%' IDENTIFIED BY '$WORDPRESS_DB_PASSWORD'; FLUSH PRIVILEGES;"]
# Enviroment Variables arn't passed into mysql shell:
# - sh
# - -c
# - mysql -h mysql-service -p$MYSQL_ROT_PASSWORD
# - CREATE DATABASE IF NOT EXISTS $WORDPRESS_DB_NAME DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# - GRANT ALL PRIVILEGES ON $WORDPRESS_DB_NAME.* TO '$WORDPRESS_DB_USER'@'%' IDENTIFIED BY '$WORDPRESS_DB_PASSWORD';
# - FLUSH PRIVILEGES;
# - EXIT;
# SQL Syntax error:
# - sh
# - -c
# - mysql -h mysql-service -p$MYSQL_ROOT_PASSWORD -e "CREATE DATABASE IF NOT EXISTS `$WORDPRESS_DB_NAME` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON $WORDPRESS_DB_NAME.* TO '$WORDPRESS_DB_USER'@'%' IDENTIFIED BY '$WORDPRESS_DB_PASSWORD'; FLUSH PRIVILEGES;
env:
- name: WORDPRESS_DB_NAME
value: wordpress-green
- name: WORDPRESS_DB_USER
value: wordpress-green
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: wordpress-mysql-pass
key: wordpress-mysql-pass
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-root-pass
key: mysql-root-pass
解决方案
尝试echo
为 MySQL 行做一个调试返回的变量:
mysql -h mysql-service -p\\REDACTED\\ -e CREATE DATABASE IF NOT EXISTS DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON wordpress-green.* TO 'wordpress-green'@'%' IDENTIFIED BY '\\REDACTED\\'; FLUSH PRIVILEGES;
我通过删除 `` 修复了 $WORDPRESS_DB_NAME 未传递给创建数据库的问题 - 这再次导致 SQL 语法错误,因为它不喜欢数据库名称中的破折号。相反,我只是使用 camelCase 作为数据库名称
感谢@Tim Biegeleisen 的帮助
推荐阅读
- c# - EF Core 2.2 导航属性创建重复条目
- python-3.x - 无法使用 docker 进行复制并因找不到目录而出现错误?
- html - 如何制作具有不同比例的响应式 3 图像?
- django - 如何在 django rest 框架的 url 中设置查询参数?
- xamarin.forms - 如何将事件的参数传递给 ReactiveCommand?
- mysql - 在MySQL中如何获取特定单词后的数字
- c# - 复选框不可点击 | Xamarin.forms
- python - 在极坐标中绘制 fill_between 时,这些失真是什么?我该如何摆脱它们?
- html - 打开文件而不下载
- google-chrome - 防止 PWA 在桌面上安装提示 chrome 76?