mysql怎么縮小 mysql 縮表

如何壓縮Mysql數(shù)據(jù)庫(kù)

壓縮表從名字上來看,簡(jiǎn)單理解為壓縮后的表,也就是把原始表根據(jù)一定的壓縮算法按照一定的壓縮比率壓縮后生成的表。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),華容企業(yè)網(wǎng)站建設(shè),華容品牌網(wǎng)站建設(shè),網(wǎng)站定制,華容網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,華容網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

1.1 壓縮能力強(qiáng)的產(chǎn)品

表壓縮后從磁盤占用上看要比原始表要小很多。如果你熟悉列式數(shù)據(jù)庫(kù),那對(duì)這個(gè)概念一定不陌生。比如,基于 PostgreSQL 的列式數(shù)據(jù)庫(kù) Greenplum;早期基于 MySQL 的列式數(shù)據(jù)庫(kù) inforbright;或者 Percona 的產(chǎn)品 tokudb 等,都是有壓縮能力非常強(qiáng)的數(shù)據(jù)庫(kù)產(chǎn)品。

1.2 為什么要用壓縮表?

情景一:磁盤大小為 1T,不算其他的空間占用,只能存放 10 張 100G 大小的表。如果這些表以一定的比率壓縮后,比如每張表從 100G 壓縮到 10G,那同樣的磁盤可以存放 100 張表,表的容量是原來的 10 倍。情景二:默認(rèn) MySQL 頁(yè)大小 16K,而 OS 文件系統(tǒng)一般塊大小為 4K,所以在 MySQL 在刷臟頁(yè)的過程中,有一定的概率出現(xiàn)頁(yè)沒寫全而導(dǎo)致數(shù)據(jù)壞掉的情形。比如 16K 的頁(yè)寫了 12K,剩下 4K 沒寫成功,導(dǎo)致 MySQL 頁(yè)數(shù)據(jù)損壞。這個(gè)時(shí)候就算通過 Redo Log 也恢復(fù)不了,因?yàn)閹缀跤兴械年P(guān)系數(shù)據(jù)庫(kù)采用的 Redo Log 都記錄了數(shù)據(jù)頁(yè)的偏移量,此時(shí)就算通過 Redo Log 恢復(fù)后,數(shù)據(jù)也是錯(cuò)誤的。所以 MySQL 在刷臟數(shù)據(jù)之前,會(huì)把這部分?jǐn)?shù)據(jù)先寫入共享表空間里的 DOUBLE WRITE BUFFER 區(qū)域來避免這種異常。此時(shí)如果 MySQL 采用壓縮表,并且每張表頁(yè)大小和磁盤塊大小一致,比如也是 4K,那 DOUBLE WRITE BUFFER 就可以不需要,這部分開銷就可以規(guī)避掉了。查看文件系統(tǒng)的塊大?。?/p>

root@ytt-pc:/home/ytt#??tune2fs?-l?/dev/mapper/ytt--pc--vg-root??|?grep?-i?'block?size'Block size: ? ? ? ? ? ? ? 4096

1.3 壓縮表的優(yōu)勢(shì)

壓縮表的優(yōu)點(diǎn)非常明顯,占用磁盤空間小!由于占用空間小,從磁盤置換到內(nèi)存以及之后經(jīng)過網(wǎng)絡(luò)傳輸都非常節(jié)省資源。

簡(jiǎn)單來講:節(jié)省磁盤 IO,減少網(wǎng)絡(luò) IO。

1.4 壓縮表的缺陷

當(dāng)然壓縮表也有缺點(diǎn),壓縮表的寫入(INSERT,UPDATE,DELETE)比普通表要消耗更多的 CPU 資源。

壓縮表的寫入涉及到解壓數(shù)據(jù),更新數(shù)據(jù),再壓縮數(shù)據(jù),比普通表多了解壓和再壓縮兩個(gè)步驟,壓縮和解壓縮需要消耗一定的 CPU 資源。所以需要選擇一個(gè)比較優(yōu)化的壓縮算法。

1.5 MySQL 支持的壓縮算法

這塊是 MySQL 所有涉及到壓縮的基礎(chǔ),不僅僅用于壓縮表,也用于其它地方。比如客戶端請(qǐng)求到 MySQL 服務(wù)端的數(shù)據(jù)壓縮;主從之間的壓縮傳輸;利用克隆插件來復(fù)制數(shù)據(jù)庫(kù)操作的壓縮傳輸?shù)鹊取?/p>

從下面結(jié)果可以看到 MySQL 支持的壓縮算法為 zlib 和 zstd,MySQL 默認(rèn)壓縮算法為 zlib,當(dāng)然你也可以選擇非 zlib 算法,比如 zstd。至于哪種壓縮算法最優(yōu),暫時(shí)沒辦法簡(jiǎn)單量化,依賴表中的數(shù)據(jù)分布或者業(yè)務(wù)請(qǐng)求。

如何收縮Mysql的ibdata1文件

修改表引擎

1.對(duì)每個(gè)InnoDB表執(zhí)行 ALTER TABLE table_name ENGINE=MyISAM;

