定時備份mysql數據庫 并刪除7天前的備份 (windows linux )
@echo off
: basedata
set ip=10.39.28.234
set user=root
set password=root1234
set databaseName=crm_cloud
set /a backupDays=7
set mysqlBinPath=C:\Program Files (x86)\MySQL\MySQL Server 6.0\bin\
set mysqlBackupPath=C:\mysql_back\
set logs=%mysqlBackupPath%\logs.txt
set day=%date:~7,2%
set month=%date:~4,2%
set /a year=%date:~10,4%
if not exist %mysqlBackupPath% md %mysqlBackupPath%
echo %year%-%month%-%day% >> %logs%
set backupingFilePath=%mysqlBackupPath%\%databaseName%_%year%-%month%-%day%.sql
cd /d %mysqlBinPath%
echo backupdata >> %logs%
set errorlevel=0
echo errorlevel=%errorlevel%
mysqldump -h%ip% -u%user% -p%password% --default-character-set=gbk --opt --extended-insert=false --triggers -R --hex-blob -x %databaseName%>%backupingFilePath%
set /a myerrorlevel=%errorlevel%
echo myerrorlevel=%myerrorlevel%
if %myerrorlevel% leq 0 (
if exist %backupingFilePath% (
echo backupcomplete mysqlBackup_%year%-%month%-%day%.sql
echo backupcomplete mysqlBackup_%year%-%month%-%day%.sql >> %logs%
) else (
echo backupfaile
echo backupfaile >> %logs%
pause
exit
)
) else (
echo backupfail
echo backupfail >> %logs%
if exist %backupingFilePath% (
del %backupingFilePath%
)
pause
exit
)
rem delete backupDays's backup
set /a day=1%day%-100-backupDays
rem
if %day% lss 1 (
set /a daysTemp=day
call :daysOfLastMonth
) else set /a daysTemp=0
set /a day+=daysTemp
rem
if day lss 10 (set day=0%day%)
set /a month=%month%
if %month% lss 10 (set month=0%month%)
set deleteBackupFilePath=%databaseName%%year%%month%%day%.sql
echo mysqlBackup_%year%-%month%-%day%.sql
echo mysqlBackup_%year%-%month%-%day%.sql >> %logs%
if exist %mysqlBackupPath%\%deleteBackupFilePath% (
del %mysqlBackupPath%\%deleteBackupFilePath%
echo delcomplete >> %logs%
) else (
echo the document isn't exist >> %logs%
)
echo -----------------------------------------------------end >> %logs%
:daysOfLastMonth
set /a month=%month%-1
set /a mod1=%year%%%4
set /a mod2=%year%%%100
if %month% lss 1 (
set month=12
set year=%year%-1
set day=31
) else (
if %month% == 2 (
set day=28
if %mod1% == 0 (
set day=29
if mod2 == 0 (
set day=28
)
)
) else (
for %%a in (1 3 5 7 8 10 12) do (
if %month% == %%a (
set day=31
goto :eof
)
)
set day=30
)
)
goto :eof
以上為windows版本
----------------------------------------------------
以下為linux版本第一個
以下為第二個版本
第三個版本
我只需要
: basedata
set ip=10.39.28.234
set user=root
set password=root1234
set databaseName=crm_cloud
set /a backupDays=7
set mysqlBinPath=C:\Program Files (x86)\MySQL\MySQL Server 6.0\bin\
set mysqlBackupPath=C:\mysql_back\
set logs=%mysqlBackupPath%\logs.txt
set day=%date:~7,2%
set month=%date:~4,2%
set /a year=%date:~10,4%
if not exist %mysqlBackupPath% md %mysqlBackupPath%
echo %year%-%month%-%day% >> %logs%
set backupingFilePath=%mysqlBackupPath%\%databaseName%_%year%-%month%-%day%.sql
cd /d %mysqlBinPath%
echo backupdata >> %logs%
set errorlevel=0
echo errorlevel=%errorlevel%
mysqldump -h%ip% -u%user% -p%password% --default-character-set=gbk --opt --extended-insert=false --triggers -R --hex-blob -x %databaseName%>%backupingFilePath%
set /a myerrorlevel=%errorlevel%
echo myerrorlevel=%myerrorlevel%
if %myerrorlevel% leq 0 (
if exist %backupingFilePath% (
echo backupcomplete mysqlBackup_%year%-%month%-%day%.sql
echo backupcomplete mysqlBackup_%year%-%month%-%day%.sql >> %logs%
) else (
echo backupfaile
echo backupfaile >> %logs%
pause
exit
)
) else (
echo backupfail
echo backupfail >> %logs%
if exist %backupingFilePath% (
del %backupingFilePath%
)
pause
exit
)
rem delete backupDays's backup
set /a day=1%day%-100-backupDays
rem
if %day% lss 1 (
set /a daysTemp=day
call :daysOfLastMonth
) else set /a daysTemp=0
set /a day+=daysTemp
rem
if day lss 10 (set day=0%day%)
set /a month=%month%
if %month% lss 10 (set month=0%month%)
set deleteBackupFilePath=%databaseName%%year%%month%%day%.sql
echo mysqlBackup_%year%-%month%-%day%.sql
echo mysqlBackup_%year%-%month%-%day%.sql >> %logs%
if exist %mysqlBackupPath%\%deleteBackupFilePath% (
del %mysqlBackupPath%\%deleteBackupFilePath%
echo delcomplete >> %logs%
) else (
echo the document isn't exist >> %logs%
)
echo -----------------------------------------------------end >> %logs%
:daysOfLastMonth
set /a month=%month%-1
set /a mod1=%year%%%4
set /a mod2=%year%%%100
if %month% lss 1 (
set month=12
set year=%year%-1
set day=31
) else (
if %month% == 2 (
set day=28
if %mod1% == 0 (
set day=29
if mod2 == 0 (
set day=28
)
)
) else (
for %%a in (1 3 5 7 8 10 12) do (
if %month% == %%a (
set day=31
goto :eof
)
)
set day=30
)
)
goto :eof
以上為windows版本
----------------------------------------------------
以下為linux版本第一個
#!/bin/bash
#Write by oneleaf@gmail.com
#數據庫服務器地址
DBHOST=localhost
#數據庫登錄名
USERNAME=root
#數據庫密碼
PASSWORD=
#需要備份的數據庫 或 輸入類似 db1 db2 的列表清單
DBNAMES="all"
#備份MYSQL時生成CREATE數據庫語句
CREATE_DATABASE="yes"
#備份的目錄
BACKUPDIR="/tmp/mysqlbackup"
#發生到郵件的地址
MAILADDR="test@example.com"
#郵件最大附件尺寸2M
MAILMAXATTSIZE="2000000"
#當前備份日期和時間
DATE=`date +%Y-%m-%d_%H_%M`
OPT="--quote-names --opt"
#檢查備份路徑是否存在,不存在則建立
if [ ! -e "${BACKUPDIR}" ]; then
mkdir -p "${BACKUPDIR}"
fi
#刪除備份路徑下的所有文件
rm -fv ${BACKUPDIR}/*
#檢查是否需要生成CREATE數據庫語句
if [ "${CREATE_DATABASE}" = "yes" ]; then
OPT="${OPT} --databases"
else
OPT="${OPT} --no-create-db"
fi
#檢查是否是備份所有數據庫
if [ "${DBNAMES}" = "all" ]; then
DBNAMES="--all-databases"
fi
BACKUPFILE=${DATE}.sql.gz
cd ${BACKUPDIR}
#備份數據庫
`which mysqldump` --user=${USERNAME} --password=${PASSWORD} --host=${DBHOST} ${OPT} ${DBNAMES} |gzip > "${BACKUPFILE}"
#獲取備份文件的尺寸
BACKFILESIZE=`du -b ${BACKUPFILE}|sed -e "s/\t.*$//"`
#檢查是否需要分割
if [ ${BACKFILESIZE} -ge ${MAILMAXATTSIZE} ]; then
#分割數據庫,合并使用 cat ${BACKUPFILE}.* > ${BACKUPFILE}
`which split` -b ${MAILMAXATTSIZE} ${BACKUPFILE} ${BACKUPFILE}.
for BFILE in ${BACKUPFILE}.*
do
echo "Backup Databases: ${DBNAMES}; Use cat ${BACKUPFILE}.* > ${BACKUPFILE}" | mutt ${MAILADDR} -s "MySQL Backup SQL Files for ${HOST} - ${DATE}" -a "${BFILE}"
done
else
echo "Backup Databases: ${DBNAMES}" | mutt ${MAILADDR} -s "MySQL Backup SQL Files for ${HOST} - ${DATE}" -a "${BACKUPFILE}"
fi
--------------------------------------------------------------------------#Write by oneleaf@gmail.com
#數據庫服務器地址
DBHOST=localhost
#數據庫登錄名
USERNAME=root
#數據庫密碼
PASSWORD=
#需要備份的數據庫 或 輸入類似 db1 db2 的列表清單
DBNAMES="all"
#備份MYSQL時生成CREATE數據庫語句
CREATE_DATABASE="yes"
#備份的目錄
BACKUPDIR="/tmp/mysqlbackup"
#發生到郵件的地址
MAILADDR="test@example.com"
#郵件最大附件尺寸2M
MAILMAXATTSIZE="2000000"
#當前備份日期和時間
DATE=`date +%Y-%m-%d_%H_%M`
OPT="--quote-names --opt"
#檢查備份路徑是否存在,不存在則建立
if [ ! -e "${BACKUPDIR}" ]; then
mkdir -p "${BACKUPDIR}"
fi
#刪除備份路徑下的所有文件
rm -fv ${BACKUPDIR}/*
#檢查是否需要生成CREATE數據庫語句
if [ "${CREATE_DATABASE}" = "yes" ]; then
OPT="${OPT} --databases"
else
OPT="${OPT} --no-create-db"
fi
#檢查是否是備份所有數據庫
if [ "${DBNAMES}" = "all" ]; then
DBNAMES="--all-databases"
fi
BACKUPFILE=${DATE}.sql.gz
cd ${BACKUPDIR}
#備份數據庫
`which mysqldump` --user=${USERNAME} --password=${PASSWORD} --host=${DBHOST} ${OPT} ${DBNAMES} |gzip > "${BACKUPFILE}"
#獲取備份文件的尺寸
BACKFILESIZE=`du -b ${BACKUPFILE}|sed -e "s/\t.*$//"`
#檢查是否需要分割
if [ ${BACKFILESIZE} -ge ${MAILMAXATTSIZE} ]; then
#分割數據庫,合并使用 cat ${BACKUPFILE}.* > ${BACKUPFILE}
`which split` -b ${MAILMAXATTSIZE} ${BACKUPFILE} ${BACKUPFILE}.
for BFILE in ${BACKUPFILE}.*
do
echo "Backup Databases: ${DBNAMES}; Use cat ${BACKUPFILE}.* > ${BACKUPFILE}" | mutt ${MAILADDR} -s "MySQL Backup SQL Files for ${HOST} - ${DATE}" -a "${BFILE}"
done
else
echo "Backup Databases: ${DBNAMES}" | mutt ${MAILADDR} -s "MySQL Backup SQL Files for ${HOST} - ${DATE}" -a "${BACKUPFILE}"
fi
以下為第二個版本
ubuntu定時備份mysql,首先要寫一段shell腳本,用來備份mysql數據庫,再通過crontab定時執行備份mysql數據庫的shell腳本。
1.備份mysql的shell腳本如下:
?
1
2
3
4
5
6
#!/bin/bash
date_str=$(date +%Y%m%d-%T)
cd /home/steven/backup
mysqldump -h localhost -u root --password=xxxx -R -E -e \
--max_allowed_packet=1048576 --net_buffer_length=16384 databaseName\
| gzip > /home/steven/backup/juziku_$date_str.sql.gz
把上面這個腳本存放位置:/home/steven/mysql_backup.sh (當然,也可以放在其他位置)
再賦于執行的權限,通過下面命令:
sudo chmod +x /home/steven/mysql_backup.sh
完成這步,我們就來執行一下這段腳本,看能不能備份mysql數據庫。
在命令行輸入
./mysql_backup.sh
就可以看到備份好的數據庫文件了
2.完成上面這步,就可以備份mysql數據庫了,接下來,我們再通過crontab定時執行這段腳本。
使用crontab -e命令,這個命令的使用比較簡單。
在命令行輸入中,直接輸入 crontab -e
就會打開一個編輯窗口,最后一行會有內容格式的提示:
# m h dom mon dow command
具體意義表示:分鐘 小時 日期 月份 星期 命令,在某月(mon)的某天(dom)或者星期幾(dow)的幾點(h,24小時制)幾分(m)執行某個命令(command),*表示任意時間。例如:0 3 * * * /home/steven/mysql_backup.sh就是:每天早上3點,執行mysql_backup.sh腳本。
我們只要在里面添加一行就行了,內容如下:
?
1
2
# 備份mysql數據庫 每天早上3點整執行
0 3 * * * /home/steven/mysql_backup.sh
這樣,每天早上3點,就會自動備份mysql數據庫了。
-=----------------------------------------1.備份mysql的shell腳本如下:
?
1
2
3
4
5
6
#!/bin/bash
date_str=$(date +%Y%m%d-%T)
cd /home/steven/backup
mysqldump -h localhost -u root --password=xxxx -R -E -e \
--max_allowed_packet=1048576 --net_buffer_length=16384 databaseName\
| gzip > /home/steven/backup/juziku_$date_str.sql.gz
把上面這個腳本存放位置:/home/steven/mysql_backup.sh (當然,也可以放在其他位置)
再賦于執行的權限,通過下面命令:
sudo chmod +x /home/steven/mysql_backup.sh
完成這步,我們就來執行一下這段腳本,看能不能備份mysql數據庫。
在命令行輸入
./mysql_backup.sh
就可以看到備份好的數據庫文件了
2.完成上面這步,就可以備份mysql數據庫了,接下來,我們再通過crontab定時執行這段腳本。
使用crontab -e命令,這個命令的使用比較簡單。
在命令行輸入中,直接輸入 crontab -e
就會打開一個編輯窗口,最后一行會有內容格式的提示:
# m h dom mon dow command
具體意義表示:分鐘 小時 日期 月份 星期 命令,在某月(mon)的某天(dom)或者星期幾(dow)的幾點(h,24小時制)幾分(m)執行某個命令(command),*表示任意時間。例如:0 3 * * * /home/steven/mysql_backup.sh就是:每天早上3點,執行mysql_backup.sh腳本。
我們只要在里面添加一行就行了,內容如下:
?
1
2
# 備份mysql數據庫 每天早上3點整執行
0 3 * * * /home/steven/mysql_backup.sh
這樣,每天早上3點,就會自動備份mysql數據庫了。
第三個版本
我只需要
1、創建保存備份文件的目錄:/home/mysql_data
cd /home
mkdir mysql_data
2、創建備份腳本文件:/home/mysql_data/mysql_databak.sh
cd /home
cd mysql_data
touch mysql_databak.sh
vim mysql_databak.sh
輸入以下內容:
1
#!/bin/sh
2
/etc/init.d/mysqld stop #執行備份前先停止MySql,防止有數據正在寫
入,備份出錯
3
date=` date +%Y%m%d ` #獲取當前日期
4
DAYS=7 #DAYS=7代表刪除7天前的備份,即只保留最近
7天的備份
5
BK_DR=/home/mysql_data #備份文件存放路徑
6
DB_DR=/var/lib/mysql/pw85 #數據庫路徑
7
LINUX_USER=root #系統用戶名
8
tar zcvf $BK_DR/mysql_data$date.tar.gz $DB_DR #備份數據
========================================第2頁========================================
9
/etc/init.d/mysqld start #備份完成后,啟動MySql
10
chown -R $LINUX_USER:$LINUX_USER $BK_DR #更改備份
數據庫文件的所有者
11
find $BK_DR -name "mysql_data*" -type f -mtime +$DAYS -exec rm {} \
;
#刪除7天前的備份文件(注意:{} \;中間有空格)
12
deldate=` date -d -7day +%Y_%m_%d ` #刪除ftp服務器空間7天前的備份
13
ftp -n<open 192.168.1.1 21 #打開ftp服務器。21為ftp端口
14
user admin 123456 #用戶名、密碼
15
binary #設置二進制傳輸
16
cd mysqlbak #進入ftp目錄(注意:這個目錄必須真實存在)
17
lcd /home/mysql_data #列出本地目錄
18
prompt
19
mput mysql_data$date.tar.gz mysql_data$date.tar.gz #上傳目錄中的
文件
20
mdelete mysql_data$deldate.tar.gz mysql_data$deldate.tar.gz #刪除
ftp空間7天前的備份
21
close #關閉
22
bye ! #退出
3、修改文件屬性,使其可執行
chmod +x /home/mysql_data/mysql_databak.sh
4、修改/etc/crontab #添加計劃任務
vi /etc/crontab #在下面添加
5 23 * * * root /home/mysql_data/mysql_databak.sh #表示每天23點05分
執行備份
5、重新啟動crond使設置生效
/etc/rc.d/init.d/crond restart
chkconfig crond on #設為開機啟動
service crond start #啟動
cd /home
mkdir mysql_data
2、創建備份腳本文件:/home/mysql_data/mysql_databak.sh
cd /home
cd mysql_data
touch mysql_databak.sh
vim mysql_databak.sh
輸入以下內容:
1
#!/bin/sh
2
/etc/init.d/mysqld stop #執行備份前先停止MySql,防止有數據正在寫
入,備份出錯
3
date=` date +%Y%m%d ` #獲取當前日期
4
DAYS=7 #DAYS=7代表刪除7天前的備份,即只保留最近
7天的備份
5
BK_DR=/home/mysql_data #備份文件存放路徑
6
DB_DR=/var/lib/mysql/pw85 #數據庫路徑
7
LINUX_USER=root #系統用戶名
8
tar zcvf $BK_DR/mysql_data$date.tar.gz $DB_DR #備份數據
========================================第2頁========================================
9
/etc/init.d/mysqld start #備份完成后,啟動MySql
10
chown -R $LINUX_USER:$LINUX_USER $BK_DR #更改備份
數據庫文件的所有者
11
find $BK_DR -name "mysql_data*" -type f -mtime +$DAYS -exec rm {} \
;
#刪除7天前的備份文件(注意:{} \;中間有空格)
12
deldate=` date -d -7day +%Y_%m_%d ` #刪除ftp服務器空間7天前的備份
13
ftp -n<open 192.168.1.1 21 #打開ftp服務器。21為ftp端口
14
user admin 123456 #用戶名、密碼
15
binary #設置二進制傳輸
16
cd mysqlbak #進入ftp目錄(注意:這個目錄必須真實存在)
17
lcd /home/mysql_data #列出本地目錄
18
prompt
19
mput mysql_data$date.tar.gz mysql_data$date.tar.gz #上傳目錄中的
文件
20
mdelete mysql_data$deldate.tar.gz mysql_data$deldate.tar.gz #刪除
ftp空間7天前的備份
21
close #關閉
22
bye ! #退出
3、修改文件屬性,使其可執行
chmod +x /home/mysql_data/mysql_databak.sh
4、修改/etc/crontab #添加計劃任務
vi /etc/crontab #在下面添加
5 23 * * * root /home/mysql_data/mysql_databak.sh #表示每天23點05分
執行備份
5、重新啟動crond使設置生效
/etc/rc.d/init.d/crond restart
chkconfig crond on #設為開機啟動
service crond start #啟動
posted on 2012-04-23 11:42 順其自然EVO 閱讀(7372) 評論(0) 編輯 收藏 所屬分類: 數據庫