好的,没问题!这是一份专为新手设计的 PowerShell 批量导出 MySQL 数据库的图文教程。我们将使用 MySQL 自带的命令行工具 mysqldump,并通过 PowerShell 脚本来自动化这个过程。
![图片[1]_使用PowerShell批量导出MySQL数据库的新手教程_知途无界](https://zhituwujie.com/wp-content/uploads/2025/12/d2b5ca33bd20251230093000.png)
核心思路
- 连接到 MySQL:使用
mysql.exe获取所有数据库的列表。 - 筛选数据库:排除系统数据库(如
information_schema,mysql等),只备份我们需要的业务数据库。 - 循环导出:遍历每一个需要备份的数据库,使用
mysqldump.exe执行导出命令。 - 保存文件:将每个数据库的导出内容保存为一个独立的
.sql文件。
准备工作
在开始之前,请确保你已完成以下准备工作:
- 安装 MySQL:确保你的电脑上已经安装了 MySQL 服务器或客户端工具。
- 找到 MySQL 的安装路径:我们需要知道
mysql.exe和mysqldump.exe在哪里。- 默认情况下,它们通常在
C:\Program Files\MySQL\MySQL Server 8.0\bin\这样的目录下(版本号可能不同)。 - 你可以去这个目录找一下,或者在 PowerShell 中尝试运行
where.exe mysqldump来查找(如果它在系统环境变量 PATH 里的话)。
- 默认情况下,它们通常在
- 记下你的数据库连接信息:
- 服务器地址 (
-h):通常是localhost或127.0.0.1。 - 端口 (
-P):默认是3306。 - 用户名 (
-u):一个有足够权限(如SELECT,LOCK TABLES,SHOW VIEW等)的 MySQL 用户。 - 密码 (
-p):为了安全,不建议直接在命令中写密码,我们让系统在执行时提示输入。
- 服务器地址 (
第一步:创建一个安全的密码提示(推荐方法)
直接在脚本里写密码是不安全的。PowerShell 可以安全地弹出一个对话框让你输入密码,而不会显示在屏幕上。我们先创建一个函数来做到这一点。
打开 PowerShell ISE 或一个文本编辑器(如 VS Code、记事本),创建一个新的脚本文件,命名为 MySQL_Backup.ps1。
将以下代码复制到文件中,这是整个脚本的“安全基础”:
# 这是一个函数,用于安全地获取密码
function Get-MysqlPassword {
Add-Type -AssemblyName Microsoft.VisualBasic
$password = [Microsoft.VisualBasic.Interaction]::InputBox("请输入 MySQL 用户的密码", "MySQL 备份", "")
return $password
}
# 调用函数获取密码
$MySqlPassword = Get-MysqlPassword
# 检查用户是否点击了取消(密码为空)
if ([string]::IsNullOrEmpty($MySqlPassword)) {
Write-Host "密码不能为空,脚本已取消。" -ForegroundColor Red
exit # 退出脚本
}
Write-Host "密码已获取,开始备份..." -ForegroundColor Green
代码解释:
Add-Type -AssemblyName Microsoft.VisualBasic:加载一个能创建输入框的程序集。InputBox(...):创建一个弹出窗口,让用户输入密码。if ([string]::IsNullOrEmpty(...)):检查用户是否什么都没输入就点了“确定”或点了“取消”。
第二步:编写批量导出的核心脚本
现在,我们在刚才的脚本后面继续添加核心的备份逻辑。
2.1 设置基本变量
首先,定义我们的连接信息和路径。请将 YourUsername 替换为你的实际 MySQL 用户名,并根据你的 MySQL 安装路径修改 $mysqlPath。
# ... (接上面的代码)
# --- 配置区域 ---
$mysqlPath = "C:\Program Files\MySQL\MySQL Server 8.0\bin\" # 修改为你的 MySQL bin 目录路径
$mysqlUser = "YourUsername" # 替换为你的 MySQL 用户名
$serverHost = "localhost"
$serverPort = "3306"
$backupFolder = ".\MySQL_Backups" # 备份文件存放的文件夹,当前目录下的 MySQL_Backups 文件夹
# --- 创建备份文件夹 ---
if (-not (Test-Path -Path $backupFolder)) {
New-Item -ItemType Directory -Path $backupFolder | Out-Null
Write-Host "已创建备份文件夹: $backupFolder"
}
# --- 获取密码 ---
# ... (接上面的 Get-MysqlPassword 函数和调用代码)
注意:如果 mysqldump 和 mysql 命令已经添加到系统的 PATH 环境变量中,你可以将 $mysqlPath 设置为空字符串 ""。
2.2 获取数据库列表并筛选
接下来,我们连接 MySQL 并获取所有数据库名称,然后排除掉不需要备份的系统库。
# ... (接上面的代码)
# --- 获取数据库列表 ---
Write-Host "正在获取数据库列表..."
$databases = & "$mysqlPath\mysql" -h $serverHost -P $serverPort -u $mysqlUser -p$MySqlPassword -e "SHOW DATABASES;" 2>$null | Select-Object -Skip 1
# 筛选数据库:排除系统数据库
$systemDatabases = @('Database', 'information_schema', 'mysql', 'performance_schema', 'sys')
$dbsToBackup = $databases | Where-Object { $_ -notin $systemDatabases }
Write-Host "找到以下需要备份的数据库:"
$dbsToBackup | ForEach-Object { Write-Host "- $_" }
代码解释:
& "$mysqlPath\mysql" ... -e "SHOW DATABASES;":执行 MySQL 命令SHOW DATABASES来获取所有库名。Select-Object -Skip 1:SHOW DATABASES的结果第一行是标题 “Database”,我们把它去掉。Where-Object { $_ -notin $systemDatabases }:过滤掉在$systemDatabases列表里的系统库。
2.3 循环导出每个数据库
最后,我们遍历筛选后的数据库列表,对每个数据库执行 mysqldump 命令。
# ... (接上面的代码)
# --- 循环导出数据库 ---
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
Write-Host "`n开始备份,时间戳: $timestamp"
foreach ($db in $dbsToBackup) {
Write-Host "正在备份数据库: $db ..."
# 为每个数据库生成一个带时间戳的文件名
$fileName = "$($db)_backup_$timestamp.sql"
$filePath = Join-Path -Path $backupFolder -ChildPath $fileName
# 执行 mysqldump
& "$mysqlPath\mysqldump" -h $serverHost -P $serverPort -u $mysqlUser -p$MySqlPassword --single-transaction --routines --triggers $db > $filePath
# 检查上一条命令是否成功
if ($LASTEXITCODE -eq 0) {
Write-Host "数据库 $db 备份成功!文件保存至: $filePath" -ForegroundColor Green
} else {
Write-Host "错误:数据库 $db 备份失败!" -ForegroundColor Red
}
}
Write-Host "`n所有数据库备份完成!" -ForegroundColor Cyan
代码解释:
foreach ($db in $dbsToBackup):开始循环,每次处理一个数据库。$fileName = ...:创建一个唯一的文件名,包含数据库名和时间戳,防止覆盖旧备份。Join-Path:智能地拼接路径和文件名。& "$mysqlPath\mysqldump" ... > $filePath:这是核心的导出命令。--single-transaction:为了保证数据一致性,特别是在 InnoDB 引擎的数据库上,非常重要!--routines:同时导出存储过程和函数。--triggers:同时导出触发器。> $filePath:将mysqldump的输出重定向(保存)到指定的 SQL 文件中。
$LASTEXITCODE:mysqldump成功执行后会返回 0,失败则返回非 0 值。我们用它来判断备份是否成功。
第三步:完整的脚本与执行
将以上所有代码片段按顺序组合起来,你就得到了完整的脚本。
完整脚本示例
# MySQL_Backup.ps1
# 函数:安全获取密码
function Get-MysqlPassword {
Add-Type -AssemblyName Microsoft.VisualBasic
$password = [Microsoft.VisualBasic.Interaction]::InputBox("请输入 MySQL 用户的密码", "MySQL 备份", "")
return $password
}
# --- 配置区域 ---
$mysqlPath = "C:\Program Files\MySQL\MySQL Server 8.0\bin\" # 修改为你的 MySQL bin 目录路径
$mysqlUser = "YourUsername" # 替换为你的 MySQL 用户名
$serverHost = "localhost"
$serverPort = "3306"
$backupFolder = ".\MySQL_Backups" # 备份文件存放的文件夹
# --- 创建备份文件夹 ---
if (-not (Test-Path -Path $backupFolder)) {
New-Item -ItemType Directory -Path $backupFolder | Out-Null
Write-Host "已创建备份文件夹: $backupFolder"
}
# --- 获取密码 ---
$MySqlPassword = Get-MysqlPassword
if ([string]::IsNullOrEmpty($MySqlPassword)) {
Write-Host "密码不能为空,脚本已取消。" -ForegroundColor Red
exit
}
Write-Host "密码已获取,开始备份..." -ForegroundColor Green
# --- 获取数据库列表 ---
Write-Host "正在获取数据库列表..."
$databases = & "$mysqlPath\mysql" -h $serverHost -P $serverPort -u $mysqlUser -p$MySqlPassword -e "SHOW DATABASES;" 2>$null | Select-Object -Skip 1
$systemDatabases = @('Database', 'information_schema', 'mysql', 'performance_schema', 'sys')
$dbsToBackup = $databases | Where-Object { $_ -notin $systemDatabases }
Write-Host "找到以下需要备份的数据库:"
$dbsToBackup | ForEach-Object { Write-Host "- $_" }
# --- 循环导出数据库 ---
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
Write-Host "`n开始备份,时间戳: $timestamp"
foreach ($db in $dbsToBackup) {
Write-Host "正在备份数据库: $db ..."
$fileName = "$($db)_backup_$timestamp.sql"
$filePath = Join-Path -Path $backupFolder -ChildPath $fileName
& "$mysqlPath\mysqldump" -h $serverHost -P $serverPort -u $mysqlUser -p$MySqlPassword --single-transaction --routines --triggers $db > $filePath
if ($LASTEXITCODE -eq 0) {
Write-Host "数据库 $db 备份成功!文件保存至: $filePath" -ForegroundColor Green
} else {
Write-Host "错误:数据库 $db 备份失败!" -ForegroundColor Red
}
}
Write-Host "`n所有数据库备份完成!" -ForegroundColor Cyan
如何运行脚本
- 保存文件:将上面的完整代码保存为
MySQL_Backup.ps1。 - 修改配置:务必修改脚本中
$mysqlPath和$mysqlUser这两个变量的值。 - 设置执行策略:PowerShell 默认不允许运行脚本。以管理员身份打开 PowerShell,然后运行以下命令来更改执行策略(选择
Y确认):Set-ExecutionPolicy RemoteSigned这个策略允许你运行自己创建的脚本。 - 执行脚本:在 PowerShell 中,导航到你的脚本所在的目录,然后运行:
.\MySQL_Backup.ps1 - 输入密码:此时会弹出一个对话框,请输入你的 MySQL 用户密码,然后点击“确定”。
- 查看结果:脚本会自动开始工作,并在控制台输出进度。备份好的
.sql文件会出现在你脚本同级的MySQL_Backups文件夹里。
恭喜你!你已经成功创建了一个可以批量备份 MySQL 数据库的 PowerShell 脚本。你可以将其设置为 Windows 定时任务,实现定期自动备份。

























暂无评论内容