mysqldump 无原生“只导出前缀表”参数,--ignore-table 不支持通配符,需用 mysql -Nse "SHOW TABLES LIKE 'wp\_%'" db | xargs mysqldump db > wp_backup.sql 动态生成表列表导出。
mysqldump 怎么用 --ignore-table 反向实现“只导出前缀表”
直接说结论:mysqldump 没有原生的“只导出匹配前缀的表”参数,--ignore-table 是排除,不是包含。想批量导出 wp_ 开头的表,不能靠它“正向筛选”,得绕一下。
常见错误是写成:mysqldump --ignore-table=db.wp_% db —— 这完全无效,--ignore-table 不支持通配符,只会当成字面量去匹配一个叫 wp_% 的表名,结果啥都不排除,全库导出。
- 真正能用的路径是:先查出匹配表名,拼成显式列表,再喂给
mysqldump - Linux/macOS 下推荐用命令组合:
mysql -Nse "SHOW TABLES LIKE 'wp_%'" db | xargs mysqldump db > wp_backup.sql - 注意
-N(无列名)和-s(一行一值)必须同时用,否则xargs会把表头或空格带进去,导致mysqldump报错Unknown table 'Tables_in_db' - Windows PowerShell 用户别硬套,
xargs行为不一致;建议改用for /f或先生成表名单文件
phpMyAdmin 里勾选前缀表为什么总漏掉或错选
phpMyAdmin 的“按前缀筛选”功能藏得深,且版本间行为不一致。v5.2+ 在数据库页顶部有 Filter tables 输入框,但输入 wp_ 后,它只过滤显示,**勾选“全选”按钮仍会选中当前页所有表(含非 wp_ 的)**,不是按过滤结果选。
- 正确操作:输完
wp_→ 等列表刷新 → 手动拖拽鼠标框选,或逐个点 checkbox;别信“全选” - v4.x 版本甚至没有实时过滤,得靠浏览器搜索
Ctrl+F找wp_,再手动点——这时容易点串行,尤其表多时 - 导出前务必看右下角提示:“Selected: X tables”,核对数字是否符合预期(比如你记得有 12 个
wp_表,这里却显示 15,说明混进了别的)
用 Python 脚本生成表列表时,information_schema 查询要注意什么
写脚本查 information_schema.TABLES 最稳妥,但字段名、库名大小写、权限限制容易踩坑。
- 必须显式指定
TABLE_SCHEMA(即数据库名),不能只靠当前 USE 库,否则跨库备份会出错:SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA='mydb' AND TABLE_NAME LIKE 'wp_%' - MySQL 8.0 默认开启
lower_case_table_names=1,但LIKE仍区分大小写;保险起见用LOWER(TABLE_NAME) LIKE 'wp_%' - 如果账号没权限查
information_schema(比如某些虚拟主机),查询会返回空;此时应 fallback 到SHOW TABLES,并捕获异常 - Python 示例(关键片段):
tables = cursor.execute("SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=%s AND TABLE_NAME LIKE %s", (db_name, "wp_%"))
导出 SQL 文件后,CREATE TABLE 语句里的引擎和字符集怎么保持一致
批量导出时,不同表可能用 InnoDB/MyISAM、utf8mb4/latin1,直接导入到新环境容易报错或乱码,这不是表名筛选问题,但常被一起忽略。
-
mysqldump默认保留原表定义,不会统一;加--default-character-set=utf8mb4只影响连接层,不改表定义 - 若需强制统一,得在导出后用
sed或 Python 替换(风险高);更安全的做法是导出时加--no-create-info,单独导结构再手动调整,或用ALTER TABLE在目标库批量修正 - 特别注意 WordPress 多站点场景:
wp_1_posts和wp_2_posts引擎不一致时,mysqldump会分别写出两套CREATE,无法靠参数自动对齐
最麻烦的其实是表名动态生成的场景,比如插件自建的 wp_wpf7_submissions_202405 这种带时间戳的表——前缀匹配会失效,得结合正则或日期逻辑,这时候光靠 LIKE 'wp_%' 就不够用了。











