Bash脚本使用变量创建MySQL/MariaDB数据库报错如何解决
问题修复方案
核心错误原因
- Bash 单引号包裹的内容不会解析变量,你写在
scl enable rh-mariadb '...'内的$db不会被替换为实际的数据库名称,原样传入MySQL后直接触发语法错误。 - 变量即使成功展开,
set @dbname=$db没有给字符串值加引号,MySQL会把mytest识别为列名而非字符串值,这就是Unknown column 'mytest' in 'field list'报错的直接原因。 setup_db.sql存在拼写错误:DEALLOCATE PREAPRE stmt应为DEALLOCATE PREPARE stmt。
修正后代码
setup.sh
#!/bin/bash db="mytest" # 外层改用双引号保证变量解析,内层给$db加引号标记为字符串值 scl enable rh-mariadb "mysql -u user -p -e 'set @dbname=\"$db\"; \. setup_db.sql'"
setup_db.sql
SET @query = CONCAT('CREATE DATABASE `', @dbname, '`'); PREPARE stmt FROM @query; EXECUTE stmt; DEALLOCATE PREPARE stmt;
内容的提问来源于stack exchange,提问作者Phaelax
相关产品推荐
相关产品推荐

