溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL中的ibdata1怎么使用

發(fā)布時(shí)間:2023-03-13 11:09:22 來源:億速云 閱讀:142 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“MySQL中的ibdata1怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“MySQL中的ibdata1怎么使用”吧!

    MySQL的ibdata1用法

    系統(tǒng)表空間是InnoDB數(shù)據(jù)字典、雙寫緩沖區(qū)、更改緩沖區(qū)和撤消日志的存儲(chǔ)區(qū)域 。

    如果表是在系統(tǒng)表空間中創(chuàng)建的,而不是在每個(gè)表文件或通用表空間中創(chuàng)建,則它還可能包含表和索引數(shù)據(jù)。

    系統(tǒng)表空間可以有一個(gè)或多個(gè)數(shù)據(jù)文件。默認(rèn)情況下,ibdata1會(huì)在數(shù)據(jù)目錄中創(chuàng)建一個(gè)名為 的系統(tǒng)表空間數(shù)據(jù)文件 。系統(tǒng)表空間數(shù)據(jù)文件的大小和數(shù)量由innodb_data_file_path啟動(dòng)選項(xiàng)定義。

    MySQL中的ibdata1怎么使用

     ibdata1即Innodb data1的縮寫,是innodb引擎的表空間,用于存放以下內(nèi)容:

    • 數(shù)據(jù)字典Data dictionary:只讀的表,存儲(chǔ)對(duì)象的相關(guān)信息,如占用空間,列的缺省值,約束信息,用戶名,權(quán)限,審計(jì)信息等;

    • 雙寫緩沖區(qū) Double write buffer:Innodb寫入數(shù)據(jù)默認(rèn)是16k/pages為一個(gè)單位寫入,而磁盤是4k/page一個(gè)單位,為了防止寫入一半,斷電無法恢復(fù)數(shù)據(jù)的情況發(fā)生,引入了double writer buffer機(jī)制;double write buffer是一段連續(xù)空間,大小2M(128 page),數(shù)據(jù)寫入的時(shí)候先寫到doublewrite空間,然后再寫入到磁盤,如果發(fā)生寫入了一個(gè)page一半的時(shí)候斷電,恢復(fù)后會(huì)自動(dòng)從doublewrite中恢復(fù);

    • 插入緩沖區(qū)INSERT BUFFER:針對(duì)輔助索引(非unique),插入數(shù)據(jù)的時(shí)候,先將插入的數(shù)據(jù)在buffer中根據(jù)輔助索引葉子節(jié)點(diǎn)的Page_no排序,而后按照Page_no分批次插入,提高性能;

    • 回滾日志rollback segment: 用于存儲(chǔ)未提交事物,便于用戶rollback,當(dāng)commit后,數(shù)據(jù)即被標(biāo)記無效;

    • undo空間 用于存放undo 日志的;用于記錄事物變更前的狀態(tài),如果未commit,其他session可以查看到變更前狀態(tài)

    • 如果innodb_file_per_table=0,則Innodb的數(shù)據(jù)和索引也存儲(chǔ)在ibdata中; (如果為1,則存儲(chǔ)在表名相同的ibd和frm文件中); 如果表數(shù)據(jù)存儲(chǔ)在ibdata中的話,那么刪除表是不會(huì)釋放空間;

    mysql 默認(rèn)配置使用 innodb 引擎 innodb_file_per_table 默認(rèn)是關(guān)閉的 , 因此表空間默認(rèn)建立在 ibdata1 上

    MySQL中的ibdata1怎么使用

    1 、默認(rèn)情況下 ibdata 存放 InnoDB 表( InnoDB 數(shù)據(jù)字典)元數(shù)據(jù)、 undo logs 、 the change buffer, and the doublewrite buffer

    2 、如果 innodb_file_per_table=0( 默認(rèn) =1) ,則 ibdata 也存放 InnoDB 表的實(shí)際數(shù)據(jù),也就是 InnoDB 表建立后,不會(huì)再有單獨(dú)的 tablename.ibd 文件 , 如果是 innodb_file_per_table=1, 存放 在新的表的 ibd 文件當(dāng)中

    3 、 雖 然 InnoDB 表 元 數(shù) 據(jù) 通 過 information_schema.tables 來 讀 取 , 但 是 實(shí) 際 上 information_schema 是一個(gè)虛擬數(shù)據(jù)庫(kù),并不物理存在,這些數(shù)據(jù)真正存放的地方就是 ibdata redo 是寫在 ib_logfile 中的 , 不寫在 ibdata 中。

    導(dǎo)致ibdata1 增長(zhǎng)很快的原因

    數(shù)據(jù)庫(kù)中運(yùn)行有長(zhǎng)事務(wù),記錄了大量的UNDO信息,從而導(dǎo)致了ibdata1持續(xù)增長(zhǎng)。

    可以通過show engine innodb status ;命令來查看。

    MySQL中的ibdata1怎么使用

    mysql中并未提供如何查看ibdata1中的存儲(chǔ)內(nèi)容信息??梢允褂霉ぞ?innochecksum 來看。

    ibdata1是什么?

    MySQL使用InnoDB引擎的時(shí)候,ibdata1這個(gè)文件會(huì)隨著時(shí)間的增長(zhǎng),會(huì)變得越來越大,占據(jù)大量的磁盤空間。

    那么,ibdata1里保存了哪些東西,為什么會(huì)變得越來越大呢,讓我們開看看ibdata1的構(gòu)造。

    ibdata1是InnoDB的共有表空間,默認(rèn)情況下會(huì)把表空間存放在一個(gè)文件ibdata1中,會(huì)造成這個(gè)文件越來越大。

    發(fā)現(xiàn)問題所在之后,解決方法就是,使用獨(dú)享表空間,將表空間分別單獨(dú)存放。MySQL開啟獨(dú)享表空間的參數(shù)是Innodb_file_per_table,會(huì)為每個(gè)Innodb表創(chuàng)建一個(gè).ibd的文件。

    操作步驟

    下面講一下具體的操作。

    1) 導(dǎo)出數(shù)據(jù)庫(kù)中所有數(shù)據(jù)

    # mysqldump -u root -p --all-database > /tmp/all-database.dump

    2) 刪除數(shù)據(jù)庫(kù)中數(shù)據(jù)

    # mysql -u root -p
    mysql> drop database dbname;

    3) 停止MySQL

    # /etc/init.d/mysqld stop

    4) 刪除ibdata1文件(移動(dòng)到/tmp下)

    # mv /var/lib/mysql/ibdata1 /tmp
    # mv /var/lib/mysql/ib_logfile0 /tmp
    # mv /var/lib/mysql/ib_logfile1 /tmp

    5) my.cnf設(shè)定

    # vi /etc/my.cnf
    開啟獨(dú)享表空間,并指定ibdata1大小為1G,ibdata2大小200M,自動(dòng)擴(kuò)張。
    innodb_data_home_dir = /var/lib/mysql
    innodb_data_file_path = ibdata1:1G;ibdata2:200M:autoextend
    innodb_file_per_table

    6) 啟動(dòng)MySQL

    # /etc/init.d/mysqld start

    7) 導(dǎo)入數(shù)據(jù)

    # mysql -u root -p < /tmp/all-database.dump

    8) 確認(rèn)

    后記

    開啟獨(dú)享表空間后,并不是說就不需要ibdata1了,因?yàn)樵趇bdata1中還保存著下面這些數(shù)據(jù)。

    • InnoDB表的元數(shù)據(jù)

    • Buffer

    • UNDO日志

    到此,相信大家對(duì)“MySQL中的ibdata1怎么使用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI