最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql Innodb表空間卸載、遷移、裝載的使用方法

 更新時間:2013年11月15日 16:05:53   作者:  
從MySQL的Innodb特性中我們知道,Inndob的表空間有共享和獨享的特點,如果是共享的。則默認(rèn)會把表空間存放在一個文件中(ibdata1),當(dāng)開啟獨享表空間參數(shù)Innodb_file_per_table時,會為每個Innodb表創(chuàng)建一個.ibd的文件。文章討論在獨享表空間卸載、裝載、遷移Innodb表的情況

條件:
2臺服務(wù)器:A和B,需要A服務(wù)器上的表遷移到B服務(wù)器。
Innodb表:sysUser,記錄數(shù):351781。
以下測試在MySQL 5.5.34中進行。
開始處理:
1:在B服務(wù)器上建立sysUser表,并且執(zhí)行:

復(fù)制代碼 代碼如下:

zjy@B : db_test 09:50:30>alter table sysUser discard tablespace;

2:把A服務(wù)器表的表空間(ibd)復(fù)制到B服務(wù)器的相應(yīng)數(shù)據(jù)目錄。
3:修改復(fù)制過來的ibd文件權(quán)限:

復(fù)制代碼 代碼如下:

chown mysql:mysql sysUser.ibd

4:最后就開始加載:

復(fù)制代碼 代碼如下:

zjy@B : db_test 10:00:03>alter table sysUser import tablespace;
ERROR 1030 (HY000): Got error -1 from storage engine

報錯了,查看錯誤日志:

復(fù)制代碼 代碼如下:

10:05:44  InnoDB: Error: tablespace id and flags in file './db_test/sysUser.ibd' are 2428 and 0, but in the InnoDB
InnoDB: data dictionary they are 2430 and 0.
InnoDB: Have you moved InnoDB .ibd files around without using the
InnoDB: commands DISCARD TABLESPACE and IMPORT TABLESPACE?
InnoDB: Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting-datadict.html
InnoDB: for how to resolve the issue.
10:05:44  InnoDB: cannot find or open in the database directory the .ibd file of
InnoDB: table `db_test`.`sysUser`
InnoDB: in ALTER TABLE ... IMPORT TABLESPACE

當(dāng)遇到這個的情況:A服務(wù)器上的表空間ID 為2428,而B服務(wù)器上的表空間ID為2430。所以導(dǎo)致這個錯誤發(fā)生,解決辦法是:讓他們的表空間ID一致,即:B找出表空間ID為2428的表(CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;),修改成和sysUser表結(jié)構(gòu)一樣的的表,再import。要不就把A服務(wù)器的表空間ID增加到大于等于B的表空間ID。(需要新建刪除表來增加ID)

要是A的表空間ID大于B的表空間ID,則會有:

復(fù)制代碼 代碼如下:

11:01:45  InnoDB: Error: tablespace id and flags in file './db_test/sysUser.ibd' are 44132 and 0, but in the InnoDB
InnoDB: data dictionary they are 2436 and 0.
InnoDB: Have you moved InnoDB .ibd files around without using the
InnoDB: commands DISCARD TABLESPACE and IMPORT TABLESPACE?
InnoDB: Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting-datadict.html
InnoDB: for how to resolve the issue.
11:01:45  InnoDB: cannot find or open in the database directory the .ibd file of
InnoDB: table `db_test`.`sysUser`
InnoDB: in ALTER TABLE ... IMPORT TABLESPACE

