我想编写一个 bash 函数来测试mysqldump
命令是否成功。到目前为止我尝试的是测试转储文件是否为零大小,如下所示:
l_mysqldump= # set your custom mysqldump path here, like /Applications/MAMP/Library/bin/mysqldump
${l_mysqldump:-mysqldump} -u$l_db_user -p$l_db_pass -h $l_db_host $l_db_name > latest-dump.mssql
if [[ -s latest-dump.mssql ]]
then
echo "Success: not zero size."
else
echo "Error: zero size."
exit 1
fi
我决定用这种方式进行测试,而不是测试mysqldump
命令的退出状态,因为当默认的 mysql 服务器关闭时,运行mysqldump
命令会出现此错误:
mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 尝试连接时
即使它抛出了这个错误,它仍然会生成一个 0 字节的 .mssql 文件。另外,退出状态无论如何都是0。如果转储失败,脚本必须退出,并且需要与用户沟通他们需要指定不同的mysqldump
二进制文件或激活他们的服务器。
上面的代码工作正常。但是,我不想mysqldump
生成未压缩的转储文件。我想bzip它,像这样:
${l_mysqldump:-mysqldump} -u$l_db_user -p$l_db_pass -h $l_db_host $l_db_name | bzip2 -c > latest-dump.mssql.bz2
问题是,这打破了我的[-s]
bash 测试,因为它生成的 .bz2 文件是 14 个字节。因此,即使未压缩的 .mssql 文件大小为零,等效存档的大小也不为零。
那么解决这个问题的最佳方法是什么?我可以生成一个未压缩的转储文件,对其进行测试,然后对其进行 bzip 压缩。我怀疑有一种更聪明的方法可以做到这一点。