⑴ navicat for mysql的備份和還原資料庫的sql語句是什麼
備份
mysqlmp -u 用戶名 -p密碼 資料庫名 > 導出的文件名
如:
mysqlmp -u root -p123456 database_name > outfile_name.sql
還原
mysql -u root -p123456 databse_name < outfile_name.sql
mysqlmp有更多參數可以使用,如壓縮、只備份表結構等,使用 mysqlmp --help可查看詳細命令。
⑵ SQL怎樣用SQL語句備份一張數據表
「AS 附近有語法錯誤」這個提示應該是SQL SERVER的,可見樓主是在SQL Server里執行的,而create table ... as是ORACLE的語句,在SQL Server里是不能執行的,SQL Server里類似的就是select * into person_backup from person。
⑶ mysql備份資料庫表命令
Mysqlmp命令用於備份資料庫,語法為 mysqlmp -h 資料庫地址 -u root -p test資料庫 〉test.sql
⑷ SQL語句:怎麼對某個資料庫中的數據表進行備份與還原
1、導出整個資料庫:包括表結構和數據部分
mysqlmp -u 用戶名 -p 資料庫名 > 導出的文件名
例如:mysqlmp –u root –p 111111 test1 > test.sql
2、導出資料庫中的一個表
mysqlmp -u 用戶名 -p 資料庫名 表名> 導出的文件名
例如:mysqlmp –u root –p 111111 test1 user1> test1_user1.sql
3、導出多張表:
mysqlmp –u root –p 111111 test1 user1 user2> test1_user12.sql
4、導出一個資料庫結構:只導出表結構,不包括數據部分
mysqlmp -u root –p 111111 -d --add-drop-table test1>c:\test1.sql
-d 沒有數據
--add-drop-table 在每個 create 語句之前增加一個 drop table,以便於在每次導入
表到資料庫中時,如果發現某個表存在,先進行刪除。
5、導入資料庫
採用 source 命令,進入到 mysql 資料庫控制台。例如:
c:\>mysql -u root –p 111111
mysql>use test1 //改變當前資料庫為 test1 資料庫,注意 test1資料庫要先建好
然後使用 source 命令,後面參數為腳本文件(如前面備份的.sql 語句文件)
mysql>source c:\test1.sql
⑸ 如何使用sql語句備份和恢復mysql資料庫
一般使用的命令: mysqlmp --quick --database ondemand1 --u root >bacqup.sql 這樣就能把資料庫中ondemand1的表全部備份出來。 其中參數的格式是:--(兩橫杠,不是我們常用的單橫杠) quick是在數據比較多的時候,不用該參數的話,所有的數據都會先在內存緩存,接著才導出,這樣會導致伺服器運行減慢! --u 必須要加一個用戶名,否則系統會提示你進不了ODBC資料庫的。 >backup.sql則是你備份資料庫的目標文件名
數據導入: 可以使用MySQL-Front工具把上面導出的backup.sql資料庫導入執行。
以下導入方法未測試是否可行!
⑹ 備份mysql數據
其實你的這個問題是mysql中的一個核心問題,既mysql數據的備份和恢復
你可以使用三種方式
1.使用sql語句導入導出
2.使用mysqlmp 和mysqlimport 工具
3.直接 數據文件 既冷備份
你說說的詳細,就給積分,那我就說詳細些
一.使用sql語句完成mysql的備份和恢復
你可以使用SELECT INTO OUTFILE語句備份數據,並用LOAD DATA INFILE語句恢復數據。這種方法只能導出數據的內容,不包括表的結構,如果表的結構文件損壞,你必須要先恢復原來的表的結構。
語法:
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語句將選擇的行寫入一個文件。文件在伺服器主機上被創建,並且不能是已經存在的(不管別的,這可阻止資料庫表和文件例如「/etc/passwd」被破壞)。SELECT ... INTO OUTFILE是LOAD DATA INFILE逆操作。
LOAD DATA INFILE語句從一個文本文件中以很高的速度讀入一個表中。如果指定LOCAL關鍵詞,從客戶主機讀文件。如果LOCAL沒指定,文件必須位於伺服器上。(LOCAL在MySQL3.22.6或以後版本中可用。)
為了安全原因,當讀取位於伺服器上的文本文件時,文件必須處於資料庫目錄或可被所有人讀取。另外,為了對伺服器上文件使用LOAD DATA INFILE,在伺服器主機上你必須有file的許可權。使用這種SELECT INTO OUTFILE語句,在伺服器主機上你必須有FILE許可權。
為了避免重復記錄,在表中你需要一個PRIMARY KEY或UNIQUE索引。當在唯一索引值上一個新記錄與一個老記錄重復時,REPLACE關鍵詞使得老記錄用一個新記錄替代。如果你指定IGNORE,跳過有唯一索引的現有行的重復行的輸入。如果你不指定任何一個選項,當找到重復索引值時,出現一個錯誤,並且文本文件的餘下部分被忽略時。
如果你指定關鍵詞LOW_PRIORITY,LOAD DATA語句的執行被推遲到沒有其他客戶讀取表後。
使用LOCAL將比讓伺服器直接存取文件慢些,因為文件的內容必須從客戶主機傳送到伺服器主機。在另一方面,你不需要file許可權裝載本地文件。如果你使用LOCAL關鍵詞從一個本地文件裝載數據,伺服器沒有辦法在操作的當中停止文件的傳輸,因此預設的行為好像IGNORE被指定一樣。
當在伺服器主機上尋找文件時,伺服器使用下列規則:
如果給出一個絕對路徑名,伺服器使用該路徑名。
如果給出一個有一個或多個前置部件的相對路徑名,伺服器相對伺服器的數據目錄搜索文件。
如果給出一個沒有前置部件的一個文件名,伺服器在當前資料庫的資料庫目錄尋找文件。
假定表tbl_name具有一個PRIMARY KEY或UNIQUE索引,備份一個數據表的過程如下:
1、鎖定數據表,避免在備份過程中,表被更新
mysql>LOCK TABLES READ tbl_name;
關於表的鎖定的詳細信息,將在下一章介紹。
2、導出數據
mysql>SELECT * INTO OUTFILE 『tbl_name.bak』 FROM tbl_name;
3、解鎖表
mysql>UNLOCK TABLES;
相應的恢復備份的數據的過程如下:
1、為表增加一個寫鎖定:
mysql>LOCK TABLES tbl_name WRITE;
2、恢復數據
mysql>LOAD DATA INFILE 『tbl_name.bak』
->REPLACE INTO TABLE tbl_name;
如果,你指定一個LOW_PRIORITY關鍵字,就不必如上要對表鎖定,因為數據的導入將被推遲到沒有客戶讀表為止:
mysql>LOAD DATA LOW_PRIORITY INFILE 『tbl_name』
->REPLACE INTO TABLE tbl_name;
3、解鎖表
mysql->UNLOCAK TABLES;
5.3.2使用mysqlimport恢復數據
如果你僅僅恢復數據,那麼完全沒有必要在客戶機中執行SQL語句,因為你可以簡單的使用mysqlimport程序,它完全是與LOAD DATA 語句對應的,由發送一個LOAD DATA INFILE命令到伺服器來運作。執行命令mysqlimport --help,仔細查看輸出,你可以從這里得到幫助。
shell> mysqlimport [options] db_name filename ...
對於在命令行上命名的每個文本文件,mysqlimport剝去文件名的擴展名並且使用它決定哪個表導入文件的內容。例如,名為「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關鍵字。
例如恢復資料庫db1中表tbl1的數據,保存數據的文件為tbl1.bak,假定你在伺服器主機上:
shell>mysqlimport --lock-tables --replace db1 tbl1.bak
這樣在恢復數據之前現對表鎖定,也可以利用--low-priority選項:
shell>mysqlimport --low-priority --replace db1 tbl1.bak
如果你為遠程的伺服器恢復數據,還可以這樣:
shell>mysqlimport -C --lock-tables --replace db1 tbl1.bak
當然,解壓縮要消耗CPU時間。
象其它客戶機一樣,你可能需要提供-u,-p選項以通過身分驗證,也可以在選項文件my.cnf中存儲這些參數,具體方法和其它客戶機一樣,這里就不詳述了。
二、使用mysqlmp備份數據
同mysqlimport一樣,也存在一個工具mysqlmp備份數據,但是它比SQL語句多做的工作是可以在導出的文件中包括SQL語句,因此可以備份資料庫表的結構,而且可以備份一個資料庫,甚至整個資料庫系統。
mysqlmp [OPTIONS] database [tables]
mysqlmp [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
mysqlmp [OPTIONS] --all-databases [OPTIONS]
如果你不給定任何錶,整個資料庫將被傾倒。
通過執行mysqlmp --help,你能得到你mysqlmp的版本支持的選項表。
1、備份資料庫的方法
例如,假定你在伺服器主機上備份資料庫db_name
shell> mydqlmp db_name
當然,由於mysqlmp預設時把輸出定位到標准輸出,你需要重定向標准輸出。例如,把資料庫備份到bd_name.bak中:
shell> mydqlmp db_name>db_name.bak
你可以備份多個資料庫,注意這種方法將不能指定數據表:
shell> mydqlmp --databases db1 db1>db.bak
你也可以備份整個資料庫系統的拷貝,不過對於一個龐大的系統,這樣做沒有什麼實際的價值:
shell> mydqlmp --all-databases>db.bak
雖然用mysqlmp導出表的結構很有用,但是恢復大量數據時,眾多SQL語句使恢復的效率降低。你可以通過使用--tab選項,分開數據和創建表的SQL語句。
-T,--tab= 在選項指定的目錄里,創建用製表符(tab)分隔列值的數據文件和包含創建表結構的SQL語句的文件,分別用擴展名.txt和.sql表示。該選項不能與--databases或--all-databases同時使用,並且mysqlmp必須運行在伺服器主機上。
例如,假設資料庫db包括表tbl1,tbl2,你准備備份它們到/var/mysqldb
shell>mysqlmp --tab=/var/mysqldb/ db
其效果是在目錄/var/mysqldb中生成4個文件,分別是tbl1.txt、tbl1.sql、tbl2.txt和tbl2.sql。
2、mysqlmp實用程序時的身份驗證的問題
同其他客戶機一樣,你也必須提供一個MySQL資料庫帳號用來導出資料庫,如果你不是使用匿名用戶的話,可能需要手工提供參數或者使用選項文件:
如果這樣:
shell>mysql -u root –pmypass db_name>db_name.sql
或者這樣在選項文件中提供參數:
[mysqlmp]
user=root
password=mypass
然後執行
shell>mysqlmp db_name>db_name.sql
那麼一切順利,不會有任何問題,但要注意命令歷史會泄漏密碼,或者不能讓任何除你之外的用戶能夠訪問選項文件,由於資料庫伺服器也需要這個選項文件時,選項文件只能被啟動伺服器的用戶(如,mysql)擁有和訪問,以免泄密。在Unix下你還有一個解決辦法,可以在自己的用戶目錄中提供個人選項文件(~/.my.cnf),例如,/home/some_user/.my.cnf,然後把上面的內容加入文件中,注意防止泄密。在NT系統中,你可以簡單的讓c:\my.cnf能被指定的用戶訪問。
你可能要問,為什麼這么麻煩呢,例如,這樣使用命令行:
shell>mysql -u root –p db_name>db_name.sql
或者在選項文件中加入
[mysqlmp]
user=root
password
然後執行命令行:
shell>mysql db_name>db_name.sql
你發現了什麼?往常熟悉的Enter password:提示並沒有出現,因為標准輸出被重定向到文件db_name.sql中了,所以看不到往常的提示符,程序在等待你輸入密碼。在重定向的情況下,再使用交互模式,就會有問題。在上面的情況下,你還可以直接輸入密碼。然後在文件db_name.sql文件的第一行看到:
Enter password:#……..
你可能說問題不大,但是mysqlmp之所以把結果輸出到標准輸出,是為了重定向到其它程序的標准輸入,這樣有利於編寫腳本。例如:
用來自於一個資料庫的信息充實另外一個MySQL資料庫也是有用的:
shell>mysqlmp --opt database | mysql --host=remote-host -C database
如果mysqlmp仍運行在提示輸入密碼的交互模式下,該命令不會成功,但是如果mysql是否運行在提示輸入密碼的交互模式下,都是可以的。
如果在選項文件中的[client]或者[mysqlmp]任何一段中指定了password選項,且不提供密碼,即使,在另一段中有提供密碼的選項password=mypass,例如
[client]
user=root
password
[mysqlmp]
user=admin
password=mypass
那麼mysqlmp一定要你輸入admin用戶的密碼:
mysql>mysqlmp db_name
即使是這樣使用命令行:
mysql>mysqlmp –u root –ppass1 db
也是這樣,不過要如果-u指定的用戶的密碼。
其它使用選項文件的客戶程序也是這樣
3、有關生成SQL語句的優化控制
--add-locks 生成的SQL 語句中,在每個表數據恢復之前增加LOCK TABLES並且之後UNLOCK TABLE。(為了使得更快地插入到MySQL)。
--add-drop-table 生成的SQL 語句中,在每個create語句之前增加一個drop table。
-e, --extended-insert 使用全新多行INSERT語法。(給出更緊縮並且更快的插入語句)
下面兩個選項能夠加快備份表的速度:
-l, --lock-tables. 為開始導出數據前,讀鎖定所有涉及的表。
-q, --quick 不緩沖查詢,直接傾倒至stdout。
理論上,備份時你應該指定上訴所有選項。這樣會使命令行過於復雜,作為代替,你可以簡單的指定一個--opt選項,它會使上述所有選項有效。
例如,你將導出一個很大的資料庫:
shell> mysqlmp --opt db_name > db_name.txt
當然,使用--tab選項時,由於不生成恢復數據的SQL語句,使用--opt時,只會加快數據導出。
4、恢復mysqlmp備份的數據
由於備份文件是SQL語句的集合,所以需要在批處理模式下使用客戶機
如果你使用mysqlmp備份單個資料庫或表,即:
shell>mysqlmp --opt db_name > db_name.sql
由於db_name.sql中不包括創建資料庫或者選取資料庫的語句,你需要指定資料庫
shell>mysql db2 < db_name.sql
如果,你使用--databases或者--all-databases選項,由於導出文件中已經包含創建和選用資料庫的語句,可以直接使用,不比指定資料庫,例如:
shell>mysqlmp --databases db_name > db_name.sql
shell>mysql <db_name.sql
如果你使用--tab選項備份數據,數據恢復可能效率會高些
例如,備份資料庫db_name後在恢復:
shell>mysqlmp --tab=/path/to/dir --opt test
如果要恢復表的結構,可以這樣:
shell>mysql < /path/to/dir/tbl1.sql
…
如果要恢復數據,可以這樣
shell>mysqlimport -l db /path/to/dir/tbl1.txt
…
如果是在Unix平台下使用(推薦),就更方便了:
shell>ls -l *.sql | mysql db
shell>mysqlimport --lock-tables db /path/to/dir/*.txt
三 .用直接拷貝的方法備份恢復
根據本章前兩節的介紹,由於MySQL的資料庫和表是直接通過目錄和表文件實現的,因此直接復制文件來備份資料庫數據,對MySQL來說特別方便。而且自MySQL 3.23起MyISAM表成為預設的表的類型,這種表可以為在不同的硬體體系中共享數據提供了保證。
使用直接拷貝的方法備份時,尤其要注意表沒有被使用,你應該首先對表進行讀鎖定。
備份一個表,需要三個文件:
對於MyISAM表:
tbl_name.frm 表的描述文件
tbl_name.MYD 表的數據文件
tbl_name.MYI 表的索引文件
對於ISAM表:
tbl_name.frm 表的描述文件
tbl_name.ISD 表的數據文件
tbl_name.ISM 表的索引文件
你直接拷貝文件從一個資料庫伺服器到另一個伺服器,對於MyISAM表,你可以從運行在不同硬體系統的伺服器之間復制文件
像你這個問題,可以把遠程機器的mysql數據目錄ftp下載到你本地的mysql目錄下,重啟mysql就可以了
⑺ MYSQL通過SQL語句備份數據表的問題 CREATE TABLE IF NOT EXISTS
添加沒你備份的那段
insert into db_table_1 select FROM db_table_2
WHERE 1=1 AND datetime BETWEEN date1 AND date2.
⑻ MySQL資料庫備份方法
MyISAM 表是保存成文件的形式,因此相對比較容易備份,上面提到的幾種方法都可以使用。Innodb 所有的表都保存在同一個數據文件 ibdata1 中(也可能是多個文件,或者是獨立的表空間文件),相對來說比較不好備份,免費的方案可以是拷貝數據文件、備份 binlog,或者用 mysqlmp。1. 使用直接拷貝資料庫備份 典型的如cp、tar或cpio實用程序當你使用直接備份方法時,必須保證表不在被使用。如果伺服器在你正在拷貝一個表時改變它,拷貝就失去意義。保證你的拷貝完整性的最好方法是關閉伺服器,拷貝文件,然後重啟伺服器。 如果你不想關閉伺服器,要在執行表檢查的同時鎖定伺服器。如果伺服器在運行,相同的制約也適用於拷貝文件,應該使用相同的鎖定協議讓伺服器「安靜下來」。當你完成了MySQL資料庫備份時,需要重啟伺服器(如果關閉了它)或釋放加在表上的鎖定(如果你讓伺服器運行)。 要用直接拷貝文件把一個資料庫從一台機器拷貝到另一台機器上,只是將文件拷貝到另一台伺服器主機的適當數據目錄下即可。要確保文件是MyIASM格式或兩台機器有相同的硬體結構,否則你的資料庫在另一台主機上有奇怪的內容。你也應該保證在另一台機器上的伺服器在你正在安裝資料庫表時不訪問它們。2. 使用mysqlmp資料庫備份mysqlmp 是採用SQL級別的備份機制,它將數據表導成 SQL 腳本文件,在不同的 MySQL 版本之間升級時相對比較合適,這也是最常用的備份方法。mysqlmp程序備份資料庫較慢,但它生成的文本文件便於移植。mysqlmp 的一些主要參數:1)--compatible=name它告訴 mysqlmp,導出的數據將和哪種資料庫或哪個舊版本的 MySQL 伺服器相兼容。值可以為 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用幾個值,用逗號將它們隔開。當然了,它並不保證能完全兼容,而是盡量兼容。2)--complete-insert,-c導出的數據採用包含欄位名的完整 INSERT 方式,也就是把所有的值都寫在一行。這么做能提高插入效率,但是可能會受到 max_allowed_packet 參數的影響而導致插入失敗。因此,需要謹慎使用該參數,至少我不推薦。3)--default-character-set=charset指定導出數據時採用何種字元集,如果數據表不是採用默認的 latin1 字元集的話,那麼導出時必須指定該選項,否則再次導入數據後將產生亂碼問題。4)--disable-keys告訴mysqlmp 在 INSERT 語句的開頭和結尾增加 ; 和 ; 語句,這能大大提高插入語句的速度,因為它是在插入完所有數據後才重建索引的。該選項只適合 MyISAM 表。5)--extended-insert = true|false默認情況下,mysqlmp 開啟 --complete-insert 模式,因此不想用它的的話,就使用本選項,設定它的值為 false 即可。6)--hex-blob使用十六進制格式導出二進制字元串欄位。如果有二進制數據就必須使用本選項。影響到的欄位類型有 BINARY、VARBINARY、BLOB。7)--lock-all-tables,-x在開始導出之前,提交請求鎖定所有資料庫中的所有表,以保證數據的一致性。這是一個全局讀鎖,並且自動關閉 --single-transaction 和 --lock-tables 選項。8)--lock-tables它和--lock-all-tables 類似,不過是鎖定當前導出的數據表,而不是一下子鎖定全部庫下的表。本選項只適用於 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 選項。9)--no-create-info,-t只導出數據,而不添加 CREATE TABLE 語句。10)--no-data,-d不導出任何數據,只導出資料庫表結構。11)--opt這只是一個快捷選項,等同於同時添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 選項。本選項能讓 mysqlmp 很快的導出數據,並且導出的數據能很快導回。該選項默認開啟,但可以用 --skip-opt 禁用。注意,如果運行 mysqlmp 沒有指定 --quick 或 --opt 選項,則會將整個結果集放在內存中。如果導出大資料庫的話可能會出現問題。12)--quick,-q該選項在導出大表時很有用,它強制 mysqlmp 從伺服器查詢取得記錄直接輸出而不是取得所有記錄後將它們緩存到內存中。13)--routines,-R導出存儲過程以及自定義函數。14)--single-transaction該選項在導出數據之前提交一個 BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時資料庫的一致性狀態。它只適用於事務表,例如 InnoDB 和 BDB。
本選項和 --lock-tables 選項是互斥的,因為 LOCK TABLES 會使任何掛起的事務隱含提交。
要想導出大表的話,應結合使用 --quick 選項。--triggers同時導出觸發器。該選項默認啟用,用 --skip-triggers 禁用它。備份:使用mysqlmp備份資料庫其實就是把資料庫轉儲成一系列CREATE TABLE和INSERT語句,通過這些語句我們就可重新生成資料庫。使用mysqlmp的方法如下:% mysqlmp --opt testdb | gzip > /data/backup/testdb.bak#--opt選項會對轉儲過程進行優化,生成的備份文件會小一點,後的管道操作會進行數據壓縮% mysqlmp --opt testdb mytable1,mytable2 | gzip > /data/backup/testdb_mytable.bak#可在資料庫後接數據表名,只導出指定的數據表,多個數據表可用逗號分隔--opt選項還可激活--add-drop-table選項,它將會在備份文件的每條CREATE TABLE前加上一條DROP TABLE IF EXISTS語句。這可方便進行數據表的更新,而不會發生「數據表已存在」的錯誤。用mysqlmp命令還可直接把資料庫轉移到另外一台伺服器上,不用生成備份文件。重復執行可定期更新遠程資料庫。% mysqladmin -h remote_host create testdb% mysqlmp --opt testdb | mysql -h remote_host testdb另外還可通過ssh遠程調用伺服器上的程序,如:% ssh remote_host mysqladmin create testdb% mysqlmp --opt testdb | ssh remote_host mysql testdb 通過直接拷貝系統文件的方式備份資料庫,在備份時,要確保沒有人對資料庫進行修改操作。要做到這點,最好關閉伺服器。如果不能關閉的,要以只讀方試鎖定有關數據表。下面是一些示例:% cp -r db /backup/db #備份db資料庫到/backup/db目錄% cp table_name.* /backup/db #只備份table_name數據表% scp -r db remotehot:/usr/local/mysql/data #用scp把資料庫直接拷貝到遠程伺服器,在把資料庫直接拷貝到遠程主機時,應注意兩台機器必須有同樣的硬體結構,或者將拷貝的數據表全部是可移植數據表類型。或者/usr/local/mysql/bin/mysqlmp -uroot -proot \--default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob -x testdb > testdb.sql使用以下 SQL 來備份 Innodb 表:/usr/local/mysql/bin/mysqlmp -uroot -proot \--default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob --single-transaction testdb > testdb.sql另外,如果想要實現在線備份,還可以使用 --master-data 參數來實現,如下:/usr/local/mysql/bin/mysqlmp -uroot -proot \--default-character-set=utf8 --opt --master-data=1 \--single-transaction --flush-logs testdb > testdb.sql它只是在一開始的瞬間請求鎖表,然後就刷新binlog了,而後在導出的文件中加入CHANGE MASTER 語句來指定當前備份的binlog位置,如果要把這個文件恢復到slave里去,就可以採用這種方法來做。 還原:用mysqlmp 備份出來的文件是一個可以直接倒入的 SQL 腳本,有兩種方法可以將數據導入。直接用 mysql 客戶端例如:/usr/local/mysql/bin/mysql -uroot -proot testdb < testdb.sql用SOURCE 語法其實這不是標準的 SQL 語法,而是 mysql 客戶端提供的功能,例如:SOURCE /tmp/testdb.sql;這里需要指定文件的絕對路徑,並且必須是 mysqld 運行用戶(例如 nobody)有許可權讀取的文件。 3. 使用mysqlhot資料庫備份 使用mysqlhot工具,它是一個Perl DBI腳本,可在不關閉伺服器的情況下備份資料庫,mysqlhot 是一個 PERL 程序,最初由Tim Bunce編寫。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 來快速備份資料庫。它是備份資料庫或單個表的最快的途徑,但它只能運行在資料庫文件(包括數據表定義文件、數據文件、索引文件)所在的機器上。mysqlhot 只能用於備份 MyISAM,並且只能運行在 類Unix 和 NetWare 系統上。它主要的優點是:它直接拷貝文件,所以它比mysqlmp快。可自動完成數據鎖定工作,備份時不用關閉伺服器。能刷新日誌,使備份文件和日誌文件的檢查點能保持同步。備份:mysqlhot 支持一次性拷貝多個資料庫,同時還支持正則表達。以下是幾個例子:/usr/local/mysql/bin/mysqlhot -h=localhost -u=root -p=root \testdb /tmp (把資料庫目錄 testdb 拷貝到 /tmp 下)/usr/local/mysql/bin/mysqlhot -h=localhost -u=root -p=root \testdb_1 testdb_2 testdb_n /tmp/usr/local/mysql/bin/mysqlhot -h=localhost -u=root -p=root \testdb./regex/ /tmp 還原:mysqlhot 備份出來的是整個資料庫目錄,使用時可以直接拷貝到 mysqld 指定的 datadir (在這里是 /usr/local/mysql/data/)目錄下即可,同時要注意許可權的問題,如下例:cp -rf testdb /usr/local/mysql/data/chown -R nobody:nobody /usr/local/mysql/data/ (將 testdb 目錄的屬主改成 mysqld 運行用戶) 4. 使用SQL語句資料庫備份 BACKUP TABLE 語法其實和 mysqlhot 的工作原理差不多,都是鎖表,然後拷貝數據文件。它能實現在線備份,但是效果不理想,因此不推薦使用。它只拷貝表結構文件和數據文件,不同時拷貝索引文件,因此恢復時比較慢。備份:BACK TABLE tbl_test TO '/tmp/testdb/'; #把tbl_test資料庫備份到/tmp/testdb/目錄里,會自動創建一個testdb目錄 為了執行該語句,你必須擁有那些表的FILE許可權和SELECT許可權,備份目錄還必須是伺服器可寫的。該語句執行時,會先把內存中的數據寫入磁碟,再把各個數據表的.frm(表結構定義文件)、.MYD(數據)文件從數據目錄拷貝到備份目錄。它不拷貝.MYI(索引)文件,因為它能用另外兩個文件重建。BACKUP TABLE語句備份時,依次鎖定數據表,當同時備份多個數據表時,數據表可能會被修改,所以備份0完成時,備份文件中的數據和現時數據表中的數據可能會有差異,為了消除該差異,我們可用只讀方式鎖定數據表,在備份完成後再解鎖。如:mysql> LOCK TABLES tb1 READ,tb2 READ;mysql> BACKUP TABLE tb1,tb2 TO 'backup/db';mysql> UNLOCK TABLES;使用BACKUP TABLE語句備份的數據表可用RESTORE TABLE重新載入到伺服器。注意,必須要有 FILE 許可權才能執行本SQL,並且目錄 /tmp/testdb/ 必須能被 mysqld 用戶可寫,導出的文件不能覆蓋已經存在的文件,以避免安全問題。SELECT INTO OUTFILE 則是把數據導出來成為普通的文本文件,可以自定義欄位間隔的方式,方便處理這些數據。
例子:SELECT * INTO OUTFILE '/tmp/testdb/tbl_test.txt' FROM tbl_test;注意,必須要有 FILE 許可權才能執行本SQL,並且文件 /tmp/testdb/tbl_test.txt 必須能被 mysqld 用戶可寫,導出的文件不能覆蓋已經存在的文件,以避免安全問題。還原:用BACKUP TABLE 方法備份出來的文件,可以運行 RESTORE TABLE 語句來恢復數據表。例子:RESTORE TABLE FROM '/tmp/testdb/';許可權要求類似上面所述。用SELECT INTO OUTFILE 方法備份出來的文件,可以運行 LOAD DATA INFILE 語句來恢復數據表。例子:LOAD DATA INFILE '/tmp/testdb/tbl_name.txt' INTO TABLE tbl_name;許可權要求類似上面所述。倒入數據之前,數據表要已經存在才行。
以上回答你滿意么?
⑼ 備份MYSQL資料庫SQL語句怎麼寫
mysqlmp備份還原和mysqlmp導入導出語句大全詳解
mysqlmp備份:
mysqlmp -u用戶名 -p密碼 -h主機資料庫 a -w "sql條件" --lock-all-tables >路徑
案例:
mysqlmp -uroot -p1234 -hlocalhost db1 a -w "id in (select id from b)" --lock-all-tables > c:\aa.txt
mysqlmp還原:
mysqlmp -u用戶名 -p密碼 -h主機資料庫<路徑
案例:
mysql -uroot -p1234 db1 < c:\aa.txt
mysqlmp按條件導出:
mysqlmp -u用戶名 -p密碼 -h主機資料庫 a --where "條件語句" --no-建表>路徑
mysqlmp -uroot -p1234 dbname a --where "tag='88'" --no-create-info> c:\a.sql
mysqlmp按導入:
mysqlmp -u用戶名 -p密碼 -h主機資料庫<路徑
案例:
mysql -uroot -p1234 db1 < c:\a.txt
mysqlmp導出表:
mysqlmp -u用戶名 -p密碼 -h主機資料庫表
案例:
mysqlmp -uroot -p sqlhk9 a --no-data
講一下 mysqlmp 的一些主要參數
--compatible=name
它告訴 mysqlmp,導出的數據將和哪種資料庫或哪個舊版本的 MySQL 伺服器相兼容。值可以為 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用幾個值,用逗號將它們隔開。當然了,它並不保證能完全兼容,而是盡量兼容。
--complete-insert,-c
導出的數據採用包含欄位名的完整 INSERT 方式,也就是把所有的值都寫在一行。這么做能提高插入效率,但是可能會受到 max_allowed_packet 參數的影響而導致插入失敗。因此,需要謹慎使用該參數,至少我不推薦。
--default-character-set=charset
指定導出數據時採用何種字元集,如果數據表不是採用默認的 latin1 字元集的話,那麼導出時必須指定該選項,否則再次導入數據後將產生亂碼問題。
--disable-keys
告訴 mysqlmp 在 INSERT 語句的開頭和結尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 語句,這能大大提高插入語句的速度,因為它是在插入完所有數據後才重建索引的。該選項只適合 MyISAM 表。
--extended-insert = true|false
默認情況下,mysqlmp 開啟 --complete-insert 模式,因此不想用它的的話,就使用本選項,設定它的值為 false 即可。
--hex-blob
使用十六進制格式導出二進制字元串欄位。如果有二進制數據就必須使用本選項。影響到的欄位類型有 BINARY、VARBINARY、BLOB。
--lock-all-tables,-x
在開始導出之前,提交請求鎖定所有資料庫中的所有表,以保證數據的一致性。這是一個全局讀鎖,並且自動關閉 --single-transaction 和 --lock-tables 選項。
--lock-tables
它和 --lock-all-tables 類似,不過是鎖定當前導出的數據表,而不是一下子鎖定全部庫下的表。本選項只適用於 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 選項。
--no-create-info,-t
只導出數據,而不添加 CREATE TABLE 語句。
--no-data,-d
不導出任何數據,只導出資料庫表結構。
--opt
這只是一個快捷選項,等同於同時添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 選項。本選項能讓 mysqlmp 很快的導出數據,並且導出的數據能很快導回。該選項默認開啟,但可以用 --skip-opt 禁用。注意,如果運行 mysqlmp 沒有指定 --quick 或 --opt 選項,則會將整個結果集放在內存中。如果導出大資料庫的話可能會出現問題。
--quick,-q
該選項在導出大表時很有用,它強制 mysqlmp 從伺服器查詢取得記錄直接輸出而不是取得所有記錄後將它們緩存到內存中。
--routines,-R
導出存儲過程以及自定義函數。
--single-transaction
該選項在導出數據之前提交一個 BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時資料庫的一致性狀態。它只適用於事務表,例如 InnoDB 和 BDB。
本選項和 --lock-tables 選項是互斥的,因為 LOCK TABLES 會使任何掛起的事務隱含提交。
要想導出大表的話,應結合使用 --quick 選項。
--triggers
同時導出觸發器。該選項默認啟用,用 --skip-triggers 禁用它。
其他參數詳情請參考手冊,我通常使用以下 SQL 來備份 MyISAM 表:
/usr/local/mysql/bin/mysqlmp -uyejr -pyejr "
--default-character-set=utf8 --opt --extended-insert=false "
--triggers -R --hex-blob -x db_name > db_name.sql
使用以下 SQL 來備份 Innodb 表:
/usr/local/mysql/bin/mysqlmp -uyejr -pyejr "
--default-character-set=utf8 --opt --extended-insert=false "
--triggers -R --hex-blob --single-transaction db_name > db_name.sql
另外,如果想要實現在線備份,還可以使用 --master-data 參數來實現,如下:
/usr/local/mysql/bin/mysqlmp -uyejr -pyejr "
--default-character-set=utf8 --opt --master-data=1 "
--single-transaction --flush-logs db_name > db_name.sql
它只是在一開始的瞬間請求鎖表,然後就刷新binlog了,而後在導出的文件中加入CHANGE MASTER 語句來指定當前備份的binlog位置,如果要把這個文件恢復到slave里去,就可以採用這種方法來做。
1.2 還原
用 mysqlmp 備份出來的文件是一個可以直接倒入的 SQL 腳本,有兩種方法可以將數據導入。
直接用 mysql 客戶端
例如:
/usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql
用 SOURCE 語法(實驗不成功!!!)
其實這不是標準的 SQL 語法,而是 mysql 客戶端提供的功能,例如:
SOURCE /tmp/db_name.sql;
這里需要指定文件的絕對路徑,並且必須是 mysqld 運行用戶(例如 nobody)有許可權讀取的文件。