• 如何收缩Mysql的ibdata1文件


    ibdata1是MySQL数据库中一个数据文件了,你会发现它来越大了,下面我来介绍收缩Mysql的ibdata1文件大小方法。

    如果你有使用InnoDB来存储你的Mysql表,使用默认设置应该会碰到个非常头疼的问题,在Mysql的数据目录里有个默认只有10MB叫ibdata1的文件没日没夜的增长让你烦透了吧?里面包含了InnoDB引擎存储的所有索引和数据信息,很可惜Mysql在设计的时候就没有收缩InnoDB表的功能,这就是为什么你在delete,truncate,drop这些表的时候这个文件大小没有丝毫要减少的原因,而且你还没办法直观的看到哪个数据库占用了大量的ibdata1,这个坑爹的问题在新版的Mysql中已经通过innodb_file_per_table这个选项来解决了,开启该选项后,每个InnoDB表的索引和数据都会按*.ibd命名存储到各个数据库中,但是这个选项默认是不开启的。

    如上所说,你没法去收缩InnoDB数据文件,你也没办法在一台没有打开innodb_file_per_table选项的机器上直接加上该选项让他工作,你必须在安装完Mysql就加上这个选项,或者按照本文介绍的方法来操作,无论你做任何操作,请确保你已经备份了整个数据库目录,也别忘了停掉Mysql相关的一些服务。

    1.mysqldump --extended-insert --all-databases --add-drop-database --disable-keys --flush-privileges --quick --routines --triggers > all-databases.sql
    2.停止Mysql服务;
    3.重命名mysql数据文件夹;
    4.修改my.cnf中的参数,添加innodb_file_per_table;
    在my.cnf中[mysqld]下设置
    innodb_file_per_table=1
    5.mysql_install_db重新初始化mysqld;
    6.开启Mysql服务;
    7.进入Mysql Console执行:
    ◦SET FOREIGN_KEY_CHECKS=0;
    ◦SOURCE all-databases.sql;
    ◦SET FOREIGN_KEY_CHECKS=1;
    8.重启数据库测试

    如果因为断电或者直接关机导致idb文件出错,就需要重构这些文件

    [mysqld]

    加 innodb_force_recovery=1

  • 相关阅读:
    docker基本命令
    vscode 保存提示运行"XXX"的保存参与者: 快速修复
    Vue 2.6 插槽
    代码大全-PartOne-变量命名
    Axure 8.0.1.3388 注册码 授权码 破解
    乱七八糟记一下乱七八糟的碎片化知识
    JavaScript需记的一些细节
    Python3.6问题
    python3.6- shape mismatch: objects cannot be broadcast to a single shape
    Angular+ng-zorro遇坑记
  • 原文地址:https://www.cnblogs.com/amoy9812/p/6627254.html
Copyright © 2020-2023  润新知