2.停止Mysql服務(wù);

3.移除InnoDB相關(guān)文件ibdata1等;

4.修改my.cnf中的參數(shù),添加innodb_file_per_table;

在my.cnf中[mysqld]下設(shè)置

innodb_file_per_table=1

5.啟動(dòng)Mysql服務(wù);

6.將剛才修改后的那些表改回InnoDB:ALTER TABLE table_name ENGINE=InnoDB;

導(dǎo)出InnoDB表

1.使用mysqldump命令導(dǎo)出所有的InnoDB表,例如: mysqldump –add-drop-table –extended-insert –disable-keys –quick ‘db_name’ –tables ‘tbl_name’ ‘db_name.tbl_name.sql’

2.刪掉這些表:

?SET FOREIGN_KEY_CHECKS=0;

?DROP TABLE db_name.tbl_name;

?DROP TABLE db_name1.tbl_name1;

?–– DROP other tables here…

?SET FOREIGN_KEY_CHECKS=1;

3.停止Mysql服務(wù);

4.移除InnoDB相關(guān)文件ibdata1等;

5.修改my.cnf中的參數(shù),添加innodb_file_per_table;

6.啟動(dòng)Mysql服務(wù);

7.在Mysql Console下導(dǎo)入表:

?SET FOREIGN_KEY_CHECKS=0;

?SOURCE db_name.tbl_name.sql;

?SOURCE db_name1.tbl_name1.sql;

?–– SOURCE other files here…

?SET FOREIGN_KEY_CHECKS=1;

導(dǎo)出整個(gè)數(shù)據(jù)庫(kù)

這個(gè)是我常用的,雖然他和耗磁盤和時(shí)間,但是確實(shí)是最簡(jiǎn)便的:

1.導(dǎo)出所有的數(shù)據(jù): /usr/bin/mysqldump ––extended-insert ––all-databases ––add-drop-database ––disable-keys ––flush-privileges ––quick ––routines ––triggers all-databases.sql

2.停止Mysql服務(wù);

3.重命名mysql數(shù)據(jù)文件夾;

4.修改my.cnf中的參數(shù),添加innodb_file_per_table;

5.mysql_install_db重新初始化mysqld;

6.開啟Mysql服務(wù);

7.進(jìn)入Mysql Console執(zhí)行:

?SET FOREIGN_KEY_CHECKS=0;

?SOURCE all-databases.sql;

?SET FOREIGN_KEY_CHECKS=1;

8.重啟數(shù)據(jù)庫(kù)測(cè)試OK就領(lǐng)賞去吧。

如果因?yàn)閿嚯娀蛘咧苯雨P(guān)機(jī)導(dǎo)致idb文件出錯(cuò),就需要重構(gòu)這些文件

[mysqld]

加 innodb_force_recovery=1

我的Dz論壇提示mysql數(shù)據(jù)庫(kù)超過50兆。 1.一般推薦多少兆? 2.如何縮小它占用空間。

對(duì)于discuz論壇來說50M的數(shù)據(jù)庫(kù)很小了,等你帖子有幾十萬(wàn)了,數(shù)據(jù)庫(kù)幾個(gè)G都很正常,只要數(shù)據(jù)庫(kù)夠用就可以

別縮小占用空間,過度優(yōu)化會(huì)有很多的錯(cuò)誤的

如果數(shù)據(jù)庫(kù)超過10G,可以考慮站庫(kù)分離或者云數(shù)據(jù)庫(kù)

mysql縮小字段長(zhǎng)度

縮小一個(gè)字段的長(zhǎng)度:altertable表名modifycolumn字段名類型。如:demo表里的test字段,原來長(zhǎng)度是100個(gè)字符,現(xiàn)長(zhǎng)度要改成10個(gè)字符altertabledemomodifycolumntestvarchar(10)。這樣就可以設(shè)置完成了。

如何對(duì)Mysql 數(shù)據(jù)表壓縮

633M -rw-rw---- 1 mysql mysql 632M Oct 25 17:51 url_comment_0.ibd 12K -rw-rw---- 1 mysql mysql 8.7K Oct 25 18:16 url_comment_0.frm 178M -rw-rw---- 1 mysql mysql 178M Oct 25 18:53 url_comment_0.MYD 99M -rw-rw---- 1 mysql mysql 98M Oct 25 18:53 url_comment_0.MYI結(jié)論:由上面數(shù)據(jù)可知innodb plugin能有效壓縮innodb數(shù)據(jù)文件,近50%,另外相同的情況下使用MyISAM表也可較大的減少數(shù)據(jù)大小(178+99633M). 當(dāng)然實(shí)際的壓縮比例和表的結(jié)構(gòu)等有關(guān),如字段為varchar會(huì)有較大的壓縮比,而int類型壓縮率會(huì)低些~

文章題目:mysql怎么縮小 mysql 縮表
鏈接地址:http://www.muchs.cn/article24/hphjje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)搜索引擎優(yōu)化、微信公眾號(hào)定制網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)