真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql數(shù)據(jù)備份怎么快 mysql數(shù)據(jù)庫備份方法

備份mysql數(shù)據(jù)

其實你的這個問題是mysql中的一個核心問題,既mysql數(shù)據(jù)的備份和恢復

創(chuàng)新互聯(lián)為您提適合企業(yè)的網(wǎng)站設(shè)計?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強的網(wǎng)絡(luò)競爭力!結(jié)合企業(yè)自身,進行網(wǎng)站設(shè)計及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到網(wǎng)站設(shè)計制作、做網(wǎng)站, 我們的網(wǎng)頁設(shè)計師為您提供的解決方案。

你可以使用三種方式

1.使用sql語句導入導出

2.使用mysqldump 和mysqlimport 工具

3.直接copy 數(shù)據(jù)文件 既冷備份

你說說的詳細,就給積分,那我就說詳細些

一.使用sql語句完成mysql的備份和恢復

你可以使用SELECT INTO OUTFILE語句備份數(shù)據(jù),并用LOAD DATA INFILE語句恢復數(shù)據(jù)。這種方法只能導出數(shù)據(jù)的內(nèi)容,不包括表的結(jié)構(gòu),如果表的結(jié)構(gòu)文件損壞,你必須要先恢復原來的表的結(jié)構(gòu)。

語法:

SELECT * INTO {OUTFILE | DUMPFILE} 'file_name' FROM tbl_name

LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE]

INTO TABLE tbl_name

SELECT ... INTO OUTFILE 'file_name'格式的SELECT語句將選擇的行寫入一個文件。文件在服務器主機上被創(chuàng)建,并且不能是已經(jīng)存在的(不管別的,這可阻止數(shù)據(jù)庫表和文件例如“/etc/passwd”被破壞)。SELECT ... INTO OUTFILE是LOAD DATA INFILE逆操作。

LOAD DATA INFILE語句從一個文本文件中以很高的速度讀入一個表中。如果指定LOCAL關(guān)鍵詞,從客戶主機讀文件。如果LOCAL沒指定,文件必須位于服務器上。(LOCAL在MySQL3.22.6或以后版本中可用。)

為了安全原因,當讀取位于服務器上的文本文件時,文件必須處于數(shù)據(jù)庫目錄或可被所有人讀取。另外,為了對服務器上文件使用LOAD DATA INFILE,在服務器主機上你必須有file的權(quán)限。使用這種SELECT INTO OUTFILE語句,在服務器主機上你必須有FILE權(quán)限。

為了避免重復記錄,在表中你需要一個PRIMARY KEY或UNIQUE索引。當在唯一索引值上一個新記錄與一個老記錄重復時,REPLACE關(guān)鍵詞使得老記錄用一個新記錄替代。如果你指定IGNORE,跳過有唯一索引的現(xiàn)有行的重復行的輸入。如果你不指定任何一個選項,當找到重復索引值時,出現(xiàn)一個錯誤,并且文本文件的余下部分被忽略時。

如果你指定關(guān)鍵詞LOW_PRIORITY,LOAD DATA語句的執(zhí)行被推遲到?jīng)]有其他客戶讀取表后。

使用LOCAL將比讓服務器直接存取文件慢些,因為文件的內(nèi)容必須從客戶主機傳送到服務器主機。在另一方面,你不需要file權(quán)限裝載本地文件。如果你使用LOCAL關(guān)鍵詞從一個本地文件裝載數(shù)據(jù),服務器沒有辦法在操作的當中停止文件的傳輸,因此缺省的行為好像IGNORE被指定一樣。

當在服務器主機上尋找文件時,服務器使用下列規(guī)則:

? 如果給出一個絕對路徑名,服務器使用該路徑名。

? 如果給出一個有一個或多個前置部件的相對路徑名,服務器相對服務器的數(shù)據(jù)目錄搜索文件。

? 如果給出一個沒有前置部件的一個文件名,服務器在當前數(shù)據(jù)庫的數(shù)據(jù)庫目錄尋找文件。

假定表tbl_name具有一個PRIMARY KEY或UNIQUE索引,備份一個數(shù)據(jù)表的過程如下:

1、鎖定數(shù)據(jù)表,避免在備份過程中,表被更新

mysqlLOCK TABLES READ tbl_name;

關(guān)于表的鎖定的詳細信息,將在下一章介紹。

2、導出數(shù)據(jù)

mysqlSELECT * INTO OUTFILE ‘tbl_name.bak’ FROM tbl_name;

