MySQL 导出脚本

🛡️ MySQL 导出脚本

下面是整合好的完整脚本。它使用了配置文件模式 来隐藏密码(消除安全警告),并且会将数据库中所有表的结构和数据按顺序写入同一个 full_backup.sql 文件中。

准备工作:创建配置文件

为了防止密码泄露并消除警告,我们先做一个配置文件。

  1. 在电脑上新建一个文本文件,命名为 my_db.cnf。

  2. 用记事本打开,粘贴以下内容(请确保密码正确):

    ini 复制代码
    [client]
    host=xxxxxx
    port=xx
    user=xxx
    password=xxxx
  3. 保存文件,记住它的存放路径(例如 D:\my_db.cnf)。

导出脚本

新建一个批处理文件(例如 export_one_file.bat),粘贴以下代码。

注意: 你需要修改脚本开头 REM --- 用户配置 --- 下方的两个路径变量。

batch 复制代码
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
title MySQL 全库导出 (单文件版)

REM ================= 用户配置 =================
REM 1. MySQL bin 目录路径 (如果环境变量配好了,这里留空也行)
set "MYSQL_BIN_PATH=C:\Program Files\MySQL\MySQL Server 8.0\bin"

REM 2. 刚才创建的 .cnf 配置文件的绝对路径
set CONFIG_FILE=D:\my_db.cnf

REM 3. 数据库名称
set DB_NAME=XXXX

REM 4. 限制行数
set LIMIT=100
REM =============================================

REM --- 自动检测命令 ---
where mysql >nul 2>nul
if %ERRORLEVEL% EQU 0 (
    set MYSQL_CMD=mysql
    set DUMP_CMD=mysqldump
) else (
    if exist "%MYSQL_BIN_PATH%\mysql.exe" (
        set "MYSQL_CMD=%MYSQL_BIN_PATH%\mysql.exe"
        set "DUMP_CMD=%MYSQL_BIN_PATH%\mysqldump.exe"
    ) else (
        echo [错误] 找不到 mysql.exe,请检查 MYSQL_BIN_PATH 设置。
        pause
        exit /b 1
    )
)

REM --- 检查配置文件是否存在 ---
if not exist "%CONFIG_FILE%" (
    echo [错误] 找不到配置文件: %CONFIG_FILE%
    echo 请先创建包含账号密码的 .cnf 文件。
    pause
    exit /b 1
)

echo [INFO] 正在获取表列表...

REM --- 获取表名 ---
"%MYSQL_CMD%" --defaults-extra-file="%CONFIG_FILE%" --batch --skip-column-names -e "SHOW TABLES;" %DB_NAME% > temp_tables.txt

if errorlevel 1 (
    echo [错误] 连接数据库失败,请检查配置文件中的密码或网络。
    del temp_tables.txt
    pause
    exit /b 1
)

REM --- 准备输出文件 ---
set OUTPUT_FILE=full_backup_%DB_NAME%.sql
echo -- MySQL Full Backup > "%OUTPUT_FILE%"
echo -- Database: %DB_NAME% >> "%OUTPUT_FILE%"
echo -- Date: %date% %time% >> "%OUTPUT_FILE%"
echo -- Limit: %LIMIT% rows per table >> "%OUTPUT_FILE%"
echo. >> "%OUTPUT_FILE%"

echo [INFO] 开始导出到文件: %OUTPUT_FILE% ...

for /f "delims=" %%i in (temp_tables.txt) do (
    set TABLE=%%i
    echo [DATA] 正在追加表: !TABLE!
    
    REM --- 核心命令:追加导出结构和数据 ---
    REM 注意:这里没有加 --no-data 和 --no-create-info,表示两者都导出
    "%DUMP_CMD%" --defaults-extra-file="%CONFIG_FILE%" ^
        --skip-comments ^
        --default-character-set=utf8mb4 ^
        --where="true LIMIT %LIMIT%" ^
        %DB_NAME% !TABLE! >> "%OUTPUT_FILE%"
        
    REM 在每个表之间加个换行,美观一点
    echo. >> "%OUTPUT_FILE%"
)

del temp_tables.txt

echo.
echo ==========================================
echo [成功] 导出完成!
echo 文件名: %CD%\%OUTPUT_FILE%
echo ==========================================
pause

💡 关键点说明

  • >> vs > : 脚本中初始化文件时用 > (覆盖),循环追加内容时用 >> (追加)。这样能保证所有表的数据都在同一个文件里。
  • 参数解释 :
    • --where="true LIMIT 100": 限制每表只导出100条。
    • --default-character-set=utf8mb4: 防止中文乱码。
    • --skip-comments: 去掉 mysqldump 生成的多余注释头,让文件更干净。
  • 结果 : 运行结束后,你只会得到一个名为 full_backup_yhp_zg_fawkes_module.sql 的文件,里面包含了所有表的建表语句和对应的数据。
相关推荐
深度学习04071 分钟前
MySQL InnoDB Cluster 部署完整文档
android·mysql·adb
时间售卖铺38 分钟前
MySQL 安装部署
运维·数据库·mysql·云原生
邪修king1 小时前
Re:Linux系统篇(三十七):进程间通信Chapter4:System V 共享内存深度解析:为什么它是最快的 IPC?
android·linux·运维
用户337922545681 小时前
Kiora SDK:在 Android 上组织端侧模型、工具与 A2A 协作
android
洞见前行1 小时前
你在 XML 时代学的渲染优化,进了 Compose 大多不再是重点——Recomposition 才是新的战场
android
安替-AnTi1 小时前
不用 root:我用 Tailscale 打通了云手机的 ADB 通道
adb·测试·调试·云手机·claude code
ii_best2 小时前
按键精灵手机助手 v5.2.1 实测:inputText 逐字延时 + 调试面板多行复制,安卓脚本开发的两个输入痛点一次解决
android·开发语言·智能手机·自动化·ai编程·按键精灵
hunterandroid2 小时前
OkHttp 源码解析:拦截器链、连接池与缓存策略的设计精髓
android
蒲公英内测分发2 小时前
智能手环出海测试,海外合作方分散在不同国家,Android 测试包怎么持续分发和更新?
android·前端·人工智能·测试工具·智能手表
朱涛的自习室2 小时前
高价软件已死,我让 AI 开启了「平替计划」(Day 7 / 7)
android·前端·github