中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中的ibdata1怎么使用

發布時間:2023-03-13 11:09:22 來源:億速云 閱讀:147 作者:iii 欄目:開發技術

本篇內容主要講解“MySQL中的ibdata1怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MySQL中的ibdata1怎么使用”吧!

    MySQL的ibdata1用法

    系統表空間是InnoDB數據字典、雙寫緩沖區、更改緩沖區和撤消日志的存儲區域 。

    如果表是在系統表空間中創建的,而不是在每個表文件或通用表空間中創建,則它還可能包含表和索引數據。

    系統表空間可以有一個或多個數據文件。默認情況下,ibdata1會在數據目錄中創建一個名為 的系統表空間數據文件 。系統表空間數據文件的大小和數量由innodb_data_file_path啟動選項定義。

    MySQL中的ibdata1怎么使用

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

    • 數據字典Data dictionary:只讀的表,存儲對象的相關信息,如占用空間,列的缺省值,約束信息,用戶名,權限,審計信息等;

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

    • 插入緩沖區INSERT BUFFER:針對輔助索引(非unique),插入數據的時候,先將插入的數據在buffer中根據輔助索引葉子節點的Page_no排序,而后按照Page_no分批次插入,提高性能;

    • 回滾日志rollback segment: 用于存儲未提交事物,便于用戶rollback,當commit后,數據即被標記無效;

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

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

    mysql 默認配置使用 innodb 引擎 innodb_file_per_table 默認是關閉的 , 因此表空間默認建立在 ibdata1 上

    MySQL中的ibdata1怎么使用

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

    2 、如果 innodb_file_per_table=0( 默認 =1) ,則 ibdata 也存放 InnoDB 表的實際數據,也就是 InnoDB 表建立后,不會再有單獨的 tablename.ibd 文件 , 如果是 innodb_file_per_table=1, 存放 在新的表的 ibd 文件當中

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

    導致ibdata1 增長很快的原因

    數據庫中運行有長事務,記錄了大量的UNDO信息,從而導致了ibdata1持續增長。

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

    MySQL中的ibdata1怎么使用

    mysql中并未提供如何查看ibdata1中的存儲內容信息。可以使用工具 innochecksum 來看。

    ibdata1是什么?

    MySQL使用InnoDB引擎的時候,ibdata1這個文件會隨著時間的增長,會變得越來越大,占據大量的磁盤空間。

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

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

    發現問題所在之后,解決方法就是,使用獨享表空間,將表空間分別單獨存放。MySQL開啟獨享表空間的參數是Innodb_file_per_table,會為每個Innodb表創建一個.ibd的文件。

    操作步驟

    下面講一下具體的操作。

    1) 導出數據庫中所有數據

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

    2) 刪除數據庫中數據

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

    3) 停止MySQL

    # /etc/init.d/mysqld stop

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

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

    5) my.cnf設定

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

    6) 啟動MySQL

    # /etc/init.d/mysqld start

    7) 導入數據

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

    8) 確認

    后記

    開啟獨享表空間后,并不是說就不需要ibdata1了,因為在ibdata1中還保存著下面這些數據。

    • InnoDB表的元數據

    • Buffer

    • UNDO日志

    到此,相信大家對“MySQL中的ibdata1怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    鲁山县| 多伦县| 会理县| 北票市| 南康市| 海安县| 大荔县| 会宁县| 清原| 巴东县| 明溪县| 磐安县| 城步| 高密市| 阜新市| 渭南市| 长兴县| 岳普湖县| 石门县| 盐山县| 周宁县| 景泰县| 二连浩特市| 安远县| 石台县| 长春市| 连江县| 五河县| 蚌埠市| 凌海市| 静乐县| 彰化县| 哈巴河县| 洛隆县| 涟源市| 通许县| 巢湖市| 玛曲县| 甘洛县| 当涂县| 甘谷县|