3、解鎖表

mysqlUNLOCK TABLES;

相應的恢復備份的數(shù)據(jù)的過程如下:

1、為表增加一個寫鎖定:

mysqlLOCK TABLES tbl_name WRITE;

2、恢復數(shù)據(jù)

mysqlLOAD DATA INFILE ‘tbl_name.bak’

-REPLACE INTO TABLE tbl_name;

如果,你指定一個LOW_PRIORITY關(guān)鍵字,就不必如上要對表鎖定,因為數(shù)據(jù)的導入將被推遲到?jīng)]有客戶讀表為止:

mysqlLOAD DATA LOW_PRIORITY INFILE ‘tbl_name’

-REPLACE INTO TABLE tbl_name;

3、解鎖表

mysql-UNLOCAK TABLES;

5.3.2使用mysqlimport恢復數(shù)據(jù)

如果你僅僅恢復數(shù)據(jù),那么完全沒有必要在客戶機中執(zhí)行SQL語句,因為你可以簡單的使用mysqlimport程序,它完全是與LOAD DATA 語句對應的,由發(fā)送一個LOAD DATA INFILE命令到服務器來運作。執(zhí)行命令mysqlimport --help,仔細查看輸出,你可以從這里得到幫助。

shell mysqlimport [options] db_name filename ...

對于在命令行上命名的每個文本文件,mysqlimport剝?nèi)ノ募臄U展名并且使用它決定哪個表導入文件的內(nèi)容。例如,名為“patient.txt”、“patient.text”和“patient”將全部被導入名為patient的一個表中。

常用的選項為:

-C, --compress 如果客戶和服務器均支持壓縮,壓縮兩者之間的所有信息。

-d, --delete 在導入文本文件前倒空表格。

l, --lock-tables 在處理任何文本文件前為寫入所定所有的表。這保證所有的表在服務器上被同步。

--low-priority,--local,--replace,--ignore分別對應LOAD DATA語句的LOW_PRIORITY,LOCAL,REPLACE,IGNORE關(guān)鍵字。

例如恢復數(shù)據(jù)庫db1中表tbl1的數(shù)據(jù),保存數(shù)據(jù)的文件為tbl1.bak,假定你在服務器主機上:

shellmysqlimport --lock-tables --replace db1 tbl1.bak

這樣在恢復數(shù)據(jù)之前現(xiàn)對表鎖定,也可以利用--low-priority選項:

shellmysqlimport --low-priority --replace db1 tbl1.bak

如果你為遠程的服務器恢復數(shù)據(jù),還可以這樣:

shellmysqlimport -C --lock-tables --replace db1 tbl1.bak

當然,解壓縮要消耗CPU時間。

象其它客戶機一樣,你可能需要提供-u,-p選項以通過身分驗證,也可以在選項文件my.cnf中存儲這些參數(shù),具體方法和其它客戶機一樣,這里就不詳述了。

二、使用mysqldump備份數(shù)據(jù)

同mysqlimport一樣,也存在一個工具mysqldump備份數(shù)據(jù),但是它比SQL語句多做的工作是可以在導出的文件中包括SQL語句,因此可以備份數(shù)據(jù)庫表的結(jié)構(gòu),而且可以備份一個數(shù)據(jù)庫,甚至整個數(shù)據(jù)庫系統(tǒng)。

mysqldump [OPTIONS] database [tables]

mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]

mysqldump [OPTIONS] --all-databases [OPTIONS]

如果你不給定任何表,整個數(shù)據(jù)庫將被傾倒。

通過執(zhí)行mysqldump --help,你能得到你mysqldump的版本支持的選項表。

1、備份數(shù)據(jù)庫的方法

例如,假定你在服務器主機上備份數(shù)據(jù)庫db_name

shell mydqldump db_name

當然,由于mysqldump缺省時把輸出定位到標準輸出,你需要重定向標準輸出。例如,把數(shù)據(jù)庫備份到bd_name.bak中:

shell mydqldump db_namedb_name.bak

你可以備份多個數(shù)據(jù)庫,注意這種方法將不能指定數(shù)據(jù)表:

shell mydqldump --databases db1 db1db.bak

你也可以備份整個數(shù)據(jù)庫系統(tǒng)的拷貝,不過對于一個龐大的系統(tǒng),這樣做沒有什么實際的價值:

shell mydqldump --all-databasesdb.bak

