麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL簡易備份方法

2019-09-08 23:26:38
字體:
來源:轉載
供稿:網(wǎng)友
    一.錯誤修正

    檢測 MySQL 內(nèi) phpBB 的 DB 後發(fā)現(xiàn),有個 users 的 table 是有問題的, 使用 myisamchk 嘗試去修護,發(fā)現(xiàn)還不行用預設方式修護,還要多加個 "-o" 的參數(shù)才行,在使用myisamchk 時,為避免還有用戶來存取 DB ,最好是能夠將 MySQL 服務停止,不然最少也要下個 "mysqladmin flush-tables" 後, 再作 myisamchk 指令,像:

myisamchk -o phpbb2_users.MYI

    這個動作,可能要作個2~3次,直到?jīng)]有錯誤的訊息出現(xiàn)!

    修護完,重新啟動 MySQL 服務後,就可以用 mysql 這個 client 的指令, 去 Query 一下 DB 內(nèi)容,測試看是否正常.很幸運的,DB的部份在此時, 運作是正常的.

    當然,在你要備份之前,假如能先檢測資料是否正確,那是最好不過了, 假如有需要,可以把檢測的工作,排定在備份工作之前,但是記得,這個檢測DB 的動作不要排定在 DB 高用量的那段時間,深夜無人上線的時段是個不錯的選擇!

    二.開始備份

    phpBB 討論區(qū)的資料檔,主要有兩個部份,就是 php 主程式和 DB 內(nèi)容, php 主程式的備份就比較簡單,只要把全部檔案 tar 起來就行了,就像:

tar cvfz phpbb2_20020601.tgz phpbb (上面的 phpbb 是指 phpBB 的 php 網(wǎng)頁程式存放目錄.)

    以後有改到 phpBB 網(wǎng)頁程式部份再重新備份一次就行,它的內(nèi)容資料都寫在DB 內(nèi),所以 php 程式檔部份異動性應該不大.

    再來就是 MySQL DB 部份了,預設 MySQL 的 DB 檔案是存在 /var/lib/mysql 內(nèi), 以 DB 名稱為目錄,目錄內(nèi)就是該 DB 的所有資料,像 phpbb2 這個 DB, 就是存在 /var/lib/mysql/phpbb2 內(nèi),在備份前,因為怕資料尚未完全寫入磁碟, 而且 MySQL 會 Lock 在使用的 DB 檔案,所以應該是要先把 MySQL 先 Shutdown 一下, 整個備份的程序可以下像下面的指令去完成:

/etc/rc.d/init.d/mysqld stop

tar cvfz phpbb2_db_20020601.tgz phpbb2

/etc/rc.d/init.d/mysqld start

(上面的 phpbb2 是指存放 phpbb2 這個 DB 的目錄.)

    對!這樣就可以了! 不過要注意的是,怕 DB 內(nèi)每個 Tables 間的資料有關關聯(lián)性, 所以最好是把整個 DB 一次備起來,單獨只備哪個 Tables 的檔案,以後回存時, 怕會有資料關聯(lián)不一致的問題!

    三.如何回存

    phpBB 討論區(qū)的回存,只需把檔案解回原來存放網(wǎng)頁的路徑就可以,用以下指令解開:

tar xvfz phpbb2_20020601.tgz

    DB 發(fā)生錯誤而要回存時,其實也不難,先找出最近一次完整正常的備份,先把現(xiàn)在錯誤的網(wǎng)頁或 DB 先更名或 tar 起來,再把好的備份給解開回原來目錄位置就行了,需要注意的是, MySQL 服務最好也是要先停止,回存完成後再啟動服務,回存 DB 的整個程序可能像下面:

/etc/rc.d/init.d/mysqld.stop

mv phpbb2 phpbb2_error

tar xvfz phpbb2_db_20020601.tgz

/etc/rc.d/init.d/mysqld.start

    然後再去測試一下網(wǎng)頁及資料庫! 看使用上是否正常就行了...

    四.MySQL線上備份

    使用像上面的"檔案"方式備份是個不錯的方法,它最少可以保持該主機某個時間點的完整檔案備份,但還是有一些問題需要考慮到,有些主機就不只建立一個 DB 而已, 總不能為了備份某個 DB 而把整個 MySQL 服務停止,備份檔案的方式,回存在原主機上一定適用,但假如 MySQL 版本升級,或是在那天,該網(wǎng)頁空間需遷機移機到別的主機時, 那就沒人敢保證備出來的資料檔可以用,所以我們可以考慮另一種備份的方式,是使用MySQL 本身提供的功能: "MySQL Data Dump",指令是 "mysqldump".

    使用 MySQL 的 Dump 功能可以把 DB 的"結構","資料"或"結構加資料" Dump 成文字檔, mysqldump 指令提供的彈性很大,你可以選擇把整個 DB Dump 成一個檔, 或是每個 Table 為一個檔,甚至是把結構檔和資料分開儲存都可以.

    檢測酷!學園的 phpBB 資料庫後發(fā)現(xiàn),以結構加資料 Full Dump 成一個檔案, 檔案的大小大約也是30幾MB左右. 在 Dump 之前最好多下個 Flush-Logs 更新 LOG, 所以整個 Dump 的指令如下:

