欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

mysql怎么恢復(fù)bak mysql誤刪除恢復(fù)

如何將linux中mysql備份恢復(fù)

一般是即時(shí)備份。做主從。或者是每天增量備份。

創(chuàng)新互聯(lián)長(zhǎng)期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為賈汪企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都做網(wǎng)站,賈汪網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

本文是在linux下,mysql 4.1.14版本下測(cè)試的,經(jīng)過(guò)適當(dāng)修改可能適合mysql 4.0,5.0及其其他版本.

本文適合于沒(méi)有啟動(dòng)復(fù)制功能的mysql,如果啟動(dòng)了復(fù)制,可能不需要采取這種備份策略或者需要修改相關(guān)參數(shù).

每個(gè)人的備份策略都可能不同,所以請(qǐng)根據(jù)實(shí)際情況修改,做到舉一反三,不要照搬照抄,可能會(huì)造成不必要的損失.

希望你明白這個(gè)腳本要干什么工作!

腳本描述

每7天備份一次所有數(shù)據(jù),每天備份binlog,也就是增量備份.

(如果數(shù)據(jù)少,每天備份一次完整數(shù)據(jù)即可,可能沒(méi)必要做增量備份)

作者對(duì)shell腳本不太熟悉,所以很多地方寫的很笨 :)

開(kāi)啟 bin log

在mysql 4.1版本中,默認(rèn)只有錯(cuò)誤日志,沒(méi)有其他日志.可以通過(guò)修改配置打開(kāi)bin log.方法很多,其中一個(gè)是在/etc/my.cnf中的mysqld部分加入:

[mysqld]

log-bin

這個(gè)日志的主要作用是增量備份或者復(fù)制(可能還有其他用途).

如果想增量備份,必須打開(kāi)這個(gè)日志.

對(duì)于數(shù)據(jù)庫(kù)操作頻繁的mysql,這個(gè)日志會(huì)變得很大,而且可能會(huì)有多個(gè).

在數(shù)據(jù)庫(kù)中flush-logs,或者使用mysqladmin,mysqldump調(diào)用flush-logs后并且使用參數(shù)delete-master-logs,這些日志文件會(huì)消失,并產(chǎn)生新的日志文件(開(kāi)始是空的).

所以如果從來(lái)不備份,開(kāi)啟日志可能沒(méi)有必要.

完整備份的同時(shí)可以調(diào)用flush-logs,增量備份之前flush-logs,以便備份最新的數(shù)據(jù).

完整備份腳本

如果數(shù)據(jù)庫(kù)數(shù)據(jù)比較多,我們一般是幾天或者一周備份一次數(shù)據(jù),以免影響應(yīng)用運(yùn)行,如果數(shù)據(jù)量比較小,那么一天備份一次也無(wú)所謂了.

#!/bin/sh

BakDir=/backup/mysql

LogFile=/backup/mysql/mysqlbak.log

DATE=`date +%Y%m%d`

echo " " $LogFile

echo " " $LogFile

echo "-------------------------------------------" $LogFile

echo $(date +"%y-%m-%d %H:%M:%S") $LogFile

echo "--------------------------" $LogFile

cd $BakDir

DumpFile=$DATE.sql

GZDumpFile=$DATE.sql.tgz

mysqldump --quick --all-databases --flush-logs

--delete-master-logs --lock-all-tables

$DumpFile

echo "Dump Done" $LogFile

tar czvf $GZDumpFile $DumpFile $LogFile 21

echo "[$GZDumpFile]Backup Success!" $LogFile

rm -f $DumpFile

#delete previous daily backup files:采用增量備份的文件,如果完整備份后,則刪除增量備份的文件.

cd $BakDir/daily

rm -f *

cd $BakDir

echo "Backup Done!"

echo "please Check $BakDir Directory!"

echo "copy it to your local disk or ftp to somewhere !!!"

ls -al $BakDir

上面的腳本把mysql備份到本地的/backup/mysql目錄,增量備份的文件放在/backup/mysql/daily目錄下.

注意:上面的腳本并沒(méi)有把備份后的文件傳送到其他遠(yuǎn)程計(jì)算機(jī),也沒(méi)有刪除幾天前的備份文件:需要用戶增加相關(guān)腳本,或者手動(dòng)操作.

增量備份

增量備份的數(shù)據(jù)量比較小,但是要在完整備份的基礎(chǔ)上操作,用戶可以在時(shí)間和成本上權(quán)衡,選擇最有利于自己的方式.

