MySQL數據庫的自動(dòng)備份與(yǔ)數(shù)據庫被破壞後(hòu)的恢複
一(yī)、前言:
當數據庫服(fú)務器建立好以後,我們首(shǒu)先要做的不是(shì)考慮要在這個支持數(shù)據庫的服務器運行哪些受MySQL提攜的程序,而是當數據庫遭到破壞後,怎(zěn)樣安然恢複到最後(hòu)一次(cì)正常的狀態,使得(dé)數據的損(sǔn)失達到(dào)最(zuì)小(xiǎo)。
或者說,僅僅是數(shù)據庫服務器的建立,隻能說明(míng)它能做些什麽,並不(bú)代(dài)表它(tā)能穩定的做(zuò)些什麽。災難(nán)恢複的效率及全(quán)麵性,也是(shì)係統的穩定性的一(yī)個準因(yīn)素(sù),尤(yóu)其對於一個服務器係統(tǒng)。
這一節,介紹數據庫(kù)自(zì)動備份(fèn)以及數據庫被(bèi)破壞後的恢複的方法(fǎ)。在這裏,我們使(shǐ)用mysqlhotcopy,並(bìng)且定義一段Shell腳本來實現數據庫(kù)的自動備份,並且,讓整個數據自動備份與數據(jù)恢複過程都基於Shell。
建立數據庫備(bèi)份所(suǒ)需條(tiáo)件
[1] 建立自動備份腳本
在這裏,為了使數據庫備份和恢複的符合我們的實際要(yào)求(qiú),用一段符合要求的Shell腳本來實現整(zhěng)個備(bèi)份過程的自動化。
[root@CentOS ~]# vi mysql-backup.sh ← 建(jiàn)立數據庫自動(dòng)備份腳本,如下: #!/bin/bash PATH=/usr/local/sbin:/usr/bin:/bin # The Directory of Backup BACKDIR=/backup/mysql # The Password of MySQL ROOTPASS=******** 此處請將星號替換成(chéng)MySQL的(de)root密(mì)碼 # Remake the Directory of Backup rm -rf $BACKDIR mkdir -p $BACKDIR # Get the Name of Database DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /` # Backup with Database for dbname in $DBLIST do mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy done |
[2] 運行數據庫自(zì)動備(bèi)份腳(jiǎo)本
[root@CentOS ~]# chmod 700 mysql-backup.sh 改(gǎi)變腳本屬性,讓(ràng)其隻(zhī)能(néng)讓root用戶(hù)執行 [root@CentOS ~]# ./mysql-backup.sh 運(yùn)行腳本 [root@CentOS ~]# ls -l /backup/mysql/ 確(què)認一下(xià)是否備份成功 total 8 drwxr-x--- 2 mysql mysql 4096 Sep 1 16:54 mysql 已(yǐ)成功(gōng)備份到(dào)/backup/mysql目錄中 |
[3] 讓數(shù)據庫備份腳本每天自動運行
[root@sample ~]# crontab -e ← 編(biān)輯自動運行規則(然(rán)後會出現編輯窗口,操作同vi) 00 03 * * * /root/mysql-backup.sh 添加這一行到文件中(zhōng),讓數據庫(kù)備(bèi)份每天淩(líng)晨3點進行 |
測試自(zì)動備份(fèn)正常運轉與(yǔ)否(備份恢複的(de)方法)
這(zhè)裏,以通過實際操作的過程來(lái)介紹(shào)問題出現後的恢複方法。
[1] 當數據庫(kù)被(bèi)刪除後的恢(huī)複方法
首(shǒu)先(xiān)建(jiàn)立一個測試用的數據庫。
[root@CentOS ~]# mysql -u root -p ← 用root登錄到MySQL服務器 Enter password: ← 輸入(rù)MySQL的root用戶密碼 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 to server version: 4.1.20 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create database test; ← 建立一個測試用的數據庫test Query OK, 1 row affected (0.00 sec) mysql> use test ← 連接到這(zhè)個數據庫(kù) Database changed mysql> create table test(num int, name varchar(50)); ← 在數據庫(kù)中建立(lì)一個表 Query OK, 0 rows affected (0.07 sec) mysql> insert into test values(1,'Hello,CentOS'); ← 插入一個值(zhí)到這個(gè)表(這裏以(yǐ)"Hello,CentOS"為例) Query OK, 1 row affected (0.02 sec) mysql> select * from test; ← 查看數(shù)據庫中的內容 +------+-----------------+ | num | name | +------+-----------------+ |1 | Hello,Centos | ← 確認剛剛插入到(dào)表(biǎo)中的值的存在 +------+------------------+ 1 row in set (0.01 sec) mysql> exit ← 退出MySQL服務器 Bye |
然(rán)後,運行(háng)剛才建立的數據庫(kù)備份腳本,備份剛剛建立(lì)的(de)測試用的數據庫。
[root@sample ~]# cd ← 回到腳本(běn)所(suǒ)在(zài)的root用戶的(de)根目錄 [root@sample ~]# ./mysql-backup.sh ← 運行(háng)腳本進行數(shù)據庫備份(fèn) |
接下來,我們再次登(dēng)錄到MySQL服務器中,刪除剛剛建立(lì)的測試(shì)用的數據(jù)庫test,以便於測(cè)試數據(jù)恢複能否成功(gōng)。
[root@Centos ~]# mysql -u root -p ← 用root登錄(lù)到(dào)MySQL服務器 Enter password: ← 輸入MySQL的root用戶密(mì)碼 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 to server version: 4.1.20 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> use test ← 連接到測試用的test數據庫 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> drop table test; ← 刪除數據中(zhōng)的表 Query OK, 0 rows affected (0.04 sec) mysql> drop database test; ← 刪除測試用數據庫(kù)test Query OK, 0 rows affected (0.01 sec) mysql> show databases; +---------------+ | Database | +---------------+ | mysql | |
關(guān)鍵詞(cí):MySQL數據(jù)庫
閱讀本文(wén)後您有什麽感想? 已有 人給(gěi)出評價!
- 2
- 2
- 3
- 3
- 2
- 2