mysql使用腳本定時進行數據熱備份

按照數據庫狀態劃分
熱備
熱備份(Hot Backup)是指在數據庫運行中直接備份,對正在運行的數據庫沒有任何影響。

冷備
冷備份(Cold Backup)是指在數據庫停止的情況下進行備份,這種備份最爲簡單,一般只需要拷貝相關的數據庫物理文件即可
(由於要在數據庫停止的情況下進行備份,所以一般用的非常少)

冷備份的優點:
1.是非常快速的備份方法(只需拷貝文件)
2.容易歸檔(簡單拷貝即可)
3.容易恢復到某個時間點上(只需將文件再拷貝回去)
4.能與歸檔方法相結合,作數據庫“最新狀態”的恢復。
5.低度維護,高度安全。

冷備份的缺點:
1.單獨使用時,只能提供到“某一時間點上”的恢復。
2.在實施備份的全過程中,數據庫必須要作備份而不能作其它工作。也就是說,在冷備份過程中,數據庫必須是關閉狀態。
3.若磁盤空間有限,只能拷貝到磁帶等其它外部存儲設備上,速度會很慢。
4.不能按表或按用戶恢復。
值得注意的是冷備份必須在數據庫關閉的情況下進行,當數據庫處於打開狀態時,執行數據庫文件系統備份是無效的 。而且在恢復後一定要把數據庫文件的屬組和屬主改爲mysql。

熱備份 (on, 快)
熱備份是在數據庫運行的情況下,備份數據庫操作的sql語句,當數據庫發生問題時,可以重新執行一遍備份的sql語句。

熱備份的優點:
1.可在表空間或數據文件級備份,備份時間短。
2.備份時數據庫仍可使用。
3.可達到秒級恢復(恢復到某一時間點上)。
4.可對幾乎所有數據庫實體作恢復。
5.恢復是快速的,在大多數情況下在數據庫仍工作時恢復。

按照備份方式劃分
有兩種常見的備份方式
物理備份
直接複製數據文件進行的備份。
優點:無需額外工具,直接copy即可,恢復直接複製備份文件即可
缺點:與存儲引擎有關,跨平臺能力較弱

邏輯備份
從數據庫中“導出”數據另存而進行的備份
優點:能使用編輯器處理,恢復簡單,能基於網絡恢復,有助於避免數據損壞
缺點:備份文件較大,備份較慢,無法保證浮點數的精度,使用邏輯備份數據恢復後,還需手動重建索引,十分消耗CPU資源。

mysqldump熱備份的操作步驟:
一、創建備份目錄

mkdir   /data/mysql_bak

cd /data/mysql_bak

二、創建腳本
vi mysql_auto_back.sh

#!/usr/bin/env bash
#########數據庫基礎信息#############
DB_HOST=127.0.0.1
DB_NAME=$1
DB_USER=root
DB_PASS=123456
DATE=`date +%Y%m%d%H%M%S`
MYSQL_PATH=/data/mysql_bak/
#保存備份個數
BACK_NUM=3

##########################
back_up(){

#bakup file absolute path
BAKUP_FILE=${MYSQL_PATH}${DB_NAME}${DATE}.sql

#執行mysqldump命令的參數
SQL_OPT="-u${DB_USER} -p${DB_PASS} -h ${DB_HOST} ${DB_NAME}"

#執行備份,整個DB所有表的備份,SQL語句的形式
mysqldump ${SQL_OPT} > ${BAKUP_FILE}

# 刪除30天之前的就備份文件
#find ${MYSQL_PATH}/* -mtime +10 -exec rm {} \;

#寫創建備份日誌
echo "create ${BAKUP_FILE}"  >> ${MYSQL_PATH}log.txt

#找出需要刪除的備份
delfile=`ls -l -crt  ${MYSQL_PATH}$1*.sql | awk '{print $9 }' | head -1`
#echo "${delfile}"

#判斷現在的備份數量是否大於$number
count=`ls -l -crt  ${MYSQL_PATH}$1*.sql | awk '{print $9 }' | wc -l`
if [[ $count -gt $BACK_NUM ]];then
     #刪除最早生成的備份,只保留number數量的備份
     rm $delfile
     #寫刪除文件日誌
     echo "delete $delfile" >> ${MYSQL_PATH}log.txt
fi
}
back_up;
#############腳本結束##############

3、腳本賦予執行權限

chmod  a+x    mysql_auto_back.sh

4、測試腳本正確性,備份mysql庫,執行4次,查看日誌,看是否正確

./    mysql_auto_back.sh   mysql

執行4次,查看結果
在這裏插入圖片描述

5、配置定時任務
crontab -e
#每晚5點備份一次

30 5 * * * /data/mysql_bak/mysql_auto_back.sh   mysql

說明:
最好本機和選一臺遠程機器都配置一個這樣的定時備份任務。
這樣,當數據庫服務器出現了故障,至少數據不會大面積的丟失。
當然,如果你的mysql配置了主從,備份的數據更加實時。當主機出現故障後,可以直接切到備機上。

熱備份也可以防止對數據庫的誤操作(由於主從同步,從機上的數據也會被刪除)
比如有同事故意或者粗心,將生產庫誤操作刪除,那最起碼我可以追回前一天的數據,而不會所有數據都丟失。

所以,針對線上環境的數據庫,一般都是主從備份 + mysqldump多點熱備份

到這裏使用mysql使用腳本定時進行數據冷備就配置完成了。

6、sql文件還原方法
1、
(-f 參數表示在導出過程中忽略出現的SQL錯誤)

mysql -uroot -p"db_password"   -f dbname < backup.sql 

(在導入較大的sql文件時可以放到後臺執行)

nohup mysql -uroot -p"db_password" -f dbname < backup.sql > /dev/null 2>&1 &

2、
mysql -uroot -p 先登錄到數據庫,
use dbname; 切換到需要導入的庫中
然後執行 source /opt/backup.sql; 這樣就可以導入了

mysqldump備份常見用法
1、導出整個數據庫(包括數據庫中的數據)
mysqldump -u username -p dbname > dbname.sql

2、導出數據庫結構(不含數據)
mysqldump -u username -p -d dbname > dbname.sql

–databases, -B 導出多少數據庫,參數後面所有參量都被看作數據庫名
–no-data, -d 不導出任何數據,只導出數據庫表結構
–no-create-info, -t 只導出數據,而不添加CREATE TABLE 語句
–no-create-db, -n 只導出數據,而不添加CREATE DATABASE 語句

MySQL 5.6 警告信息 command line interface can be insecure 修復
https://blog.51cto.com/880314/1348413

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章