使用shell指令碼備份MySQL資料庫

2021-07-25 10:44:52 字數 3463 閱讀 7986

1 使用說明

下面是mysql資料庫的shell備份指令碼,其中引數dblist表示要備份的mysql資料庫名稱、numdays表示保留多少天以內的備份檔案、myusermypass表示mysql資料庫的使用者名稱和密碼。最終,每次執行這個指令碼生成的備份檔案名類似於系統日期時間+.sql.gz,例如20150606.sql.gz。

使用時通過chmod +x mysql_backup.sh命令新增執行許可權,然後可以利用linux系統的crontab定時任務工具執行該指令碼。例如下面這個配置就是每天凌晨1點的時候執行該shell指令碼,生成mysql資料庫的備份檔案。

[root@typecodes bak_list]# crontab -e

01 * * * /mydata/backups

/bak_list/mysql_backup.sh

2 指令碼mysql_backup.sh的全部內容

以後的更新都會提交到本文小節3中的兩個git倉庫中。

#!/bin/bash

# mysql backup script v1.0.0

# (c) 2015 vfhky

# reference:

# #

# space separated list of databases

dblist="your mysql database name witch you want to backup"

# backup to this directory

backupdir=/mydata/backups/data/mysql

# number of days to keep

numdays=60

# some linux command and your mysql configure

findcmd="find"

mysqlcmd="mysql"

myuser="your mysql user name"

# username

mypass="your mysql password"

# password

myhost="localhost"

# hostname

dumpcmd="mysqldump -u$myuser -h $myhost -p$mypass --lock-tables --databases "

gzipcmd="gzip"

# backup date format,e.g 20150505_2010

backupdate=`date +%y%m%d_%h%m`

function

usage

() while

getopts

"hal:n:" opt; do

case

$opt

in a)

dblist=""

;;h)

usage

exit 1

;;l)

dblist="$optarg"

;;n)

numdays=$optarg

;;\?)

usage

exit

;;:)

echo

"option -$optarg requires an argument." >&2

exit 1

;;esac

done

function

error

() function

notice

() function

runcmd

() # sanity checks

if [ ! -n "$dblist" ]; then

dblist=`$mysqlcmd -n -s

-e"show databases" | grep -vie '(information_schema|performance_schema|mysql|test)'`

if [ ! -n "$dblist" ]; then

error "invalid database list"

fifi

if [ ! -n "$backupdir" ]; then

error "invalid backup directory"

fiif [[ ! $numdays =~ ^[0-9]+$ ]]; then

error "invalid number of days: $numdays"

elif [ "$numdays"

-eq"0" ]; then

error "number of days must be greater than zero"

fi# lock down permissions

umask 077

# create directory if needed

runcmd mkdir -p -v $backupdir

if [ ! -d

$backupdir ]; then

error "invalid directory: $backupdir"

finotice "dumping mysql databases..."

rc=0

for database in

$dblist; do

notice "dumping $database..."

runcmd "$dumpcmd

$database | $gzipcmd > $backupdir/$backupdate.sql.gz"

rc=$?

if [ $rc

-gt 0 ]; then

continue;

fidone

if [ $rc

-gt 0 ]; then

error "mysqldump failed!"

else

notice "removing dumps older than $numdays days..."

runcmd "$findcmd

$backupdir -name \"*.sql.gz\" -type f -mtime +$numdays -print0 | xargs -0 rm -fv"

notice "listing backup directory contents..."

runcmd ls -la $backupdir

notice "mysqldump is complete!"

fi# exit 0

3 shell script工具集合

目前把這個指令碼託管在自己的coding.net和github的上乙個shell script工具集合,位址如下:

補充說明

crontab -e

mysql備份shell指令碼

bin bash mysql server login info muser root mpass root mhost localhost mysql which mysql mysqldump which mysqldump dbname test bak backup mysql gzip w...

mysql備份shell指令碼

bin bash 要備份的資料庫名,多個資料庫用空格分開 databases test 備份檔案要儲存的目錄 basepath usr local mysqlbak if d basepath then mkdir p basepath fi 迴圈databases陣列 for db in docd...

Shell備份MySQL指令碼

bin bash backup database mysql備份指令碼,自動化備份,定時任務備份,linux centos redhat 正式環境 全量備份 單庫備份 單錶備份 by lumia98 vip.qq.com 適用於生成環境備份指令碼 備份開始時間 echo start date y m...