mysql数据库解决ibdata1文件过大方案

1.问题描述

收到值班室电话,某服务器空间占用超过80%,通过du -sh命令查看定位mysql库里ibdata1文件持续增长所致

2.问题分析

查看mysql相关配置信息发现mysql未开启分表存储系统,所有数据共享ibdata1存储空间导致ibdata1文件增长过快


该表格第二列字段为ibdata1中已经使用的空间,第三列为未使用空间。通过该表格可以看出ibdata中有很多空白空间未重复使用

3.问题原因及解决方案

由于MySQL配置方式为数据不独立存储(共享表空间),导致空白空间无法重复使用,占用空间逐渐增加。这个是Mysql的innodb引擎一直以来的问题,即这个ibdata1文件从不会缩小,即使数据删除后的碎片空间也不会被利用,会导致文件的大小大会远大于实际数据的大小。具体参见mysql这个bug描述

解决方案:

重装mysql数据库,整个过程需要暂停服务,主要步骤:

3.1 备份mysql数据库sdnxs

[root@jk-3 mysql]# mysqldump -uroot -p sdnxs > sdnxs.sql

Enter password:

备份/etc/my.cnf

3.2 停止mysql数据库

service mysqld stop

3.3 配置yum源

[root@jk-3 media]# cd /etc/yum.repos.d/

[root@jk-3 yum.repos.d]# vi my.repo

[base]

name=base

baseurl=file:///media/john

enabled=1

gpgcheck=0

挂载iso文件

[root@jk-3 media]# mount -o loop -t iso9660 /media/linux6.8x64.iso /media/john/

3.4 卸载mysql安装包

操作之前需要对my.cnf文件做备份

yum remove mysql*

rm –rf /var/lib/mysql/

rm –rf /etc/my.cnf

3.5 重新安装mysql

 [root@jk-3 john]# yum -y install mysql*

设置密码

 [root@jk-3 john]#  /usr/bin/mysqladmin -u root password 'root'

3.6 将配置文件修改为单表数据分开存储

vim /etc/my.cnf

加入配置

innodb_file_per_table=1

#自动启动

chkconfig  mysqld on

3.7登录mysql创建数据库

启动数据库

service mysqld start

登录

[root@jk-3 john]# mysql -uroot -p

Enter password:

show variables like '%innodb_file%';

导入备份sql

create database sdnxs character set utf8;

use sdnxs;

source /tmp/sdnxs.sql;

你可能感兴趣的:(mysql数据库解决ibdata1文件过大方案)