Linux服务器Plesk CLI创建数据库报错:仅可在订阅内创建对象
解决Plesk创建数据库报错"This object can be created only in a subscription"的问题
我刚看到你碰到的这个问题,其实根源很直接:Plesk里的数据库必须归属到某个订阅(Subscription),你之前用的-domain参数并不适用于创建数据库的场景——这个参数更多是用来关联域名到已存在的数据库,而创建数据库的核心归属逻辑是绑定订阅,不是单个域名。
下面给你一步步的解决思路,还有完整的部署脚本示例:
1. 先找到域名所属的订阅
首先得确认你的myDomain域名属于哪个订阅,执行这条命令就能查到:
plesk bin domain --info myDomain | grep "Subscription"
输出会类似这样:Subscription: mySubscriptionName,这里的mySubscriptionName就是你后续要用到的订阅名称。
或者你也可以直接列出所有订阅,手动匹配对应的那一个:
plesk bin subscription --list
2. 修改创建数据库的命令
把原来的-domain参数替换成-subscription,指定刚才找到的订阅名称(用订阅ID也可以),正确的创建命令应该是:
plesk bin database --create myDbName -subscription mySubscriptionName -type mysql -server localhost
如果需要同时创建对应的数据库用户(大部分部署场景都需要),可以加上用户相关参数:
plesk bin database --create myDbName -subscription mySubscriptionName -type mysql -server localhost -login dbUser -password "YourStrongPass123!"
3. 完整的部署Shell脚本示例
下面是一个包含删除旧数据库→创建新数据库→导入SQL备份的完整脚本,你可以根据自己的实际需求调整参数:
#!/bin/bash # 配置参数,请根据实际情况修改 DB_NAME="myDbName" SUBSCRIPTION_NAME="mySubscriptionName" BACKUP_PATH="/var/www/vhosts/myDomain.com/backups/db_backup.sql" DB_TYPE="mysql" DB_SERVER="localhost" # 1. 删除现有数据库(如果存在) echo "正在删除旧数据库..." plesk bin database --remove $DB_NAME -subscription $SUBSCRIPTION_NAME -force 2>/dev/null # -force参数跳过确认,2>/dev/null忽略数据库不存在的报错 # 2. 创建新数据库 echo "正在创建新数据库..." plesk bin database --create $DB_NAME -subscription $SUBSCRIPTION_NAME -type $DB_TYPE -server $DB_SERVER # 3. 导入SQL备份文件 echo "正在导入SQL备份..." # 推荐用Plesk自带的导入命令,无需手动处理数据库密码 plesk bin database --import $DB_NAME -subscription $SUBSCRIPTION_NAME -dump-file $BACKUP_PATH # 如果偏好mysql客户端导入,可以用下面的方式(需要先配置数据库用户) # DB_USER="dbUser" # DB_PASS=$(plesk bin database --show $DB_NAME -subscription $SUBSCRIPTION_NAME | grep "Password" | awk '{print $2}') # mysql -u $DB_USER -p$DB_PASS $DB_NAME < $BACKUP_PATH echo "数据库部署流程完成!"
一些注意事项
- 脚本需要以root用户或拥有Plesk管理员权限的用户执行;
- 确保
BACKUP_PATH指向的SQL文件存在,并且当前用户有可读权限; - 如果备份文件是压缩格式(比如
.gz),需要先解压:gunzip $BACKUP_PATH后再导入; - 执行脚本前可以先单独测试每个命令,确认参数无误。
内容的提问来源于stack exchange,提问作者onetyone
相关产品推荐
相关产品推荐