增量備份使用bin log,腳本如下:

#!/bin/sh

#

# mysql binlog backup script

#

/usr/bin/mysqladmin flush-logs

DATADIR=/var/lib/mysql

BAKDIR=/backup/mysql/daily

###如果你做了特殊設(shè)置,請(qǐng)修改此處或者修改應(yīng)用此變量的行:缺省取機(jī)器名,mysql缺省也是取機(jī)器名

HOSTNAME=`uname -n`

cd $DATADIR

FILELIST=`cat $HOSTNAME-bin.index`

##計(jì)算行數(shù),也就是文件數(shù)

COUNTER=0

for file in $FILELIST

do

COUNTER=`expr $COUNTER + 1 `

done

NextNum=0

for file in $FILELIST

do

base=`basename $file`

NextNum=`expr $NextNum + 1`

if [ $NextNum -eq $COUNTER ]

then

echo "skip lastest"

else

dest=$BAKDIR/$base

if(test -e $dest)

then

echo "skip exist $base"

else

echo "copying $base"

cp $base $BAKDIR

fi

fi

done

echo "backup mysql binlog ok"

增量備份腳本是備份前flush-logs,mysql會(huì)自動(dòng)把內(nèi)存中的日志放到文件里,然后生成一個(gè)新的日志文件,所以我們只需要備份前面的幾個(gè)即可,也就是不備份最后一個(gè).

因?yàn)閺纳洗蝹浞莸奖敬蝹浞菀部赡軙?huì)有多個(gè)日志文件生成,所以要檢測(cè)文件,如果已經(jīng)備份過(guò),就不用備份了.

注:同樣,用戶也需要自己遠(yuǎn)程傳送,不過(guò)不需要?jiǎng)h除了,完整備份后程序會(huì)自動(dòng)生成.

訪問(wèn)設(shè)置

腳本寫完了,為了能讓腳本運(yùn)行,還需要設(shè)置對(duì)應(yīng)的用戶名和密碼,mysqladmin和mysqldump都是需要用戶名和密碼的,當(dāng)然可以寫在腳本中,但是修改起來(lái)不太方便,假設(shè)我們用系統(tǒng)的root用戶來(lái)運(yùn)行此腳本,那么我們需要在/root(也就是root用戶的home目錄)創(chuàng)建一個(gè).my.cnf文件,內(nèi)容如下

[mysqladmin]

password =password

user= root

[mysqldump]

user=root

password=password

注:設(shè)置本文件只有root可讀.(chmod 600 .my.cnf )

此文件說(shuō)明程序使用mysql的root用戶備份數(shù)據(jù),密碼是對(duì)應(yīng)的設(shè)置.這樣就不需要在腳本里寫用戶名和密碼了.

自動(dòng)運(yùn)行

為了讓備份程序自動(dòng)運(yùn)行,我們需要把它加入crontab.

有2種方法,一種是把腳本根據(jù)自己的選擇放入到/etc/cron.daily,/etc/cron.weekly這么目錄里.

一種是使用crontab -e放入到root用戶的計(jì)劃任務(wù)里,例如完整備份每周日凌晨3點(diǎn)運(yùn)行,日常備份每周一-周六凌晨3點(diǎn)運(yùn)行.

mysql 怎么恢復(fù)備份的數(shù)據(jù)庫(kù)

把備份的數(shù)據(jù)庫(kù)導(dǎo)入?

mysql -u root --password=你自己的密碼 原庫(kù)備份出來(lái)的數(shù)據(jù)庫(kù)

比如

mysql -u root --password=abcdef VSMVSM_BAK

注意,此時(shí)備份文件在執(zhí)行命令時(shí)當(dāng)前所處的路徑,如果不是一個(gè)路徑后面需要寫出路徑

MYSQL如何還原.bak后綴名的數(shù)據(jù)庫(kù)

bak是sql server備份的文件,最好在sqlserver中還原,然后再生成sql的腳本文件

修改為mysql腳本語(yǔ)法文件。

怎么恢復(fù)mysql數(shù)據(jù)庫(kù)怎么恢復(fù)數(shù)據(jù)

簡(jiǎn)單情況下:進(jìn)入原來(lái)mysql安裝路徑下的data文件夾下,找到相應(yīng)的庫(kù)和ibdata1,進(jìn)行copy,就可回復(fù)原來(lái)的數(shù)據(jù)。

