在Linux服务器上自动备份MySQL数据库

我需要一个自动备份MySql数据库的脚本。 我知道这个主题已经有很多post和脚本了,但这里是我的不同之处。

  1. 该脚本需要运行在托pipeMySql数据库的机器上(这是一台Linux机器)。
  2. 备份必须保存到数据库所在的同一台服务器上。
  3. 备份需要每30分钟进行一次。
  4. 如果备份大于一周,则该备份将被删除,除非该备份是该周创build的第一个备份。 即出这些备份backup_1_12_2010_0-00_Mon.db,backup_1_12_2010_0-30_Mon.db,backup_1_12_2010_1-00_Mon.db … backup_7_12_2010_23-30_Sun.db等只备份backup_1_12_2010_0-00_Mon.db。

任何人有什么相似或有什么想法从哪里开始?

Solutions Collecting From Web of "在Linux服务器上自动备份MySQL数据库"

像很多人一样做。

  1. 该脚本需要运行在托管MySql数据库的机器上(这是一台Linux机器)。
    =>在本机上创建本地bash或perl脚本(或其他)“myscript”“A”

  2. 备份必须保存到数据库所在的同一台服务器上。
    =>在脚本“myscript”中,你可以使用mysqldump 。 从本地备份中,您可以创建一个通过scp发送到远程机器的tar包 。 最后你可以把你的备份脚本放到crontab (crontab -e)中。

一些提示和功能,让你开始,因为我不会发布我的整个脚本,它不完全做的伎俩,但不远:

#!/bin/sh ... MYSQLDUMP="$(which mysqldump)" FILE="$LOCAL_TARBALLS/$TARBALL/mysqldump_$db-$SNAPSHOT_DATE.sql" $MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db > $FILE && $GZIP $GZ_COMPRESSION_LEVEL $FILE function create_tarball() { local tarball_dir=$1 tar -zpcvf $tarball_dir"_"$SNAPSHOT_DATE".tar.gz" $tarball_dir >/dev/null return $? } function send_tarball() { local PROTOCOLE_="2" local IPV_="4" local PRESERVE_="p" local COMPRESSED_="C" local PORT="-P $DESTINATION_PORT" local EXECMODE="B" local SRC=$1 local DESTINATION_DIR=$2 local DESTINATION_HOST=$DESTINATION_USER"@"$DESTINATION_MACHINE":"$DESTINATION_DIR local COMMAND="scp -$PROTOCOLE_$IPV_$PRESERVE_$COMPRESSED_$EXECMODE $PORT $SRC $DESTINATION_HOST &" echo "remote copy command: "$COMMAND [[ $REMOTE_COPY_ACTIVATED = "Yes" ]] && eval $COMMAND } 

然后删除比“日期”更早的文件,你可以看看男人找到并专注于mtime更新的选项。

编辑:如前所述,除了temproray文件以外,对于做本地备份没有特别的兴趣,可以轻松地发送tarball并在发送时将其删除。

:一个cron

说明

尝试用这个创建一个文件something.sh:

  #!/bin/sh mysqldump -u root -p pwd --opt db1.sql > /respaldosql/db1.sql mysqldump -u root -p pwd --opt db2.sql > /respaldosql/db2.sql cd /home/youuser/backupsql/ tar -zcvf backupsql_$(date +%d%m%y).tgz *.sql find -name '*.tgz' -type f -mtime +2 -exec rm -f {} \; 

给文件足够的权限

  chmod 700 mysqlrespaldo.sh 

要么

  sudo chmod 700 something.sh 

然后创建一个cron

  crontab -e 

设置它像

  **0 1 * * *** /home/youruser/coolscripts/something.sh 

请记住,数字或'*'字符有这样的结构:

 Minutes (range 0-59) Hours (0-23) Day of month (1-31) Month (1-12) Day of the week (0-6 being 0=Domingo) Absolute path to script or program to run 

你可以用一行cronjob设置每30分钟运行一次:

 mysqldump -u<user> -p<pass> <database> > /path/to/dumps/db.$(date +%a.%H:%M).dump 

这将每隔30分钟创建一次数据库转储,每周它将开始覆盖前一周的转储。

然后有另一个cronjob每周运行一次,将最近的转储复制到一个单独的位置,你保持快照。

创建一个如下所示的shell脚本:

 #!/bin/bash mysqldump -u username -p'password' dbname > /my_dir/db_$(date+%m-%d-%Y_%H-%M-%S).sql find /mydir -mtime +10 -type f -delete 

替换用户名,密码和您的备份目录(my_dir)。 将它作为filename.sh保存在一个目录(shell_dir)中

安排它每天使用crontab -e运行,如:

 30 8 * * * /shell_dir/filename.sh 

这将每天上午8:30运行并备份数据库。 它还会删除大于10天的备份。 如果你不想这样做,只需从脚本中删除最后一行。

我的首选是Debian自带的AutoMySQLBackup 。 这很容易,创建每日备份,可以配置。 而且,它还会每周保存一次,然后每月保存一次。

我已经运行了一段时间,这是非常容易配置和使用!