雖然用mysqldump導出表的結(jié)構(gòu)很有用,但是恢復大量數(shù)據(jù)時,眾多SQL語句使恢復的效率降低。你可以通過使用--tab選項,分開數(shù)據(jù)和創(chuàng)建表的SQL語句。

-T,--tab= 在選項指定的目錄里,創(chuàng)建用制表符(tab)分隔列值的數(shù)據(jù)文件和包含創(chuàng)建表結(jié)構(gòu)的SQL語句的文件,分別用擴展名.txt和.sql表示。該選項不能與--databases或--all-databases同時使用,并且mysqldump必須運行在服務器主機上。

例如,假設(shè)數(shù)據(jù)庫db包括表tbl1,tbl2,你準備備份它們到/var/mysqldb

shellmysqldump --tab=/var/mysqldb/ db

其效果是在目錄/var/mysqldb中生成4個文件,分別是tbl1.txt、tbl1.sql、tbl2.txt和tbl2.sql。

2、mysqldump實用程序時的身份驗證的問題

同其他客戶機一樣,你也必須提供一個MySQL數(shù)據(jù)庫帳號用來導出數(shù)據(jù)庫,如果你不是使用匿名用戶的話,可能需要手工提供參數(shù)或者使用選項文件:

如果這樣:

shellmysql -u root –pmypass db_namedb_name.sql

或者這樣在選項文件中提供參數(shù):

[mysqldump]

user=root

password=mypass

然后執(zhí)行

shellmysqldump db_namedb_name.sql

那么一切順利,不會有任何問題,但要注意命令歷史會泄漏密碼,或者不能讓任何除你之外的用戶能夠訪問選項文件,由于數(shù)據(jù)庫服務器也需要這個選項文件時,選項文件只能被啟動服務器的用戶(如,mysql)擁有和訪問,以免泄密。在Unix下你還有一個解決辦法,可以在自己的用戶目錄中提供個人選項文件(~/.my.cnf),例如,/home/some_user/.my.cnf,然后把上面的內(nèi)容加入文件中,注意防止泄密。在NT系統(tǒng)中,你可以簡單的讓c:\my.cnf能被指定的用戶訪問。

你可能要問,為什么這么麻煩呢,例如,這樣使用命令行:

shellmysql -u root –p db_namedb_name.sql

或者在選項文件中加入

[mysqldump]

user=root

password

然后執(zhí)行命令行:

shellmysql db_namedb_name.sql

你發(fā)現(xiàn)了什么?往常熟悉的Enter password:提示并沒有出現(xiàn),因為標準輸出被重定向到文件db_name.sql中了,所以看不到往常的提示符,程序在等待你輸入密碼。在重定向的情況下,再使用交互模式,就會有問題。在上面的情況下,你還可以直接輸入密碼。然后在文件db_name.sql文件的第一行看到:

Enter password:#……..

你可能說問題不大,但是mysqldump之所以把結(jié)果輸出到標準輸出,是為了重定向到其它程序的標準輸入,這樣有利于編寫腳本。例如:

用來自于一個數(shù)據(jù)庫的信息充實另外一個MySQL數(shù)據(jù)庫也是有用的:

shellmysqldump --opt database | mysql --host=remote-host -C database

如果mysqldump仍運行在提示輸入密碼的交互模式下,該命令不會成功,但是如果mysql是否運行在提示輸入密碼的交互模式下,都是可以的。

如果在選項文件中的[client]或者[mysqldump]任何一段中指定了password選項,且不提供密碼,即使,在另一段中有提供密碼的選項password=mypass,例如

[client]

user=root

password

[mysqldump]

user=admin

password=mypass

那么mysqldump一定要你輸入admin用戶的密碼:

mysqlmysqldump db_name

即使是這樣使用命令行:

mysqlmysqldump –u root –ppass1 db

也是這樣,不過要如果-u指定的用戶的密碼。

其它使用選項文件的客戶程序也是這樣

3、有關(guān)生成SQL語句的優(yōu)化控制

--add-locks 生成的SQL 語句中,在每個表數(shù)據(jù)恢復之前增加LOCK TABLES并且之后UNLOCK TABLE。(為了使得更快地插入到MySQL)。

--add-drop-table 生成的SQL 語句中,在每個create語句之前增加一個drop table。

-e, --extended-insert 使用全新多行INSERT語法。(給出更緊縮并且更快的插入語句)

下面兩個選項能夠加快備份表的速度:

-l, --lock-tables. 為開始導出數(shù)據(jù)前,讀鎖定所有涉及的表。

-q, --quick 不緩沖查詢,直接傾倒至stdout。