mysqladmin -uroot -p flush-logs

mysqldump phpbb2 -uroot -p opt > phpbb2_20020601.sql

(phpbb2 是 DB 名稱, opt 是一個使用完整 Dump 參數(shù))

    再使用 time 指令去測試執(zhí)行時間,這個30幾 MB 的 DB , Dump 出來竟只要15秒左右, Query 的速度還真是快,假如只是要單獨 Dump 某個 Table 時,只要在上面的指令後, 轉出符號 ">" 前加個 Table 名稱就可以,如只要 phpbb2_users 這個 Table 的 Dump 時, 只要下:

mysqldump phpbb2 -uroot -p opt phpbb2_users > phpbb2_users_20020601.sql

    Dump 出來的檔案是個純文字檔,你可以用 tar 把它壓起來,以上面30幾 MB 的 DB 為例, 大約可以把檔案大小壓到1/3左右的大小,因為 Dump 出是文字檔,所有的資料都是以明文

    顯示,所以必須注意一下備份檔保存的安全性,而且建議備份檔最好再另外儲存於異地以及其他易於保存的媒體上,像光碟片或磁帶,這樣的備份才有意義.

    五.MySQL線上回存

    若要回存整個資料庫,只需將壓縮的備份檔還原成 Dump 的檔案,再用下面的指令回存:

mysql phpbb2 -uroot -p < phpbb2_20020601.sql

    這邊需注意的是,若建立備份時是以"opt"或"add-drop-table"為參數(shù)時,回存的動作是先將舊的 Table 先刪除,重建 Table 的結構後再把 Data 匯入,所以回存後, 所有的資料會回到你當時備份那個時間點,因此在回存資料時,可以考慮把現(xiàn)有錯誤或不完整的 DB 先備份一份下來,以備不時之需,或是拿來比對錯誤的地方在那里,當然你也可以把資料回存到另一個測試用的 DB 內(nèi),只要把上面指令的 DB 名稱改成你的測試用 DB 名稱即可.

    使用這種回存方式, MySQL 服務不需停止,也不會動到其他正在使用的 DB ,在一些提供MySQL 服務的虛擬主機,可用這種方式作你自己的 DB 備份及回存.

    另外,假如你是系統(tǒng)重建或是移機時,切需在新的 MySQL 內(nèi),新建一個空白 DB 後,才行作回存的工作,你可以用下面的指令建立:

mysql -uroot -p -e "CREATE DATABASE phpbb2"

    (上面的phpbb2是你要新建的 DB 名稱)

    另一種作法,先用 "mysql" 指令進入 "mysql client console", 然後再用:

CREATE DATABASE phpbb2;

這樣就行了,記得尾端要加個 ";" 符號該行指令才會執(zhí)行.

    六 開始排定備份

    知道備份的方法之後,就可以把整個備份的動作作成一個 Scirpt ,指定 DB 相關參數(shù)後, 便可利用 Crontab 排定備份的周期和時間,可以把下面的指令加入 Crontab 內(nèi):

00 04 * * * /home/dbadmin/backup

(backup 是 Script 的檔名)

    排定的時間當然最好是夜間離峰時. 以本文附錄提供的 Script 作備份規(guī)則說明,每日執(zhí)行備份作業(yè),以一周為一個周期,所以最近的資料是昨天,最久的資料是一星期前,每次備份是將指定的 DB Full Dump 成一個檔, 用 tar 壓縮後存入指定的路徑. 備份檔以 DB 的名稱加上星期來命名,星期的表示為"0" 代表星期日,"1"代表星期一,以此類推.

    目前該 Scirpt 一次只能備份一個 DB 而已,你可以加以修改以符合你的系統(tǒng)環(huán)境及需求.

    七 結語

    目前這個 Script 在測試機上測試的效果還不錯,以酷!學園討論區(qū)的2萬多篇討論文章, DB 總大小有30幾 MB, 跑這個 Script 大約只需要30幾秒就完成,下面是以 time 指令測試

    數(shù)次計算的結果:

[root@demo tmp]# time backup