復(fù)雜情況下:

從另一臺(tái)機(jī)上把MySQL數(shù)據(jù)庫(kù)的mysql文件夾拷貝到本地機(jī)上,目的是恢復(fù)本地機(jī)對(duì)數(shù)據(jù)的訪問(wèn)和操作。經(jīng)過(guò)如下幾種情況的操作。

1.

在本地重裝MySQL(安裝目錄D:\Program

Files\MySQL\MySQL

Server

5.0),直接把mysql文件夾拷貝至D:\Program

Files\MySQL\MySQL

Server

5.0\。結(jié)果,失敗:數(shù)據(jù)庫(kù)連接錯(cuò)誤。

2.

卸載后重裝MySQL,將D:\Program

Files\MySQL\MySQL

Server

5.0\下的數(shù)據(jù)備份,只把mysql\data文件夾全部?jī)?nèi)容拷貝到D:\Program

Files\MySQL\MySQL

Server

5.0\data下。結(jié)果,失敗:數(shù)據(jù)庫(kù)連接錯(cuò)誤。將備份的數(shù)據(jù)還完覆蓋。結(jié)果,失敗,還是連接不上數(shù)據(jù)庫(kù)。

3.

卸載后重裝MySQL,將mysql\data文件夾里的cf1,last文件夾(這兩個(gè)是原來(lái)MySQL里的數(shù)據(jù)庫(kù))拷貝進(jìn)D:\Program

Files\MySQL\MySQL

Server

5.0\data。連接成功,在Navicat

for

MySQL里看到數(shù)據(jù)庫(kù)cf1和last,但是不能訪問(wèn),因?yàn)閿?shù)據(jù)全為零。明白了原來(lái)data里以數(shù)據(jù)庫(kù)命名的文件存儲(chǔ)的是數(shù)據(jù)庫(kù)的表結(jié)構(gòu),不是元數(shù)據(jù)。下一步,把data文件夾里的ibdata1文件(3.4G大,明顯存儲(chǔ)了元數(shù)據(jù))拷貝到D:\Program

Files\MySQL\MySQL

Server

5.0\data里,代替原來(lái)的ibdata1文件。重啟電腦,打開(kāi)Navicat

for

MySQL,連接成功,數(shù)據(jù)可以訪問(wèn)操作。

至此,操作終于成功。其實(shí)當(dāng)初在那臺(tái)機(jī)上把數(shù)據(jù)導(dǎo)出來(lái),而不是現(xiàn)在直接把文件夾mysql復(fù)制過(guò)來(lái)會(huì)更容易恢復(fù)。但那臺(tái)機(jī)已經(jīng)重裝了系統(tǒng),也就是說(shuō)MySQL失效了。

.bak數(shù)據(jù)庫(kù)備份文件還原到mysql數(shù)據(jù)庫(kù)中,怎么操作?

mysql備份出來(lái)的數(shù)據(jù)庫(kù)文件應(yīng)該是.sql的,應(yīng)該不是.bak的,如果.bak的文件里面是一些SQL語(yǔ)句的話你可以直接復(fù)制出來(lái),然后放到SQL里執(zhí)行一下就能恢復(fù)出來(lái)了

實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的備份與還原的幾種方法