這時的情況:A服務(wù)器上的表空間ID 為44132,而B服務(wù)器上的表空間ID為2436。(因為A是測試機子,經(jīng)常做還原操作,所以表空間ID已經(jīng)很大了,正常情況下。表空間ID不可能這么大。

既然表空間ID不對導(dǎo)致這個錯誤報出,那我們手動的讓B的表空間ID追上A的表空間ID。

需要建立的表數(shù)量:44132-2436 = 41696個,才能追上。因為他本身就需要再建立一個目標(biāo)表,所以需要建立的表數(shù)量為:41695。不過安全起見,最好也不要超過41695,以防B的表空間ID超過了A,則比如設(shè)置安全的值:41690,即使B沒有到達(dá)A表空間ID的值,也應(yīng)該差不多了,可以再手動的去增加。用一個腳本跑(需要建立的表比較多),少的話完全可以自己手動去處理:

復(fù)制代碼 代碼如下:

#!/bin/env python
# -*- encoding: utf-8 -*-

import MySQLdb
import datetime

def create_table(conn):
    query = '''
create table tmp_1 (id int) engine =innodb
    '''
    cursor = conn.cursor()
    cursor.execute(query)
    conn.commit()
def drop_table(conn):
    query = '''
drop table tmp_1
    '''
    cursor = conn.cursor()
    cursor.execute(query)
    conn.commit()

if __name__ == '__main__':
    conn = MySQLdb.connect(host='B',user='zjy',passwd='123',db='db_test',port=3306,charset='utf8')
    for i in range(41690):
        print i
        create_table(conn)
        drop_table(conn)

也可以開啟多線程去處理,加快效率。
當(dāng)執(zhí)行完之后,再重新按照上面的1-3步驟進行一次,最后再裝載:

復(fù)制代碼 代碼如下:

zjy@B : db_test 01:39:23>alter table sysUser import tablespace;
Query OK, 0 rows affected (0.00 sec)

要是再提示A表空間ID大于B表的話,就再手動的按照腳本里面的方法來增加ID,這時候就只需要增加個位數(shù)就可以追上A的表空間ID了。
總結(jié):
上面只是一個方法,雖然可以遷移Innodb,但是出問題之后可能會引其Innodb的頁損壞,所以最安全的還是直接用mysqldump、xtrabackup等進行遷移。
5.6 可以不用考慮這些tablespace id,可以直接import 進來。

復(fù)制代碼 代碼如下:

2013-11-12 15:25:09 2378 [Note] InnoDB: Sync to disk
2013-11-12 15:25:09 2378 [Note] InnoDB: Sync to disk - done!
2013-11-12 15:25:09 2378 [Note] InnoDB: Phase I - Update all pages
2013-11-12 15:25:09 2378 [Note] InnoDB: Sync to disk
2013-11-12 15:25:09 2378 [Note] InnoDB: Sync to disk - done!
2013-11-12 15:25:09 2378 [Note] InnoDB: Phase III - Flush changes to disk
2013-11-12 15:25:09 2378 [Note] InnoDB: Phase IV - Flush complete

相關(guān)文章

  • centos7環(huán)境下源碼安裝mysql5.7.16的方法詳解

    centos7環(huán)境下源碼安裝mysql5.7.16的方法詳解

    這篇文章主要介紹了centos7環(huán)境下源碼安裝mysql5.7.16的方法,詳細(xì)分析了centos7環(huán)境下MySQL安裝的相關(guān)步驟、操作命令、配置方法與注意事項,需要的朋友可以參考下
    2020-02-02
  • VPS下修改MySQL root用戶密碼的方法

    VPS下修改MySQL root用戶密碼的方法

    VPS下修改MySQL root用戶密碼的方法,需要的朋友可以參考下。
    2010-12-12
  • MySQL如何使用union all獲得并集排序

    MySQL如何使用union all獲得并集排序

    這篇文章主要介紹了MySQL如何使用union all獲得并集排序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Mysql中正則表達(dá)式Regexp常見用法

    Mysql中正則表達(dá)式Regexp常見用法

    這篇文章主要介紹了Mysql中正則表達(dá)式Regexp常見用法,MySql REGEXP運算符匹配字符串,mysql正則REGEXP學(xué)習(xí)練習(xí)筆記,需要的朋友可以參考下
    2020-02-02
  • mysql數(shù)據(jù)庫修改添加Date格式列的方法

    mysql數(shù)據(jù)庫修改添加Date格式列的方法

    這篇文章主要介紹了關(guān)于mysql數(shù)據(jù)庫如何修改添加Date格式的列 ,需要的朋友可以參考下
    2014-07-07
  • mysql事務(wù)隔離級別詳解

    mysql事務(wù)隔離級別詳解

    MySQL事務(wù)隔離級別是指在多個事務(wù)同時執(zhí)行時,數(shù)據(jù)庫系統(tǒng)如何處理這些事務(wù)之間的相互影響。MySQL提供了四種隔離級別:讀未提交、讀已提交、可重復(fù)讀和串行化。每種隔離級別都有其優(yōu)缺點,需要根據(jù)具體情況選擇合適的級別。
    2023-06-06
  • Mysql啟動報ERROR:2002的分析與解決

    Mysql啟動報ERROR:2002的分析與解決

    這篇文章主要給大家介紹了關(guān)于Mysql啟動時報ERROR:2002問題的分析與解決方法,文中通過示例代碼介紹將該問題分析的非常詳細(xì),對同樣遇到這個問題的朋友們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-08-08
  • MySQL安全刪除binlog日志的詳細(xì)步驟

    MySQL安全刪除binlog日志的詳細(xì)步驟

    如果你的?Mysql?搭建了主從同步,或者數(shù)據(jù)庫開啟了log-bin日志,那么隨著時間的推移,你的數(shù)據(jù)庫data目錄下會產(chǎn)生大量的日志文件,下面這篇文章主要給大家介紹了關(guān)于MySQL安全刪除binlog日志的詳細(xì)步驟,需要的朋友可以參考下
    2024-02-02
  • windows10下mysql 8.0 下載與安裝配置圖文教程

    windows10下mysql 8.0 下載與安裝配置圖文教程

    這篇文章主要介紹了windows10下mysql 8.0 下載與安裝配置圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • mysql如何按字段查詢重復(fù)的數(shù)據(jù)

    mysql如何按字段查詢重復(fù)的數(shù)據(jù)

    這篇文章主要介紹了mysql如何按字段查詢重復(fù)的數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論

安平县| 屏南县| 甘孜县| 新邵县| 东安县| 南华县| 和顺县| 平利县| 英吉沙县| 马关县| 思南县| 九龙县| 墨江| 习水县| 珲春市| 巴青县| 平和县| 涿州市| 亚东县| 临海市| 镇坪县| 唐山市| 府谷县| 阜新市| 郓城县| 富锦市| 陵川县| 汝城县| 思南县| 西充县| 翼城县| 高碑店市| 讷河市| 施甸县| 额济纳旗| 绥滨县| 即墨市| 乃东县| 通河县| 屯留县| 正镶白旗|