使用批处理文件自动 MySQL 备份

Automatic MySQL backup using batch File

我正在尝试自动备份mysql数据库;搜索了很多链接得到了很多参考,但甚至没有找到适合我的选项(接受付费软件)。最后我正在尝试这个 link.

现在我有了 批处理脚本(如下所示),我根据我的凭据对其进行了编辑,但它正在创建空的 SQL 文件。我不知道为什么?我是 MYSQL 的新手,它的自动备份机制很差。

@ECHO OFF

set TIMESTAMP=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%

REM Export all databases into file C:\path\backup\databases.[year][month][day].sql
"C:\wamp\bin\mysql\mysql5.6.12\bin\mysqldump.exe" –-user=root –-password=xyz --all-databases --result-file="D:\dbbackup.%TIMESTAMP%.sql"

REM Change working directory to the location of the DB dump file.
C:
CD \path-to\backup\

REM Compress DB dump file into CAB file (use "EXPAND file.cab" to decompress).
MAKECAB "databases.%TIMESTAMP%.sql" "databases.%TIMESTAMP%.sql.cab"

REM Delete uncompressed DB dump file.
DEL /q /f "databases.%TIMESTAMP%.sql"

我 运行 这个批处理文件创建了备份但是空 sql 文件。

为了将来的参考和帮助,我正在更新我的答案!只需根据您的配置更新以下批处理文件:

echo off 
start "" "C:\wamp\bin\mysql\mysql5.6.12\bin\mysqldump.exe(your mysqldump address)" --user root --password=(provide here) databaseNameHere --result-file="D:\where you want path with SqlFileName.sql" --database databaseNameHere

你可以使用

.%date:~10,4%-%date:~7,2%-%date:~4,2% Blockquote

在您的备份文件名中,它还会在文件名中存储日期

然后 运行 这个批处理文件定期使用 Windows Task Schedule

这对我有用要备份 Mysql 数据库

@echo off 
"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump" --user=root --
password=root --result-file="C:\Users\supriyam\Desktop\HotelBooking\db.sql" 
databasename(doctorsystem) 
echo Done!
pause
exit

如果你想指定端口,你需要这个。

echo off 

set TIMESTAMP=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%

"C:\Program Files\MySQL\MySQLWorkbench6.3CE\mysqldump.exe" -uroot -ppassword -hlocalhost -P3307 ecommerce  > C:\Users\User\Desktop\backmeup\destination_\ecommerce.%TIMESTAMP%.sql 

众所周知,-p代表密码,-P代表端口。

由于某些原因,如果我使用-u root -p password 等空格,它仍然会报错。

而且,使用 --databases 对我不起作用。相反,我添加了:

echo off 

set TIMESTAMP=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%

    "C:\Program Files\MySQL\MySQLWorkbench6.3CE\mysqldump.exe" -uroot -ppassword -hlocalhost -P3307 ecommerce  > C:\Users\User\Desktop\backmeup\destination_\ecommerce.%TIMESTAMP%.sql 
    "C:\Program Files\MySQL\MySQLWorkbench6.3CE\mysqldump.exe" -uroot -ppassword -hlocalhost -P3307 equipment_rent  > C:\Users\User\Desktop\backmeup\destination_\equipment_rent.%TIMESTAMP%.sql 

在我的例子中,这个命令仍然生成了一个空的 SQL 文件。 所以我直接在 CDM 中 运行 这个命令,它给出了以下错误:

mysqldump throws: Unknown table 'COLUMN_STATISTICS' in information_schema..

所以为了解决我把 --column-statistics = 0 禁用导致此问题的 mysqldump 函数。

现在我的 .bat 文件如下所示:

echo off 

set TIMESTAMP=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%

"C:\Program Files\MySQL\MySQL Workbench 8.0 CE\mysqldump.exe" --column-statistics=0 -uroot -ppassowrd -hhostName -P3306 databaseName  > D:\databaseName.sql

这解决了我的问题,现在它可以正确处理 SQL 文件

我遇到了同样的问题,意识到我没有在 mysql 转储命令中指定 MySQL 端口号。以下是我如何使用 windows .bat 文件自动备份 mysql 数据库。 我使用的是 Mysql 服务器 8.0。按照以下步骤操作:

  1. 在 C:\Program Files\MySQL\MySQL Server 8.0\bin 目录中创建 backup.bat 文件(取决于您的 MySQL 服务器安装位置和 mysqldump.exe).
  2. 粘贴下面的代码。对于我的情况,MySQL 服务器 运行s 在端口 3307 上。如果 3307 不起作用,请尝试 3306。
  3. 使用 system scheduler 安排工作(我发现这个程序比默认的 windows 任务计划程序更容易使用)或 windows 任务计划程序到 运行 自动在后台。 C:\Users\User\ 是我首选的备份位置

    @echo off
    mysqldump -u root -pYOURPASSWORD -P3307 --opt YOURDATABASENAME> "C:\Users\User\NAMEFORYOURBACKUPFILE.sql"
    

如果您使用的是 xampp 服务器,请使用以下技术 - 它适用于我:

@echo off 

set TIMESTAMP=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%

"C:\xampp\mysql\bin\mysqldump.exe" -uroot -ppassword -hlocalhost dbname> D:\test.%TIMESTAMP%.sql 

pause

使用下面的代码并输入

  • mysqldump.exe[mysqldump path]
  • 中的路径
  • 您在 [username]
  • 中的 Mysql 用户名
  • 您在 [password]
  • 中的 Mysql 密码
  • 您在 [database name]
  • 中的 Mysql 数据库名称
  • 您希望在 [full path where you want to save db]
  • 中转储的完整路径
@echo off
set currdate=%date:~4%
set filedate=%currdate:/=_%
[mysqldump path] -u [username] -p[password] [database name] > "[full path where you want to save db]_%filedate%.sql"

使用上述方法创建常规 sql 文件后,我们可以使用 winrar 并将文件名传递给此批处理文件,如果是否使用 DATE &,我的第二个参数创建 zip 文件名的时间信息:

假设我的批处理文件名是 makezip.bat,我会使用类似这样的名称:

makezip mysqlbackup.sql 

如果您在 2020-07-09 运行 07:15am 它将创建 zip 文件:mysqlbackup-20200907-0715.zip

@ECHO OFF
if "%~1"=="" goto BLANK

set useDMY=-agYYYYMMDD-HHMMSS
set useDMY2=-

if "%~2" NEQ "" goto dontUseDMY

goto carryon

:dontUseDMY
set useDMY=
set useDMY2=

:carryon
set flags=%~a1
set isFolder="%flags:~0,1%"
if %isFolder% EQU "d" goto zipFolder

:zipFile
winrar a %useDMY% %~n1%useDMY2%.rar %1
goto DONE

:zipFolder
winrar a -r %useDMY% %1%useDMY2% %1\*
GOTO DONE

:BLANK
    ECHO ERROR...PLEASE PROVIDE THE FOLDER TO RAR
    PAUSE
:DONE
    ECHO "ALL DONE"

如果需要,我还添加了一些代码来处理整个文件夹的压缩,实际上我们可以将文件夹拖放至此批处理文件以进行压缩。

此外,如果需要,可以使用 winrar 参数为输出的 zip 文件添加密码。