MyISAM 表是保存成文件的形式,因此相對(duì)比較容易備份,上面提到的幾種方法都可以使用。Innodb 所有的表都保存在同一個(gè)數(shù)據(jù)文件 ibdata1 中(也可能是多個(gè)文件,或者是獨(dú)立的表空間文件),相對(duì)來(lái)說(shuō)比較不好備份,免費(fèi)的方案可以是拷貝數(shù)據(jù)文件、備份 binlog,或者用 mysqldump。1. 使用直接拷貝數(shù)據(jù)庫(kù)備份 典型的如cp、tar或cpio實(shí)用程序當(dāng)你使用直接備份方法時(shí),必須保證表不在被使用。如果服務(wù)器在你正在拷貝一個(gè)表時(shí)改變它,拷貝就失去意義。保證你的拷貝完整性的最好方法是關(guān)閉服務(wù)器,拷貝文件,然后重啟服務(wù)器。 如果你不想關(guān)閉服務(wù)器,要在執(zhí)行表檢查的同時(shí)鎖定服務(wù)器。如果服務(wù)器在運(yùn)行,相同的制約也適用于拷貝文件,應(yīng)該使用相同的鎖定協(xié)議讓服務(wù)器“安靜下來(lái)”。當(dāng)你完成了MySQL數(shù)據(jù)庫(kù)備份時(shí),需要重啟服務(wù)器(如果關(guān)閉了它)或釋放加在表上的鎖定(如果你讓服務(wù)器運(yùn)行)。 要用直接拷貝文件把一個(gè)數(shù)據(jù)庫(kù)從一臺(tái)機(jī)器拷貝到另一臺(tái)機(jī)器上,只是將文件拷貝到另一臺(tái)服務(wù)器主機(jī)的適當(dāng)數(shù)據(jù)目錄下即可。要確保文件是MyIASM格式或兩臺(tái)機(jī)器有相同的硬件結(jié)構(gòu),否則你的數(shù)據(jù)庫(kù)在另一臺(tái)主機(jī)上有奇怪的內(nèi)容。你也應(yīng)該保證在另一臺(tái)機(jī)器上的服務(wù)器在你正在安裝數(shù)據(jù)庫(kù)表時(shí)不訪問(wèn)它們。2. 使用mysqldump數(shù)據(jù)庫(kù)備份mysqldump 是采用SQL級(jí)別的備份機(jī)制,它將數(shù)據(jù)表導(dǎo)成 SQL 腳本文件,在不同的 MySQL 版本之間升級(jí)時(shí)相對(duì)比較合適,這也是最常用的備份方法。mysqldump程序備份數(shù)據(jù)庫(kù)較慢,但它生成的文本文件便于移植。mysqldump 的一些主要參數(shù):1)--compatible=name它告訴 mysqldump,導(dǎo)出的數(shù)據(jù)將和哪種數(shù)據(jù)庫(kù)或哪個(gè)舊版本的 MySQL 服務(wù)器相兼容。值可以為 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用幾個(gè)值,用逗號(hào)將它們隔開(kāi)。當(dāng)然了,它并不保證能完全兼容,而是盡量兼容。2)--complete-insert,-c導(dǎo)出的數(shù)據(jù)采用包含字段名的完整 INSERT 方式,也就是把所有的值都寫在一行。這么做能提高插入效率,但是可能會(huì)受到 max_allowed_packet 參數(shù)的影響而導(dǎo)致插入失敗。因此,需要謹(jǐn)慎使用該參數(shù),至少我不推薦。3)--default-character-set=charset指定導(dǎo)出數(shù)據(jù)時(shí)采用何種字符集,如果數(shù)據(jù)表不是采用默認(rèn)的 latin1 字符集的話,那么導(dǎo)出時(shí)必須指定該選項(xiàng),否則再次導(dǎo)入數(shù)據(jù)后將產(chǎn)生亂碼問(wèn)題。4)--disable-keys告訴mysqldump 在 INSERT 語(yǔ)句的開(kāi)頭和結(jié)尾增加 ; 和 ; 語(yǔ)句,這能大大提高插入語(yǔ)句的速度,因?yàn)樗窃诓迦胪晁袛?shù)據(jù)后才重建索引的。該選項(xiàng)只適合 MyISAM 表。5)--extended-insert = true|false默認(rèn)情況下,mysqldump 開(kāi)啟 --complete-insert 模式,因此不想用它的的話,就使用本選項(xiàng),設(shè)定它的值為 false 即可。6)--hex-blob使用十六進(jìn)制格式導(dǎo)出二進(jìn)制字符串字段。如果有二進(jìn)制數(shù)據(jù)就必須使用本選項(xiàng)。影響到的字段類型有 BINARY、VARBINARY、BLOB。7)--lock-all-tables,-x在開(kāi)始導(dǎo)出之前,提交請(qǐng)求鎖定所有數(shù)據(jù)庫(kù)中的所有表,以保證數(shù)據(jù)的一致性。這是一個(gè)全局讀鎖,并且自動(dòng)關(guān)閉 --single-transaction 和 --lock-tables 選項(xiàng)。8)--lock-tables它和--lock-all-tables 類似,不過(guò)是鎖定當(dāng)前導(dǎo)出的數(shù)據(jù)表,而不是一下子鎖定全部庫(kù)下的表。本選項(xiàng)只適用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 選項(xiàng)。9)--no-create-info,-t只導(dǎo)出數(shù)據(jù),而不添加 CREATE TABLE 語(yǔ)句。10)--no-data,-d不導(dǎo)出任何數(shù)據(jù),只導(dǎo)出數(shù)據(jù)庫(kù)表結(jié)構(gòu)。11)--opt這只是一個(gè)快捷選項(xiàng),等同于同時(shí)添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 選項(xiàng)。本選項(xiàng)能讓 mysqldump 很快的導(dǎo)出數(shù)據(jù),并且導(dǎo)出的數(shù)據(jù)能很快導(dǎo)回。該選項(xiàng)默認(rèn)開(kāi)啟,但可以用 --skip-opt 禁用。注意,如果運(yùn)行 mysqldump 沒(méi)有指定 --quick 或 --opt 選項(xiàng),則會(huì)將整個(gè)結(jié)果集放在內(nèi)存中。如果導(dǎo)出大數(shù)據(jù)庫(kù)的話可能會(huì)出現(xiàn)問(wèn)題。12)--quick,-q該選項(xiàng)在導(dǎo)出大表時(shí)很有用,它強(qiáng)制 mysqldump 從服務(wù)器查詢?nèi)〉糜涗浿苯虞敵龆皇侨〉盟杏涗浐髮⑺鼈兙彺娴絻?nèi)存中。13)--routines,-R導(dǎo)出存儲(chǔ)過(guò)程以及自定義函數(shù)。14)--single-transaction該選項(xiàng)在導(dǎo)出數(shù)據(jù)之前提交一個(gè) BEGIN SQL語(yǔ)句,BEGIN 不會(huì)阻塞任何應(yīng)用程序且能保證導(dǎo)出時(shí)數(shù)據(jù)庫(kù)的一致性狀態(tài)。它只適用于事務(wù)表,例如 InnoDB 和 BDB。 本選項(xiàng)和 --lock-tables 選項(xiàng)是互斥的,因?yàn)?LOCK TABLES 會(huì)使任何掛起的事務(wù)隱含提交。 要想導(dǎo)出大表的話,應(yīng)結(jié)合使用 --quick 選項(xiàng)。--triggers同時(shí)導(dǎo)出觸發(fā)器。該選項(xiàng)默認(rèn)啟用,用 --skip-triggers 禁用它。備份:使用mysqldump備份數(shù)據(jù)庫(kù)其實(shí)就是把數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ)成一系列CREATE TABLE和INSERT語(yǔ)句,通過(guò)這些語(yǔ)句我們就可重新生成數(shù)據(jù)庫(kù)。使用mysqldump的方法如下:% mysqldump --opt testdb | gzip /data/backup/testdb.bak#--opt選項(xiàng)會(huì)對(duì)轉(zhuǎn)儲(chǔ)過(guò)程進(jìn)行優(yōu)化,生成的備份文件會(huì)小一點(diǎn),后的管道操作會(huì)進(jìn)行數(shù)據(jù)壓縮% mysqldump --opt testdb mytable1,mytable2 | gzip /data/backup/testdb_mytable.bak#可在數(shù)據(jù)庫(kù)后接數(shù)據(jù)表名,只導(dǎo)出指定的數(shù)據(jù)表,多個(gè)數(shù)據(jù)表可用逗號(hào)分隔--opt選項(xiàng)還可激活--add-drop-table選項(xiàng),它將會(huì)在備份文件的每條CREATE TABLE前加上一條DROP TABLE IF EXISTS語(yǔ)句。這可方便進(jìn)行數(shù)據(jù)表的更新,而不會(huì)發(fā)生“數(shù)據(jù)表已存在”的錯(cuò)誤。用mysqldump命令還可直接把數(shù)據(jù)庫(kù)轉(zhuǎn)移到另外一臺(tái)服務(wù)器上,不用生成備份文件。重復(fù)執(zhí)行可定期更新遠(yuǎn)程數(shù)據(jù)庫(kù)。% mysqladmin -h remote_host create testdb% mysqldump --opt testdb | mysql -h remote_host testdb另外還可通過(guò)ssh遠(yuǎn)程調(diào)用服務(wù)器上的程序,如:% ssh remote_host mysqladmin create testdb% mysqldump --opt testdb | ssh remote_host mysql testdb 通過(guò)直接拷貝系統(tǒng)文件的方式備份數(shù)據(jù)庫(kù),在備份時(shí),要確保沒(méi)有人對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改操作。要做到這點(diǎn),最好關(guān)閉服務(wù)器。如果不能關(guān)閉的,要以只讀方試鎖定有關(guān)數(shù)據(jù)表。下面是一些示例:% cp -r db /backup/db #備份db數(shù)據(jù)庫(kù)到/backup/db目錄% cp table_name.* /backup/db #只備份table_name數(shù)據(jù)表% scp -r db remotehot:/usr/local/mysql/data #用scp把數(shù)據(jù)庫(kù)直接拷貝到遠(yuǎn)程服務(wù)器,在把數(shù)據(jù)庫(kù)直接拷貝到遠(yuǎn)程主機(jī)時(shí),應(yīng)注意兩臺(tái)機(jī)器必須有同樣的硬件結(jié)構(gòu),或者將拷貝的數(shù)據(jù)表全部是可移植數(shù)據(jù)表類型。或者/usr/local/mysql/bin/mysqldump -uroot -proot \--default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob -x testdb testdb.sql使用以下 SQL 來(lái)備份 Innodb 表:/usr/local/mysql/bin/mysqldump -uroot -proot \--default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob --single-transaction testdb testdb.sql另外,如果想要實(shí)現(xiàn)在線備份,還可以使用 --master-data 參數(shù)來(lái)實(shí)現(xiàn),如下:/usr/local/mysql/bin/mysqldump -uroot -proot \--default-character-set=utf8 --opt --master-data=1 \--single-transaction --flush-logs testdb testdb.sql它只是在一開(kāi)始的瞬間請(qǐng)求鎖表,然后就刷新binlog了,而后在導(dǎo)出的文件中加入CHANGE MASTER 語(yǔ)句來(lái)指定當(dāng)前備份的binlog位置,如果要把這個(gè)文件恢復(fù)到slave里去,就可以采用這種方法來(lái)做。 還原:用mysqldump 備份出來(lái)的文件是一個(gè)可以直接倒入的 SQL 腳本,有兩種方法可以將數(shù)據(jù)導(dǎo)入。直接用 mysql 客戶端例如:/usr/local/mysql/bin/mysql -uroot -proot testdb testdb.sql用SOURCE 語(yǔ)法其實(shí)這不是標(biāo)準(zhǔn)的 SQL 語(yǔ)法,而是 mysql 客戶端提供的功能,例如:SOURCE /tmp/testdb.sql;這里需要指定文件的絕對(duì)路徑,并且必須是 mysqld 運(yùn)行用戶(例如 nobody)有權(quán)限讀取的文件。 3. 使用mysqlhotcopy數(shù)據(jù)庫(kù)備份 使用mysqlhotcopy工具,它是一個(gè)Perl DBI腳本,可在不關(guān)閉服務(wù)器的情況下備份數(shù)據(jù)庫(kù),mysqlhotcopy 是一個(gè) PERL 程序,最初由Tim Bunce編寫。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 來(lái)快速備份數(shù)據(jù)庫(kù)。它是備份數(shù)據(jù)庫(kù)或單個(gè)表的最快的途徑,但它只能運(yùn)行在數(shù)據(jù)庫(kù)文件(包括數(shù)據(jù)表定義文件、數(shù)據(jù)文件、索引文件)所在的機(jī)器上。mysqlhotcopy 只能用于備份 MyISAM,并且只能運(yùn)行在 類Unix 和 NetWare 系統(tǒng)上。它主要的優(yōu)點(diǎn)是:它直接拷貝文件,所以它比mysqldump快。可自動(dòng)完成數(shù)據(jù)鎖定工作,備份時(shí)不用關(guān)閉服務(wù)器。能刷新日志,使備份文件和日志文件的檢查點(diǎn)能保持同步。備份:mysqlhotcopy 支持一次性拷貝多個(gè)數(shù)據(jù)庫(kù),同時(shí)還支持正則表達(dá)。以下是幾個(gè)例子:/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root -p=root \testdb /tmp (把數(shù)據(jù)庫(kù)目錄 testdb 拷貝到 /tmp 下)/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root -p=root \testdb_1 testdb_2 testdb_n /tmp/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root -p=root \testdb./regex/ /tmp 還原:mysqlhotcopy 備份出來(lái)的是整個(gè)數(shù)據(jù)庫(kù)目錄,使用時(shí)可以直接拷貝到 mysqld 指定的 datadir (在這里是 /usr/local/mysql/data/)目錄下即可,同時(shí)要注意權(quán)限的問(wèn)題,如下例:cp -rf testdb /usr/local/mysql/data/chown -R nobody:nobody /usr/local/mysql/data/ (將 testdb 目錄的屬主改成 mysqld 運(yùn)行用戶) 4. 使用SQL語(yǔ)句數(shù)據(jù)庫(kù)備份 BACKUP TABLE 語(yǔ)法其實(shí)和 mysqlhotcopy 的工作原理差不多,都是鎖表,然后拷貝數(shù)據(jù)文件。它能實(shí)現(xiàn)在線備份,但是效果不理想,因此不推薦使用。它只拷貝表結(jié)構(gòu)文件和數(shù)據(jù)文件,不同時(shí)拷貝索引文件,因此恢復(fù)時(shí)比較慢。備份:BACK TABLE tbl_test TO '/tmp/testdb/'; #把tbl_test數(shù)據(jù)庫(kù)備份到/tmp/testdb/目錄里,會(huì)自動(dòng)創(chuàng)建一個(gè)testdb目錄 為了執(zhí)行該語(yǔ)句,你必須擁有那些表的FILE權(quán)限和SELECT權(quán)限,備份目錄還必須是服務(wù)器可寫的。該語(yǔ)句執(zhí)行時(shí),會(huì)先把內(nèi)存中的數(shù)據(jù)寫入磁盤,再把各個(gè)數(shù)據(jù)表的.frm(表結(jié)構(gòu)定義文件)、.MYD(數(shù)據(jù))文件從數(shù)據(jù)目錄拷貝到備份目錄。它不拷貝.MYI(索引)文件,因?yàn)樗苡昧硗鈨蓚€(gè)文件重建。BACKUP TABLE語(yǔ)句備份時(shí),依次鎖定數(shù)據(jù)表,當(dāng)同時(shí)備份多個(gè)數(shù)據(jù)表時(shí),數(shù)據(jù)表可能會(huì)被修改,所以備份0完成時(shí),備份文件中的數(shù)據(jù)和現(xiàn)時(shí)數(shù)據(jù)表中的數(shù)據(jù)可能會(huì)有差異,為了消除該差異,我們可用只讀方式鎖定數(shù)據(jù)表,在備份完成后再解鎖。如:mysql LOCK TABLES tb1 READ,tb2 READ;mysql BACKUP TABLE tb1,tb2 TO 'backup/db';mysql UNLOCK TABLES;使用BACKUP TABLE語(yǔ)句備份的數(shù)據(jù)表可用RESTORE TABLE重新加載到服務(wù)器。注意,必須要有 FILE 權(quán)限才能執(zhí)行本SQL,并且目錄 /tmp/testdb/ 必須能被 mysqld 用戶可寫,導(dǎo)出的文件不能覆蓋已經(jīng)存在的文件,以避免安全問(wèn)題。SELECT INTO OUTFILE 則是把數(shù)據(jù)導(dǎo)出來(lái)成為普通的文本文件,可以自定義字段間隔的方式,方便處理這些數(shù)據(jù)。 例子:SELECT * INTO OUTFILE '/tmp/testdb/tbl_test.txt' FROM tbl_test;注意,必須要有 FILE 權(quán)限才能執(zhí)行本SQL,并且文件 /tmp/testdb/tbl_test.txt 必須能被 mysqld 用戶可寫,導(dǎo)出的文件不能覆蓋已經(jīng)存在的文件,以避免安全問(wèn)題。還原:用BACKUP TABLE 方法備份出來(lái)的文件,可以運(yùn)行 RESTORE TABLE 語(yǔ)句來(lái)恢復(fù)數(shù)據(jù)表。例子:RESTORE TABLE FROM '/tmp/testdb/';權(quán)限要求類似上面所述。用SELECT INTO OUTFILE 方法備份出來(lái)的文件,可以運(yùn)行 LOAD DATA INFILE 語(yǔ)句來(lái)恢復(fù)數(shù)據(jù)表。例子:LOAD DATA INFILE '/tmp/testdb/tbl_name.txt' INTO TABLE tbl_name;權(quán)限要求類似上面所述。倒入數(shù)據(jù)之前,數(shù)據(jù)表要已經(jīng)存在才行。

分享名稱:mysql怎么恢復(fù)bak mysql誤刪除恢復(fù)
本文網(wǎng)址:http://chinadenli.net/article42/hhjeec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃定制開(kāi)發(fā)App設(shè)計(jì)做網(wǎng)站微信公眾號(hào)搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名