理論上,備份時你應該指定上訴所有選項。這樣會使命令行過于復雜,作為代替,你可以簡單的指定一個--opt選項,它會使上述所有選項有效。

例如,你將導出一個很大的數(shù)據(jù)庫:

shell mysqldump --opt db_name db_name.txt

當然,使用--tab選項時,由于不生成恢復數(shù)據(jù)的SQL語句,使用--opt時,只會加快數(shù)據(jù)導出。

4、恢復mysqldump備份的數(shù)據(jù)

由于備份文件是SQL語句的集合,所以需要在批處理模式下使用客戶機

? 如果你使用mysqldump備份單個數(shù)據(jù)庫或表,即:

shellmysqldump --opt db_name db_name.sql

由于db_name.sql中不包括創(chuàng)建數(shù)據(jù)庫或者選取數(shù)據(jù)庫的語句,你需要指定數(shù)據(jù)庫

shellmysql db2 db_name.sql

? 如果,你使用--databases或者--all-databases選項,由于導出文件中已經(jīng)包含創(chuàng)建和選用數(shù)據(jù)庫的語句,可以直接使用,不比指定數(shù)據(jù)庫,例如:

shellmysqldump --databases db_name db_name.sql

shellmysql db_name.sql

? 如果你使用--tab選項備份數(shù)據(jù),數(shù)據(jù)恢復可能效率會高些

例如,備份數(shù)據(jù)庫db_name后在恢復:

shellmysqldump --tab=/path/to/dir --opt test

如果要恢復表的結(jié)構(gòu),可以這樣:

shellmysql /path/to/dir/tbl1.sql

如果要恢復數(shù)據(jù),可以這樣

shellmysqlimport -l db /path/to/dir/tbl1.txt

如果是在Unix平臺下使用(推薦),就更方便了:

shellls -l *.sql | mysql db

shellmysqlimport --lock-tables db /path/to/dir/*.txt

三 .用直接拷貝的方法備份恢復

根據(jù)本章前兩節(jié)的介紹,由于MySQL的數(shù)據(jù)庫和表是直接通過目錄和表文件實現(xiàn)的,因此直接復制文件來備份數(shù)據(jù)庫數(shù)據(jù),對MySQL來說特別方便。而且自MySQL 3.23起MyISAM表成為缺省的表的類型,這種表可以為在不同的硬件體系中共享數(shù)據(jù)提供了保證。

使用直接拷貝的方法備份時,尤其要注意表沒有被使用,你應該首先對表進行讀鎖定。

備份一個表,需要三個文件:

對于MyISAM表:

tbl_name.frm 表的描述文件

tbl_name.MYD 表的數(shù)據(jù)文件

tbl_name.MYI 表的索引文件

對于ISAM表:

tbl_name.frm 表的描述文件

tbl_name.ISD 表的數(shù)據(jù)文件

tbl_name.ISM 表的索引文件

你直接拷貝文件從一個數(shù)據(jù)庫服務器到另一個服務器,對于MyISAM表,你可以從運行在不同硬件系統(tǒng)的服務器之間復制文件

像你這個問題,可以把遠程機器的mysql數(shù)據(jù)目錄ftp下載到你本地的mysql目錄下,重啟mysql就可以了

mysql數(shù)據(jù)庫怎么備份數(shù)據(jù)庫

1、備份一個數(shù)據(jù)庫

mysqldump基本語法:

mysqldump -u username -p dbname table1 table2 ...- BackupName.sql

2、直接復制整個數(shù)據(jù)庫目錄MySQL有一種非常簡單的備份方法,就是將MySQL中的數(shù)據(jù)庫文件直接復制出來。這是最簡單,速度最快的方法。

3、使用mysqlhotcopy工具快速備份

如何有效地提高 MySQL 的備份和恢復速度

如何有效地提高 MySQL 的備份和恢復速度

加了single-transaction參數(shù) 備份時 需要先flush table with read lock 這個過程中會有一個鎖表的過程,如果有事務或語句正在執(zhí)行,沒有結(jié)束,那么備份進程會一直等待,并且阻塞別的事務,那么也會影響業(yè)務。所以要先確認備份的時候沒有大的事務在運行。具體 single-transaction的加鎖可以參考 我的博客:mysqldump備份時加single-transaction會不會加鎖


分享題目:mysql數(shù)據(jù)備份怎么快 mysql數(shù)據(jù)庫備份方法
分享地址:http://weahome.cn/article/doopjde.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部