2011-12-09 75 views
5

我需要一个自动备份MySql数据库的脚本。我知道这个话题已经有很多帖子和脚本了,但这里是我的不同之处。在Linux服务器上自动备份MySQL数据库

  1. 该脚本需要在承载MySql数据库的计算机上运行(它是一台Linux机器)。
  2. 备份必须保存到数据库所在的同一台服务器上。
  3. 需要每30分钟进行一次备份。
  4. 当备份大于一周时,它将被删除,除非它是该周创建的第一个备份。即在这些备份中备份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。

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

+11

**从不**将备份放置在生产机器上。如果你的生产服务器死了,你的备份也不见了。 – ajreal

回答

7

和许多人一样做的很像。

  1. 该脚本需要在承载MySql数据库的计算机上运行(它是一台Linux机器)。
    =>创建本地bash或Perl脚本(或其他)这台机器上“的MyScript”,“A”

  2. 的备份必须保存到数据库是在同一台服务器。
    =>在脚本“myscript”中,您可以使用mysqldump。从本地备份中,您可以创建一个tarball,您通过scp发送到远程计算机。最后,您可以将备份脚本放入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并在发送时删除它。

6

你可以做这个最有一行的cronjob设置为每30分钟运行:

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

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

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

13

:一个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 

,然后创建

crontab -e 

设置它像

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

记住,数字或 '*' 字符具有这种结构一个cron:

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 
+3

如果您的发行版支持它,而不是专门向主crontab添加一行,我实际上会将其脚本(或其符号链接)放在/etc/cron.daily文件夹之一中。 – Nick

+0

@Nick这里有一个为你+1。 – Alfabravo

5

类似下面创建一个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)。

30 8 * * * /shell_dir/filename.sh 

这将在8:30 AM和备份数据库的日常运行:在一个目录(shell_dir)作为filename.sh

安排其日常使用crontab -e命令喜欢运行保存。它还会删除超过10天的备份。如果你不想这么做,只需从脚本中删除最后一行。

1

我的首选是Debian附带的AutoMySQLBackup。这非常简单,并创建每日备份,可以进行配置。此外,它还存储每周一次,然后每月一次的备份。

我已经运行了一段时间,它是超级简单的配置和使用!

相关问题