Category: "MySQL, データベース, 雑感" , Tags: mysqldump index dmp
Import mysqldump的Output時, Index除了Primary以外都會消失
怕熱的しゃちょー(Shacho) 寫著呢.
東京的夏天太熱了.
我要請大家把自己周圍的溫度降下一點.
可是, 現在還不算夏天.
話說回來, 我們慢慢的講MySQL吧.
我從事數據庫方面從事了10年以上了, 用過很多種, 結果覺得還是Oracle最佳. 就是當時.
我聽過它的名字, 而聽過它受的好評價像動作輕快, 速度快, 這樣有從事那業界的人有的一般的消息.
實在說, 我差不多沒有什麼預備知識就要實際的工作. 我第一個印象是”和Oracle差不多”. 還有”很簡單”.
沒想到苦戰從這裡開始.
Oracle技師很容易跌跤的幾個要點.
很多人講過這件事, 所以我不會講太多. 只要介紹之中, 技術支持等等的時候必需的.
有豐富知識的人不需要讀這篇文章, 不過, 我覺得你到這頁面來看一看就意味你是所謂的MySQL初學者SE(雖然你說你不懂, 你的老闆卻說”沒關係, 沒關係”叫你為顧客工作, 再說當然沒有他的支持也沒有時間得到預備知識. 這就是年富力強的SE), 所以沒問題吧.
我希望這幫助你. 加油!
第1: Import mysqldump的Output時, Index除了Primary以外都會消失
跟Oracle的export相似, 但是用法相當不一樣, 那就是mysqldump.
因為比較活生生, 我比較喜歡mysqldump.
說話回來, 關於題目裡談到的內容. 如果你看看mysqldump output的結果, 毫不奇怪.
首先,
mysqldump -F -l -uxxxx -p –all-databases > test.sql
你這樣output文件, 然後要import這個的話,
dmp裡的表定義會像下列的.
Drop table
Create Table
Lock Tables
Alter Table Disable Keys
Insert Table
Alter Table Enable Keys
像上述的, 第一行的drop命令會刪除所有表定義,
所以, Create裡的Primary Key以外, 我們不能把index回到原來. 很有道理, 對不對?
要是你不改变数据库定义和表定义,
而truncate所有数据的话,
你可以用以下的dump命令, 就能得到里面只有数据的dmp文件.
mysqldump -F -l -uxxx -p –all-databases –no-create-info –no-create-db –skip-add-drop-database –skip-add-drop-table > test.sql
–no-create-info :不輸出create table
–no-create-db :不輸出create database
–skip-add-drop-database :不輸出drop database
–skip-add-drop-table :不輸出drop table
像試驗, 你要反復數據的輸入和輸出好幾次的時候可能有用.
可是, 很大的table裡有好多index,
這樣insert之前有很多index的話, 當然insert速度會慢一點.
於是, 實際上, 有時候做另外Create Index SQL然後做普通的drop table dmp比import之後加index比較快(考慮麻煩也是).
我覺得只看看mysqldump選件會造成的差異也是值得的.
試試看!


