美文网首页
mysql数据库解决ibdata1文件过大方案

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

作者: john_so | 来源:发表于2019-04-04 10:09 被阅读0次

    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文件过大方案

          本文链接:https://www.haomeiwen.com/subject/xpaxiqtx.html