日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 架構(gòu)師社區(qū)
[導(dǎo)讀]備份數(shù)據(jù)庫,刪除實例、刪除數(shù)據(jù)庫表、重啟mysql服務(wù),結(jié)果磁盤空間均未釋放……

來源:https://testerhome.com/topics/23049

問題

使用命令發(fā)現(xiàn)磁盤使用率為100%了,還剩幾十兆。

一系列神操作

備份數(shù)據(jù)庫,刪除實例、刪除數(shù)據(jù)庫表、重啟mysql服務(wù).結(jié)果磁盤空間均未釋放

怎么辦

網(wǎng)上查了很多資源,說要進行磁盤碎片化整理。原因是datafree占據(jù)的空間太多啦。具體可以通過這個sql查看。

SELECT CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),'MB'AS data_size,
CONCAT(TRUNCATE(SUM(max_data_length)/1024/1024,2),'MB'AS max_data_size,
CONCAT(TRUNCATE(SUM(data_free)/1024/1024,2),'MB'AS data_free,
CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB'AS index_size
FROM information_schema.tables WHERE TABLE_NAME = 'datainfo';

這個是后來的圖了,之前的圖沒有留,當(dāng)時顯示一張表里的data_free都達到了20個G。

如果MySQL磁盤滿了,會發(fā)生什么?

網(wǎng)上推薦的做法如下所示,對表格進行碎片化整理。

ALTER TABLE datainfo ENGINE=InnoDB;
ANALYZE TABLE datainfo;

optimize table datainfo;

僵局

查看數(shù)據(jù)庫版本為5.562不支持inodb,要么選擇升級數(shù)據(jù)庫。正在這時,有個不好的消息發(fā)生了,那張表格給刪掉了,但是磁盤空間還是沒有釋放啊。所以對表進行碎片化整理的路也走不通了,因為表沒了。。。

后來的神操作

使用命令查看mysql安裝的位置和配置文件所在的地方

mysql 1118 945 0 14:28 ? 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock

關(guān)閉mysql

service mysql stop  

刪除datadir目錄下的ibdata1、ib_logfile0 ib_logfile1這些文件

如果MySQL磁盤滿了,會發(fā)生什么?

移動mysql的啟動參數(shù)

mv /etc/my.cnf ./abc

重新啟動mysql 發(fā)現(xiàn)磁盤空間釋放了

service mysql start

磁盤空間終于釋放了

下一步數(shù)據(jù)庫還原

采用navicate備份工具,進行數(shù)據(jù)庫備份

如果MySQL磁盤滿了,會發(fā)生什么?

備份成功后生成了,生成psc文件200409141055.psc

新建一個數(shù)據(jù)庫實例,設(shè)置數(shù)據(jù)庫名和字符集

如果MySQL磁盤滿了,會發(fā)生什么?

然后對備份數(shù)據(jù)庫進行還原,點擊還原

如果MySQL磁盤滿了,會發(fā)生什么?

開始進行還原

第一次還原后發(fā)現(xiàn)還原后數(shù)據(jù)庫表建成功了,但是表里面沒有數(shù)據(jù)。后來網(wǎng)上查找資料發(fā)現(xiàn)是,遇到錯誤就停止了。所以更改了還原的配置,再次進行還原。
之前是這樣設(shè)置的

如果MySQL磁盤滿了,會發(fā)生什么?

還原時當(dāng)成一個事務(wù)進行了,遇到錯誤就停止了。更改配置

如果MySQL磁盤滿了,會發(fā)生什么?

重新進行還原,數(shù)據(jù)庫里的數(shù)據(jù)有了,并且驗證沒有問題。

問題解決

mysql碎片化產(chǎn)生的原因

  1. 表的存儲會出現(xiàn)碎片化,每當(dāng)刪除了一行內(nèi)容,該段空間就會變?yōu)楸涣艨?,而在一段時間內(nèi)的大量刪除操作,會使這種留空的空間變得比存儲列表內(nèi)容所使用的空間更大;

  2. 當(dāng)執(zhí)行插入操作時,MySQL會嘗試使用空白空間,但如果某個空白空間一直沒有被大小合適的數(shù)據(jù)占用,仍然無法將其徹底占用,就形成了碎片;

  3. 當(dāng)MySQL對數(shù)據(jù)進行掃描時,它掃描的對象實際是列表的容量需求上限,也就是數(shù)據(jù)被寫入的區(qū)域中處于峰值位置的部分;

清除碎片的優(yōu)點

降低訪問表時的IO,提高mysql性能,釋放表空間降低磁盤空間使用率

  1. MySQL官方建議不要經(jīng)常(每小時或每天)進行碎片整理,一般根據(jù)實際情況,只需要每周或者每月整理一次即可(我們現(xiàn)在是每月凌晨4點清理mysql所有實例下的表碎片)。

  2. 在OPTIMIZE TABLE運行過程中,MySQL會鎖定表。因此,這個操作一定要在網(wǎng)站訪問量較少的時間段進行。

  3. 清理student的105萬條數(shù)據(jù), OPTIMIZE TABLE 庫.student;本地測試需要37秒。

自測

大家可以用這條語句看看自己的系統(tǒng)的datafree大不大

show table status from 表名;

特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:

如果MySQL磁盤滿了,會發(fā)生什么?

如果MySQL磁盤滿了,會發(fā)生什么?

如果MySQL磁盤滿了,會發(fā)生什么?

長按訂閱更多精彩▼

如果MySQL磁盤滿了,會發(fā)生什么?

如有收獲,點個在看,誠摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