如果mysql磁盤(pán)滿(mǎn)了,會(huì)發(fā)生什么?還真被我遇到了!
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)
真香!24W字的Java面試手冊(cè)(點(diǎn)擊查看)
使用命令發(fā)現(xiàn)磁盤(pán)使用率為100%了,還剩幾十兆。
一系列神操作
備份數(shù)據(jù)庫(kù),刪除實(shí)例、刪除數(shù)據(jù)庫(kù)表、重啟mysql服務(wù),結(jié)果磁盤(pán)空間均沒(méi)有釋放。
怎么辦
網(wǎng)上查了很多資源,說(shuō)要進(jìn)行磁盤(pán)碎片化整理。原因是datafree占據(jù)的空間太多啦。具體可以通過(guò)這個(gè)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';
這個(gè)是后來(lái)的圖了,之前的圖沒(méi)有留,當(dāng)時(shí)顯示一張表里的data_free都達(dá)到了20個(gè)G。

網(wǎng)上推薦的做法如下所示,對(duì)表格進(jìn)行碎片化整理。
ALTER TABLE datainfo ENGINE=InnoDB;
ANALYZE TABLE datainfo;
optimize table datainfo;
僵局:
后來(lái)的神操作
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
service mysql stop
3、刪除datadir目錄下的ibdata1、ib_logfile0 ib_logfile1這些文件

4、 移動(dòng)mysql的啟動(dòng)參數(shù)
mv /etc/my.cnf ./abc
5、重新啟動(dòng)mysql 發(fā)現(xiàn)磁盤(pán)空間釋放了 service mysql start
磁盤(pán)空間終于釋放了
下一步數(shù)據(jù)庫(kù)還原
1、采用navicate備份工具,進(jìn)行數(shù)據(jù)庫(kù)備份

備份成功后生成了,生成psc文件。200409141055.psc
2、新建一個(gè)數(shù)據(jù)庫(kù)實(shí)例,設(shè)置數(shù)據(jù)庫(kù)名和字符集
3、然后對(duì)備份數(shù)據(jù)庫(kù)進(jìn)行還原,點(diǎn)擊還原
還原時(shí)當(dāng)成一個(gè)事務(wù)進(jìn)行了,遇到錯(cuò)誤就停止了。更改配置
重新進(jìn)行還原,數(shù)據(jù)庫(kù)里的數(shù)據(jù)有了,并且驗(yàn)證沒(méi)有問(wèn)題。
問(wèn)題解決
mysql碎片化產(chǎn)生的原因
清除碎片的優(yōu)點(diǎn):
降低訪問(wèn)表時(shí)的IO,提高mysql性能,釋放表空間降低磁盤(pán)空間使用率
注意
1.MySQL官方建議不要經(jīng)常(每小時(shí)或每天)進(jìn)行碎片整理,一般根據(jù)實(shí)際情況,只需要每周或者每月整理一次即可(我們現(xiàn)在是每月凌晨4點(diǎn)清理mysql所有實(shí)例下的表碎片)。
2.在OPTIMIZE TABLE運(yùn)行過(guò)程中,MySQL會(huì)鎖定表。因此,這個(gè)操作一定要在網(wǎng)站訪問(wèn)量較少的時(shí)間段進(jìn)行。
3.清理student的105萬(wàn)條數(shù)據(jù), OPTIMIZE TABLE 庫(kù).student;本地測(cè)試需要37秒。
自測(cè)
大家可以用這條語(yǔ)句看看自己的系統(tǒng)的datafree大不大 show table status from 表名;
如有文章對(duì)你有幫助,
歡迎關(guān)注??、點(diǎn)贊??、轉(zhuǎn)發(fā)??!
推薦, Java面試手冊(cè) 內(nèi)容包括網(wǎng)絡(luò)協(xié)議、Java基礎(chǔ)、進(jìn)階、字符串、集合、并發(fā)、JVM、數(shù)據(jù)結(jié)構(gòu)、算法、MySQL、Redis、Mongo、Spring、SpringBoot、MyBatis、SpringCloud、Linux以及各種中間件(Dubbo、Nginx、Zookeeper、MQ、Kafka、ElasticSearch)等等... 點(diǎn)擊文末“閱讀原文”可直達(dá)



