You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行mysqldump备份WordPress数据库时遇1102错误求助

备份WordPress数据库时出现数据库名称错误的解决办法

问题重现

尝试备份所有以wp_开头的WordPress数据库,执行了以下操作:

  1. 提取数据库名到变量:
databases=$(mysql -u root -p --vertical --skip-column-names -e "SHOW DATABASES LIKE 'wp_%'" | grep -i wp | tr '\n' ' ')
echo $database # 预期输出类似 wp_1 wp_2 wp_3 ...
  1. 执行备份命令:
mysqldump -u root -p --add-drop-database --add-drop-table --lock-tables --add-locks --add-drop-trigger --disable-keys --databases $databases > wordpress_databases.sql 

触发错误:

mysqldump: Got error: 1102: Incorrect database name 'wp_1 wp_2 wp_' when selecting the database

错误原因

  1. 变量名拼写错误:定义的变量是databases(带s),但echo时用的是$database(不带s),这会导致你无法确认databases变量的实际内容,甚至可能因为变量未正确传递,让mysqldump把一堆字符串当成单个数据库名。
  2. 字符串拼接的解析问题:用tr '\n' ' '把数据库名换成空格分隔的字符串后,bash在解析$databases时,若遇到特殊情况(比如数据库名含特殊字符),会把整个字符串当成一个参数传递给mysqldump,导致它认为这是一个数据库名,自然报错。

修复方案

方案一:用数组存储数据库名(最健壮)

数组能正确处理每个数据库名作为独立参数,避免解析错误:

# 用数组存储所有wp_开头的数据库名
databases=($(mysql -u root -p --skip-column-names -e "SHOW DATABASES LIKE 'wp_%'"))
# 执行备份,数组展开确保每个数据库名是独立参数
mysqldump -u root -p --add-drop-database --add-drop-table --lock-tables --add-locks --add-drop-trigger --disable-keys --databases "${databases[@]}" > wordpress_databases.sql

方案二:直接在mysqldump中嵌套查询(更简洁)

跳过变量赋值,直接把数据库查询结果作为参数传递:

mysqldump -u root -p --add-drop-database --add-drop-table --lock-tables --add-locks --add-drop-trigger --disable-keys --databases $(mysql -u root -p --skip-column-names -e "SHOW DATABASES LIKE 'wp_%'") > wordpress_databases.sql

额外优化说明

  • 去掉了--vertical参数:SHOW DATABASES默认每行输出一个数据库名,--vertical会打乱输出格式,完全没必要。
  • 去掉了grep -i wp:LIKE 'wp_%'已经精准过滤出以wp_开头的数据库,重复过滤纯属多余。

内容的提问来源于stack exchange,提问作者kellymandem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:30:55