ubuntu 服务器上的 Mysql 自动备份

标签 mysql bash shell ubuntu backup

经过几个月的努力,我找到了一个可以完成这项工作的 shell 脚本。

这是我正在使用的代码

#!/bin/bash
### MySQL Server Login Info ###
MUSER="root"
MPASS="MYSQL-ROOT-PASSWORD"
MHOST="localhost"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
BAK="/backup/mysql"
GZIP="$(which gzip)"
### FTP SERVER Login info ###
FTPU="FTP-SERVER-USER-NAME"
FTPP="FTP-SERVER-PASSWORD"
FTPS="FTP-SERVER-IP-ADDRESS"
NOW=$(date +"%d-%m-%Y")

### See comments below ###
### [ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/* ###
[ ! -d "$BAK" ] && mkdir -p "$BAK"

DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
 FILE=$BAK/$db.$NOW-$(date +"%T").gz
 $MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done

lftp -u $FTPU,$FTPP -e "mkdir /mysql/$NOW;cd /mysql/$NOW; mput /backup/mysql/*; quit" $FTPS

一切都运行良好,但是有一些问题我想修复,但对于 shell 脚本却一无所知。我不是要求任何人写它。只是一些指示。首先,我的服务器上的/backup/mysql 目录每次备份时都会堆叠文件。没什么大不了的。但经过一年的夜间备份后,它可能会变得有点满。所以我喜欢在上传后清除该目录。另外,我不想让我的托管服务重载,因此我希望在上传之前清除远程服务器目录。最后我希望它上传到远程服务器上的子目录,例如/mysql

最佳答案

为什么要重新发明轮子?您可以使用 Debianautomysqlbackup包(Ubuntu 上也应该可用)。

对于清理旧文件,以下命令可能会有所帮助:

find /mysql -type f -mtime +16 -delete

可以使用scp(1)命令上传到远程服务器;
为了避免密码提示,请阅读 SSH public key authentication

关于ubuntu 服务器上的 Mysql 自动备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25538787/

相关文章:

linux - 比较日志中的纪元时间戳并检查列表中的前一个时间戳和当前时间戳之间是否经过了 x 时间

Android以太网使用dhcp配置IP

linux - 如何在 sed 命令中使用变量来替换属性文件中的属性值

php - Google Maps Store Finder 查询未正确返回

mysql - 在 mysql 中替换为 NOT IN,其中查询具有内连接

mysql - 为什么mysql和perl的base64字符串编码不同?

bash - 将脚本中的标准输入重定向到另一个进程

json - 如何将 jq 与变量连接?

ios - iPhone应用程序: get shell command output

php - 显示较少数据的大网站