我正在尝试通过批处理文件在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,因此它尝试进行备份。我不确定自己忽略了什么,但是为什么这次比较失败了?
在文件的开头添加以下行:
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
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句