韩一一 發表於 2025-3-22 00:00:00

Mysql磁盘占用、日志清理的方法

<p>在Mysql环境下,常常由于数据磁盘满而导致Mysql故障。下面整理了如何在Mysql环境下做好Mysql的空间清理。</p><p class="maodian"><br/></p><h3>1.查看文件磁盘占用</h3><p class="maodian"><br/></p><h3>1.1 查看磁盘空间占用</h3><div class="yscode"><pre class="brush:sql;">#&nbsp;df&nbsp;-lh</pre></div><p style="text-align: center"><img src="https://zhuji.jb51.net/uploads/allimg/20230823/1-230R3102120225.png" style="max-width:789px;"/><br/></p><p class="maodian"><br/></p><h3>1.2 查看目录空间占用</h3><div class="yscode"><pre class="brush:bash;">#&nbsp;du&nbsp;-sh&nbsp;/usr
5.5G&nbsp;&nbsp;&nbsp;&nbsp;/usr</pre></div><p style="text-align: center"><img src="https://zhuji.jb51.net/uploads/allimg/20230823/1-230R3102121291.png" style="max-width:789px;"/></p><p class="maodian"><br/></p><h3>2.Binlog日志清理</h3><p class="maodian"><br/></p><h3>2.1.定时自动清理Binlog日志</h3><div class="yscode"><pre class="brush:sql;">mysql&gt;show&nbsp;variables&nbsp;like&nbsp;&#39;%expire_logs_days%&#39;;&nbsp;&nbsp;--mysql&nbsp;5.7
mysql&gt;&nbsp;show&nbsp;variables&nbsp;like&nbsp;&#39;%binlog_expire_logs_seconds%&#39;&nbsp;&nbsp;--mysql8.0
mysql8.0
mysql&nbsp;8开始&nbsp;expire_logs_days&nbsp;废弃&nbsp;启用binlog_expire_logs_seconds设置binlog自动清除日志时间
保存时间&nbsp;以秒为单位;默认2592000&nbsp;30天
14400&nbsp;&nbsp;&nbsp;4小时;86400&nbsp;&nbsp;1天;259200&nbsp;&nbsp;3天;
mysql&gt;&nbsp;set&nbsp;global&nbsp;binlog_expire_logs_seconds=86400;
mysql5.7
这个默认是0,也就是logs不过期,可通过设置全局的参数,使他临时生效:
mysql&gt;set&nbsp;global&nbsp;expire_logs_days=10;</pre></div><p style="text-align: center"><img src="https://zhuji.jb51.net/uploads/allimg/20230823/1-230R31021224a.png" style="max-width:789px;"/><br/></p><p class="maodian"><br/></p><h3>2.2 手动删除Binlog日志</h3><div class="yscode"><pre class="brush:sql;">第一步:登陆进入mysql,并使用&nbsp;show&nbsp;binary&nbsp;logs;&nbsp;查看日志文件。
mysql&gt;show&nbsp;binary&nbsp;logs;
第二步:查看正在使用的日志文件:show&nbsp;master&nbsp;status;
mysql&gt;show&nbsp;master&nbsp;status;
当前正在使用的日志文件是mysqlhost01-bin.000010,那么删除日志文件的时候应该排除掉该文件。
删除日志文件的命令:purge&nbsp;binary&nbsp;logs&nbsp;to&nbsp;&#39;mysqlhost01-bin.000010&#39;;
mysql&gt;purge&nbsp;binary&nbsp;logs&nbsp;to&nbsp;&#39;mysqlhost01-bin.000010&#39;;
删除除mysqlhost01-bin.000010以外的日志文件
也可以指定其他文件名,例如mysql-bin.000003。
删除后就能释放大部分空间。</pre></div><p style="text-align: center"><img src="https://zhuji.jb51.net/uploads/allimg/20230823/1-230R31021234I.png" style="max-width:789px;"/></p><p class="maodian"><br/></p><h3>2.3.Slow日志清理</h3><div class="yscode"><pre class="brush:sql;">步骤一&nbsp;查看slow日志模式
mysql&gt;show&nbsp;variables&nbsp;like&nbsp;&#39;log_output%&#39;;
步骤二&nbsp;查看Slow日志文件位置
show&nbsp;variables&nbsp;like&nbsp;&#39;%slow%&#39;;
步骤三&nbsp;清空Slow日志
#&nbsp;cd&nbsp;/usr/local/mysql57/mysql5730/data
#&nbsp;echo&nbsp;&quot;&quot;&gt;mysqlhost01-slow.log</pre></div><p style="text-align: center"><img src="https://zhuji.jb51.net/uploads/allimg/20230823/1-230R31021235P.png" style="max-width:789px;"/><br/></p><p style="text-align: center"><img src="https://zhuji.jb51.net/uploads/allimg/20230823/1-230R3102124317.png" style="max-width:789px;"/></p><p class="maodian"><br/></p><h3>2.4.Error日志清理</h3><div class="yscode"><pre class="brush:sql;">步骤一&nbsp;查看error日志位置
mysql&gt;show&nbsp;variables&nbsp;like&nbsp;&#39;log_error&#39;;
步骤二&nbsp;查看error日志大小
#&nbsp;ll&nbsp;-h&nbsp;log.err
步骤三&nbsp;清空error日志
echo&nbsp;&quot;&quot;&gt;/usr/local/mysql57/mysql5730/data/log.err</pre></div><p style="text-align: center"><img src="https://zhuji.jb51.net/uploads/allimg/20230823/1-230R3102125923.png" style="max-width:789px;"/></p><p class="maodian"><br/></p><h3>3、表清理</h3><p>大表,指单个数据文件磁盘占用大于100G,或者单个表数据记录量大于1亿。<br/></p><p class="maodian"><br/></p><h3>3.1.查看表占空间和记录数</h3><div class="yscode"><pre class="brush:sql;">select&nbsp;table_schema,table_name,
concat(round((data_length+index_length)/1024/1024/1024,2),&#39;G&#39;)&nbsp;as&nbsp;tablesize_gb,
table_rows&nbsp;from&nbsp;information_schema.tables
order&nbsp;by&nbsp;tablesize_gb&nbsp;desc&nbsp;limit&nbsp;5;
table_schema:库名
table_name&nbsp;:表名
tablesize_gb:表占空间大小,以G为单位
table_rows:行数</pre></div><p style="text-align: center"><img src="https://zhuji.jb51.net/uploads/allimg/20230823/1-230R3102126131.png" style="max-width:789px;"/><br/></p><p class="maodian"><br/></p><h3>3.2 常规表数据清理</h3><div class="yscode"><pre class="brush:sql;">常规表指没达到大表标准的。
Delete
语法:Delete&nbsp;from&nbsp;table_name&nbsp;[&nbsp;where&nbsp;condition]
Delete&nbsp;只删除符合条件的数据,不会减少表所占空间。
Delete大量数据后,会存在碎片,需要整理回收碎片空间
optimize&nbsp;table&nbsp;table.name
或者&nbsp;alter&nbsp;table&nbsp;table.name&nbsp;engine=&#39;innodb&#39;&nbsp;(会锁表,注意在业务低谷期执行)

Truncate
语法:Truncate&nbsp;table&nbsp;table_name
Truncate&nbsp;删除全表数据,回收所占表空间。
Drop
语法:Drop&nbsp;table&nbsp;table_name
Drop&nbsp;删除全表数据和表结构,回收所占表空间。</pre></div><p><br/></p><p><br/></p>
頁: [1]
查看完整版本: Mysql磁盘占用、日志清理的方法