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

如何备份MySQL数据库且每张表仅导出20行数据

导出MySQL全量对象+每张表20行数据的实现方案

方案1:单行mysqldump命令实现(推荐)

直接利用mysqldump的全局--where参数限制所有表的返回行数,同时追加参数导出存储过程、触发器、事件等所有数据库对象:

mysqldump -u [数据库用户名] -p --databases [目标数据库名] \
--routines --triggers --events \
--where="1 LIMIT 20" > mysql_backup.sql

注意事项:

  • 命令中-p后不要加密码,执行时会交互式输入密码,避免密码泄露到bash历史记录中
  • 该命令会导出完整的表结构、视图定义、存储过程、自定义函数、触发器、事件调度器,所有业务表仅导出前20行数据
  • 如果需要固定导出的20行排序规则,可将--where参数修改为--where="1 ORDER BY 主键字段名 LIMIT 20"

方案2:shell脚本实现(灵活度更高)

如果需要跳过指定表、或给不同表设置不同的行数限制,可使用脚本分步骤导出:

#!/bin/bash
# 配置项
DB_USER="你的数据库用户名"
DB_NAME="目标数据库名"
BACKUP_FILE="./mysql_backup.sql"
ROW_LIMIT=20

# 第一步:导出全量结构和非表对象
mysqldump -u${DB_USER} -p ${DB_NAME} \
--no-data --routines --triggers --events > ${BACKUP_FILE}

# 第二步:逐表导出指定行数的数据
for table in $(mysql -u${DB_USER} -p ${DB_NAME} -e "SHOW TABLES;" | sed '1d'); do
    mysqldump -u${DB_USER} -p ${DB_NAME} ${table} \
    --no-create-info --where="1 LIMIT ${ROW_LIMIT}" >> ${BACKUP_FILE}
done

方案优势:

  • 可在遍历表的逻辑中加过滤规则,跳过不需要导出数据的系统表、日志表
  • 可针对大表单独调整行数限制,适配特殊导出需求

导出结果校验

执行以下命令统计每张表的INSERT语句行数,确认是否符合限制要求:

grep "INSERT INTO" mysql_backup.sql | awk -F '`' '{print $2}' | uniq -c

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:27:04