数据库的备份策略通常有主从同步、数据库导出等等。对于小规模的数据库而言,例如家用文件服务器(我本来就只有一个节点,我上哪再去搞从库),使用mysqldump命令配置每日备份不失为一个更好的方案。

但在备份脚本中明确使用账户密码,mysqldump将会报警告

mysqldump: [Warning] Using a password on the command line interface can be insecure.

既然有警告,那就要去解决,其实完全不理他也是没太大关系的。问题出在在脚本中放账户与密码,确实不是很安全,亟需用一种更安全的方法登陆数据库,于是就有了--login-path开关(MySQL 5.6及以上)。当然也可以运行脚本时重定向stderr流,但这样做会把其他的错误内容一并解决掉,一刀切可能会对备份策略的可靠性造成潜在危害。

使用mysql_config_editor命令,例如mysql_config_editor set --login-path=local --host=localhost --user=db_user --password,就会生成一个名为local的登陆点(login path,直译),其账户密钥数据加密储存于$HOME/.mylogin.cnf,然后使用mysqldump时使用--login-path开关指定登陆点即可,例如mysqldump --login-path=local ...

Appendix

下面是一个我放在小服务器上的一个自动备份脚本,希望能抛砖引玉。

#!/bin/sh
for name in "$@"
do
    echo "========================="
    echo "Processing database $name"
    echo "-------------------------"
    now="$(date +'%Y_%m_%d_%H_%M_%S')"
    filename="$name"_backup_"$now".gz
    echo "File Saved as $filename"
    backupfolder="/vault/111/mysql_backup" # <=== 这里是备份保存的根目录 
    fullpathbackupfile="$backupfolder/$filename" 
    mysqldump --login-path=localbackup -x -f $1 | gzip > "$fullpathbackupfile"
    find "$backupfolder" -name "$name"_backup_* -mtime +8 -exec rm {} \;
    echo "========================="
    echo ""
done
exit 0

留下评论