mysql 5.6 使用傳輸資料表空間遷移表或恢複誤刪除的表

來源:互聯網
上載者:User

標籤:style   blog   http   使用   檔案   資料   for   2014   

mysql 5.6 使用傳輸資料表空間遷移表或恢複誤刪除的表

http://blog.csdn.net/lidan3959/article/details/25152623

以前在網上也看過一些對5.6傳輸資料表空間的介紹,不過都寫的不夠具體詳細,今天有空就具體操作了一把,並詳細記錄了一下算留個檔

 

一,簡單說明:
1),傳輸資料表空間的限制:   1,mysql 版本 5.6.6 及其以上,並且版本建議源和目標版本建議都是GA版並且大版本一樣   2,表引擎為innodb並且開啟獨立資料表空間  innodb_file_per_table   3,處於匯出狀態的表只允許讀也即是”read_only“狀態   4,DISCARD TABLESPACE不支援分區表[5.6.17才支援] 並且當表上具有外鍵關係的時候需要將 foreign_key_check設定為0   5,源和目標執行個體的page size 必須大小一致   6,ALTER TABLE ... IMPORT TABLESPACE  不強制進行外鍵約束檢查,所以需要將主表和子表都匯出,然後在目標執行個體匯入,      另外該操作不需要.cfg 中繼資料檔案,當然如果沒有改檔案在匯入的時候是不做中繼資料檢查的   7,在windows上,innodb引擎內部都是以小寫格式儲存資料庫,表名和資料表空間名,故為了避免匯入因為大小寫出現檔案建議在大小寫敏感, 如linux、unix的作業系統上都以小寫格式建立資料庫和表同時在[mysqld]項下 添加       [mysqld]       lower_case_table_names=1         2),傳輸資料表空間的優點:   1,不需要消耗太多的資源   2,很方便的將表 從一個執行個體遷移到另一個執行個體   3,相對於mysqldump來說你無須匯出然後匯入同時還的維護索引
二,正常的資料表空間遷移      1, 來源資料庫:           use test;           create table lidan(id int) engine=innodb;           insert into lidan values(10);      2,目標資料庫:           use test;           create table lidan(id int) engine=innodb;           insert into lidan values(10);       3,目標資料庫卸載資料表空間:          ALTER TABLE lidan DISCARD TABLESPACE;          卸載資料表空間後lidan.ibd 檔案和資料表空間分離並且會對錶加一個獨佔鎖定,此時如果執行dml則會直接報錯                  4,來源資料執行資料表空間匯出:          use test;          FLUSH TABLES lidan FOR EXPORT;         flush操作會觸發表lidan的dirty page重新整理到磁碟,並且stop purge 線程,同時將中繼資料資訊寫入lidan.cfg                   中繼資料檔案儲存體的資訊如下:                     主要就是一些資料庫和表名、row_id 、復原指標、事物id等          該會話會一直持有表lidan的metadata鎖,故此時其他會話只能進行SELECT二更新和插入操作會被阻塞 。                                 5,將匯出的表(來源資料庫)所在資料檔案目錄下對應的lidan.ibd file和lidan.cfg 拷貝到目標資料庫對應的檔案夾下         cp -p  lidan.cfg lidan.ibd /data/percona-data-3307/test/                    注意:檔案的拷貝必須在下一步釋放metadata lock 之前      6,釋放來源資料庫的metadata lock          use test;          unlock table;         unlock 這一步會刪除之前產生的lidan.cfg檔案,同時釋放metadata lock 並且重新啟動purge 線程      7,目標資料庫將表匯入到資料表空間         alter table lidan import tablespace;          然後查看匯入成功                   匯入的過程mysql內部會做如下事情:         a,檢查資料表空間每個page的一致性         b,更新每個page的space id和lsn的資訊         c,啟用頭部頁標記和更新LSN到頭部頁         d,page 狀態資訊設定為dirty ,這樣page將很快會被重新整理到磁碟        具體                   三,誤刪除情況下的恢複     這裡只討論備庫誤刪除的恢複,如果是主庫誤刪表那隻能通過備份來恢複了      1,首先備庫上執行drop操作,類比誤刪除        (user:root  time: 16:37 port: 3307)[db: test]drop table lidan;      2,備庫恢複必須要有.frm檔案,故這裡需要從源庫查看錶結構然後在目標庫建立         create table lidan(id int) engine=innodb;        接下來的步驟就按照(二)當中從3開始做即可,具體請自行測試。           參考: http://dev.mysql.com/doc/refman/5.6/en/flush.html                                                         http://dev.mysql.com/doc/refman/5.6/en/tablespace-copying.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.