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

Jar*_*red 10 mysql linux backup

我需要一个自动备份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.

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

Alf*_*avo 18

:一个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 {} \;
Run Code Online (Sandbox Code Playgroud)

为文件提供足够的权限

 chmod 700 mysqlrespaldo.sh
Run Code Online (Sandbox Code Playgroud)

要么

 sudo chmod 700 something.sh
Run Code Online (Sandbox Code Playgroud)

然后创建一个cron

 crontab -e
Run Code Online (Sandbox Code Playgroud)

设置它

 **0 1 * * *** /home/youruser/coolscripts/something.sh
Run Code Online (Sandbox Code Playgroud)

请记住,数字或'*'字符具有以下结构:

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
Run Code Online (Sandbox Code Playgroud)

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

hor*_*bzz 8

和许多人一样做得非常相似.

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

  2. 必须将备份保存到数据库所在的同一服务器上.
    =>在脚本"myscript"中,你可以只使用mysqldump.从本地备份,您可以创建通过scp发送到远程计算机的tarball.最后,您可以将备份脚本放入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

}
Run Code Online (Sandbox Code Playgroud)

然后要删除早于"日期"的文件,您可以查看man find并关注mtime更新的选项.

编辑:如前所述,除了temproray文件之外,没有特别兴趣进行本地备份,以便能够轻松发送tarball并在发送时删除它.


pgl*_*pgl 7

您可以使用单线cronjob设置为每30分钟运行一次:

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

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

然后让另一个每周运行一次的cronjob将最近的转储复制到一个单独的位置,在那里保存快照.


Ank*_*nia 7

创建一个类似下面的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
Run Code Online (Sandbox Code Playgroud)

替换用户名,密码和备份目录(my_dir).将其作为filename.sh保存在目录(shell_dir)中

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

30 8 * * * /shell_dir/filename.sh
Run Code Online (Sandbox Code Playgroud)

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