real 0m32.788s

user 0m22.770s 

sys 0m4.610s

[root@demo tmp]# time backup

real 0m33.898s

user 0m24.740s

sys 0m4.590s

[root@demo tmp]# time backup

real 0m32.808s

user 0m23.710s

sys 0m4.750s

測試機的硬體配備是Intel Celeron 600 + 256mb SDRAM, 作業(yè)系統(tǒng)是CLE Linux 1.0.

因為 Dump 備份的速度很快,大部份作 MySQL 的備份都是這樣作的,假如是大型大量的DB 環(huán)境時,就需要考慮以 Incremental 的備份方式,而 MySQL 本身也提供這種備份方式, 這種備份方式,一周作一次完整的備份,每天只要作異動作業(yè)檔(LOG)的備份就行,在備份的成本上,可以節(jié)省備份時間和儲存空間.

完成了備份的工作安排,現(xiàn)在又可以和學園們一起快樂的上網(wǎng)沖浪去了...

.附錄-備份Script原始檔

#!/bin/sh

#

# Title: MySQL Backup Script

# Created: 2002.06.01

# Current: 2002.06.23

# Contact: Duncan Lo <[email protected] >

# Note: This script just only backup one database!

#

#

# Variables define for your server

#

# Database name

DBNAME="phpbb2"

# Database admins name

DBUSER="root"

# Database admins password

DBPASS="password"

# MySQL commands path

# default: /usr/bin

BINPATH="/usr/bin"

# Backup date format

BAKDATE=`date +%w`

# Path for backup files save to

BAKPATH="/usr/backup/phpbb"

# Temp directorys name

TMPDIR="tmp.dbbak".$BAKDATE

# Backup filess directory

BAKDIR="$DBNAME"_$BAKDATE

# Database tables list files name

TABLST="tables_list"

# Backup Type

# 0: All tables in one dump file

# 1: Pre table in one dump file

BAKTYPE="0"

#

# Script Start

#

#

# Create backup temp directory

#

cd /tmp

rm -rf $TMPDIR

mkdir $TMPDIR

cd $TMPDIR

mkdir $BAKDIR

cd $BAKDIR

#

# Create databases table list

#

$BINPATH/mysql $DBNAME -u$DBUSER -p$DBPASS -N -e "show tables" > $TABLST

#

# Flush databases LOG before dump

#

$BINPATH/mysqladmin -u$DBUSER -p$DBPASS flush-logs

#

# Choice one type to dump datebase

#

case $BAKTYPE in

0)

#

# Dump database all table in one file

#

$BINPATH/mysqldump $DBNAME -u$DBUSER -p$DBPASS opt > $DBNAME.sql

;;

1)

#

# Dump database pre table in one file

#

awk { print BINPATH"/mysqldump "DBNAME" -u"DBUSER" -p"DBPASS" /

opt " $1 " > " $1".sql" } /

BINPATH="$BINPATH" DBNAME="$DBNAME" DBUSER="$DBUSER" DBPASS="$DBPASS" /

$TABLST /

| /bin/sh

;;

*);;

esac

cd ..

#

# Compress backup files

#

tar cfz $BAKDIR.tgz $BAKDIR

#

# Move file to backup directory

#

mv $BAKDIR.tgz $BAKPATH

cd ..

#

# Clean temp files and directory

#

rm -rf $TMPDIR

#

# Script End

#

MYSQL

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲午夜久久久久 | av噜噜噜噜| 精品一区二区三区电影 | 九一免费版在线观看 | 中文字幕一区二区三区久久 | 国产精品一区二区三区在线看 | 男男羞羞视频网站国产 | 久久久国产一区二区三区 | 中文字幕在线观看精品 | 色就色 综合偷拍区91网 | 成人18网站 | 在线观看av国产一区二区 | 热99re久久免费视精品频软件 | fc2国产成人免费视频 | 久啪视频 | 免费国产在线视频 | 污污黄| 久久影院午夜 | 日产精品久久久一区二区福利 | www.成人免费视频 | arabxxxxvideos| 久久国产精品小视频 | 青青操精品| av一二三四区 | 精精国产xxxx视频在线野外 | 久久久久久久久浪潮精品 | 欧美成人精品一级 | 欧洲精品视频在线观看 | 亚洲午夜不卡 | xxxxhdvideosex | 免费a视频 | 97zyz成人免费视频 | 91美女福利视频 | 香蕉国产9 | 欧美一页 | 成人免费在线视频播放 | 亚洲精品无码不卡在线播放he | 国产精品av久久久久久网址 | 鲁久久 | 欧美日韩免费观看视频 | 88xx成人精品视频 |