《MYSQL教程mysql Innodb表空間卸載、遷移、裝載的使用方法》要點(diǎn):
本文介紹了MYSQL教程mysql Innodb表空間卸載、遷移、裝載的使用方法,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
MYSQL教程條件:
2臺(tái)服務(wù)器:A和B,需要A服務(wù)器上的表遷移到B服務(wù)器.
Innodb表:sysUser,記錄數(shù):351781.
以下測(cè)試在MySQL 5.5.34中進(jìn)行.
開(kāi)始處理:
1:在B服務(wù)器上建立sysUser表,并且執(zhí)行:
MYSQL教程2:把A服務(wù)器表的表空間(ibd)復(fù)制到B服務(wù)器的相應(yīng)數(shù)據(jù)目錄.
3:修改復(fù)制過(guò)來(lái)的ibd文件權(quán)限:
MYSQL教程4:最后就開(kāi)始加載:
MYSQL教程報(bào)錯(cuò)了,查看錯(cuò)誤日志:
MYSQL教程當(dāng)遇到這個(gè)的情況:A服務(wù)器上的表空間ID 為2428,而B(niǎo)服務(wù)器上的表空間ID為2430.所以導(dǎo)致這個(gè)錯(cuò)誤發(fā)生,解決辦法是:讓他們的表空間ID一致,即:B找出表空間ID為2428的表(CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;),修改成和sysUser表結(jié)構(gòu)一樣的的表,再import.要不就把A服務(wù)器的表空間ID增加到大于等于B的表空間ID.(需要新建刪除表來(lái)增加ID)
MYSQL教程要是A的表空間ID大于B的表空間ID,則會(huì)有:
MYSQL教程這時(shí)的情況:A服務(wù)器上的表空間ID 為44132,而B(niǎo)服務(wù)器上的表空間ID為2436.(因?yàn)锳是測(cè)試機(jī)子,經(jīng)常做還原操作,所以表空間ID已經(jīng)很大了,正常情況下.表空間ID不可能這么大.
MYSQL教程既然表空間ID不對(duì)導(dǎo)致這個(gè)錯(cuò)誤報(bào)出,那我們手動(dòng)的讓B的表空間ID追上A的表空間ID.
MYSQL教程需要建立的表數(shù)量:44132-2436 = 41696個(gè),才能追上.因?yàn)樗旧砭托枰俳⒁粋€(gè)目標(biāo)表,所以需要建立的表數(shù)量為:41695.不過(guò)安全起見(jiàn),最好也不要超過(guò)41695,以防B的表空間ID超過(guò)了A,則比如設(shè)置安全的值:41690,即使B沒(méi)有到達(dá)A表空間ID的值,也應(yīng)該差不多了,可以再手動(dòng)的去增加.用一個(gè)腳本跑(需要建立的表比較多),少的話完全可以自己手動(dòng)去處理:
MYSQL教程import MySQLdb
import datetime
MYSQL教程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()
MYSQL教程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)
MYSQL教程也可以開(kāi)啟多線程去處理,加快效率.
當(dāng)執(zhí)行完之后,再重新按照上面的1-3步驟進(jìn)行一次,最后再裝載:
MYSQL教程要是再提示A表空間ID大于B表的話,就再手動(dòng)的按照腳本里面的方法來(lái)增加ID,這時(shí)候就只需要增加個(gè)位數(shù)就可以追上A的表空間ID了.
總結(jié):
上面只是一個(gè)方法,雖然可以遷移Innodb,但是出問(wèn)題之后可能會(huì)引其Innodb的頁(yè)損壞,所以最安全的還是直接用mysqldump、xtrabackup等進(jìn)行遷移.
5.6 可以不用考慮這些tablespace id,可以直接import 進(jìn)來(lái).
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/5525.html