在日常开发或运维中,我们常常需要备份 MySQL 数据库。手动操作不仅繁琐,还容易遗漏。本文将教你如何使用 PowerShell 脚本,一键导出所有非系统数据库,并自动按时间归档,适合 Windows 用户,零基础也能轻松上手。
🧰 准备工作
1️⃣ 安装 MySQL 并获取 mysqldump 工具
如果你尚未在 Windows 电脑上安装 mysqldump,请参考这篇详细教程:
👉 《Windows 电脑安装 mysqldump 的详细教程》
该文章会指导你:
- 如何下载 MySQL 安装包
- 如何配置环境变量
- 如何验证
mysqldump.exe是否可用
安装完成后,请确认以下两个工具的路径:
powershell
C:\Programs\MySQL\bin\mysqldump.exe
C:\Programs\MySQL\bin\mysql.exe
你可以在文件资源管理器中搜索这两个文件,复制它们的完整路径。
2️⃣ 创建 my.ini 配置文件
在你的电脑上创建一个配置文件,例如 C:\Users\5277\my.ini,内容如下:
ini
[client]
user=dev
password=123456
host=192.168.0.77
port=3306
📌 说明:
user和password是你的数据库登录账号host是数据库服务器地址(本地或远程)port是数据库端口,默认是3306
这个文件的作用是让脚本自动读取连接信息,避免在命令中暴露密码。
🧾 PowerShell 脚本代码
将以下代码保存为 mysql_backup.ps1:
powershell
# 配置项
$mysqlDump = "C:\Programs\MySQL\bin\mysqldump.exe"
$mysqlCmd = "C:\Programs\MySQL\bin\mysql.exe"
$defaults = "--defaults-extra-file=C:\Users\5277\my.ini"
$charset = "utf8mb4"
# 获取当前时间戳
$timestamp = Get-Date -Format "yyyy_MM_dd_HH_mm_ss"
# 创建导出目录(以时间戳命名)
$exportDir = Join-Path $PWD $timestamp
if (-not (Test-Path $exportDir)) {
New-Item -ItemType Directory -Path $exportDir | Out-Null
}
# 获取数据库列表(排除系统库)
$databases = & "$mysqlCmd" `
$defaults `
"-N" `
"-e" "SHOW DATABASES;" | Where-Object {
$_ -notin @("information_schema", "performance_schema", "mysql", "sys")
}
# 导出每个数据库
foreach ($db in $databases) {
Write-Host "📦 正在导出数据库:$db"
$filename = "$db-$timestamp-dump.sql"
$resultFile = Join-Path $exportDir $filename
& "$mysqlDump" `
$defaults `
"--quick" `
"--skip-lock-tables" `
"--max_allowed_packet=1G" `
"--routines" `
"--events" `
"--triggers" `
"--set-gtid-purged=OFF" `
"--default-character-set=$charset" `
"--set-charset" `
"--databases" "$db" `
"--result-file=$resultFile"
}
Write-Host "`n✅ 所有数据库导出完成,保存在目录:$exportDir"
▶️ 如何运行脚本
- 打开 PowerShell(建议以管理员身份)
- 切换到脚本所在目录,例如:
powershell
cd C:\Users\5277\Documents\MySQLBackup
- 运行脚本:
powershell
.\mysql_backup.ps1
📂 导出结果说明
- 每次运行脚本,会在当前目录下创建一个以时间戳命名的文件夹,例如:
2025_10_28_09_10_08 - 每个数据库会生成一个
.sql文件,文件名格式为:数据库名-时间戳-dump.sql - 所有文件都是纯文本格式,可用于恢复或版本管理
🛠 常见问题
❌ 报错:Can't create/write to file...
说明目标目录不存在。脚本中已自动创建目录,如仍报错,请检查:
- 当前用户是否有写入权限
my.ini路径是否正确- 数据库连接是否成功
🎯 总结
通过这个脚本,你可以:
- 自动导出所有非系统数据库
- 按时间归档,便于管理
- 保持备份一致性,适合定期任务或手动执行