在使用批处理文件排除某些数据库的同时备份MySql,我遇到了问题

时间:2015-04-16 05:35:44

标签: mysql batch-file windows-server-2012-r2

我正在尝试通过批处理文件在Windows 2012上备份我的MySql数据库。

这就是我所拥有的:

    %mysql% -u %USER% -p%PASSWORD% -B -s -e"show databases" > %backupdir%\mysqldblist.tmp

    FOR /F %%D IN (%backupdir%\mysqldblist.tmp) DO (
        set DONTBACKUP=NOTHING
        ECHO Creating backup for database ''%%D''
        if [%%D]==[information_schema] set DONTBACKUP=TRUE
        if [%%D]==[mysql] set DONTBACKUP=TRUE
        if [%%D]==[performance_schema] set DONTBACKUP=TRUE
        if [%%D]==[test] set DONTBACKUP=TRUE
        PAUSE
        IF [%DONTBACKUP%]==[TRUE] %mysqldump% -u %USER% -p%PASSWORD% --result-file="%backupdir%%%D_%mydate%.sql" "%%D" 
        PAUSE
    )

我试图排除mysql,performance_schema和test等数据库,但是在第一次迭代之后它正在退出。我想我只是设置一个变量并检查它是否是某个数据库,但它只是没有发生,首先检查它是否退出。

有人可以指出我在这里做错了吗?

附加信息

这是我在命令提示符窗口中看到的,如果它有帮助:

ECHO Creating backup for database '%D'
if [%D] == [information_schema] set DONTBACKUP=TRUE
if [%D] == [mysql] set DONTBACKUP=TRUE
if [%D] == [performance_schema] set DONTBACKUP=TRUE
if [%D] == [test] set DONTBACKUP=TRUE
PAUSE
IF [] == [TRUE] "C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump"...

我发现有些事情是对的,我现在正试图调试它,但我没有看到它。我不确定为什么%% D或为什么DONTBACKUP没有被填充...

附加信息#2

这是我认为我失败的地方:

 if [information_schema] == [information_schema] set DONTBACKUP=TRUE

它未设置为TRUE,因此它会尝试进行备份。我不确定我忽略了什么,但为什么这种比较会失败呢?

1 个答案:

答案 0 :(得分:1)

在文件的开头添加以下行:

setlocal enabledelayedexpansion

在for循环中,查看DONTBACKUP的值时,请使用!DONTBACKUP!。 另外,按逻辑顺序,DONTBACKUP的检查应该反转。

所以这是修改过的文件:

setlocal enabledelayedexpansion
%mysql% -u %USER% -p%PASSWORD% -B -s -e"show databases" > %backupdir%\mysqldblist.tmp

FOR /F %%D IN (%backupdir%\mysqldblist.tmp) DO (
    set DONTBACKUP=NOTHING
    ECHO Creating backup for database ''%%D''
    if [%%D]==[information_schema] set DONTBACKUP=TRUE
    if [%%D]==[mysql] set DONTBACKUP=TRUE
    if [%%D]==[performance_schema] set DONTBACKUP=TRUE
    if [%%D]==[test] set DONTBACKUP=TRUE
    PAUSE
    IF not [!DONTBACKUP!]==[TRUE] %mysqldump% -u %USER% -p%PASSWORD% --result-file="%backupdir%%%D_%mydate%.sql" "%%D" 
    PAUSE
)