我们想要做的是,在从我们的 MySQL 服务器自动备份时,无需将 User_ID、用户密码、主机服务器名称和特定数据库名称嵌入到我们的批处理文件中。
这是我现在使用的批处理文件:
:: Properties File for Batch
@echo off
cls
c:
cd\
cd program files\MySQL\MySQL Workbench 6.3 CE
mysqldump -uroot -pRoot_Password -hHost_Server_Name DB_Nbr1 > c:\MySQLBackup\DB_Nbr1_BU_%date:~10,4%%date:~4,2%%date:~7,2%.SQL
mysqldump -uroot -pRoot_Password -hHost_Server_Name DB_Nbr2 > c:\MySQLBackup\DB_Nbr2_BU_%date:~10,4%%date:~4,2%%date:~7,2%.SQL
mysqldump -uroot -pRoot_Password -hHost_Server_Name DB_Nbr3 > c:\MySQLBackup\DB_Nbr3_BU_%date:~10,4%%date:~4,2%%date:~7,2%.SQL
mysqldump -uroot -pRoot_Password -hHost_Server_Name test > c:\MySQLBackup\test_BU_%date:~10,4%%date:~4,2%%date:~7,2%.SQL
我们想要做的是有一个单独的“ .properties”文件来存储用户ID;密码;主机服务器名称;等等。
此外,如果我们可以获取给定路径下的目录列表,然后循环适当的次数,那就太理想了。
答案1
你可以这样做...
创建包含以下内容的文件列表(或 .properties 文件)用户名,密码,主机名和数据库名称在同一个文件中,每个值都位于第一行,并且每个值用逗号分隔(即<Username>,<Password>,<Hostname>,<DatabaseName>
)。
FileList 内容示例 - 第一行
MyUserName,MyP@ssw0rd!,MyHostName,MyDatabaseName
然后使用批处理脚本为/F并将分隔符设置为使用相关文件列表的逗号,然后调用其他(MySQL 备份)批处理脚本并相应地传递参数。
使用文件列表值并调用 MySQL 备份脚本的批处理脚本
FOR /F "TOKENS=1-4 DELIMS=," %%F IN (C:\MyFileList.properties) DO CALL "C:\Path\BatchScript.cmd" %%F %%G %%H %%I
您需要更改 MySQL 备份脚本以便能够处理调用脚本传入的参数,如下例所示。
批处理脚本处理传递的参数
@ECHO OFF
CLS
SET User=%1
SET Pass=%2
SET Host=%3
SET DBName=%4
CD /D "C:\program files\MySQL\MySQL Workbench 6.3 CE"
mysqldump -u%User% -p%Pass% -h%Host% %DBName% > C:\MySQLBackup\%DBName%_BU_%date:~10,4%%date:~4,2%%date:~7,2%.SQL
GOTO EOF
另一种方法是使用上面的脚本来处理传入的参数,然后只需在这些脚本计划传入相应值的级别传入这些参数即可。
例如,您的调度软件可能具有传递参数的能力,因此您可能会使用此方法的以下语法示例,并且脚本会根据您传递给脚本的参数值更改变量。
"C:\Path\MySQLDBBackup.cmd" <Username> <Password> <Hostname> <DatabaseName>
"C:\Path\MySQLDBBackup.cmd" "<Username>" "<Password>" "<Hostname>" "<DatabaseName>"