`
Robinson
  • 浏览: 91240 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MySQL Innodb表空间不足的处理方法

    博客分类:
  • DB
阅读更多

官方给出的解决方案:

添加和删除 InnoDB 数据和日志文件

这一节描述在InnoDB表空间耗尽空间之时,或者你想要改变日志文件大小之时,你可以做的一些事情。

最简单的,增加InnoDB表空间大小的方法是从开始配置它为自动扩展的。为表空间定义里的最后一个数据文件指定autoextend属性。然后在文件耗尽空间之时,InnoDB以8MB为 增量自动增加该文件的大小。增加的大小可以通过设置innodb_autoextend_increment值来配置,这个值以MB为单位,默认的是8。

作为替代,你可以通过添加另一个数据文件来增加表空间的尺寸。要这么做的话,你必须停止MySQL服务器,编辑my.cnf文件 ,添加一个新数据文件到innodb_data_file_path的末尾,然后再次启动服务器。

如果最后一个数据文件是用关键字autoextend定义的,编辑my.cnf文件的步骤必须考虑最后一个数据文件已经增长到多大。获取数据文件的尺寸,把它四舍五入到最接近乘积1024 × 1024bytes (= 1MB),然后在innodb_data_file_path中明确指定大致的尺寸。然后你可以添加另一个数据文件。记得只有innodb_data_file_path里最后一个数据可以被指定为自动扩展。

作为一个例子。假设表空间正好有一个自动扩展文件ibdata1:

innodb_data_home_dir =

innodb_data_file_path = /ibdata/ibdata1:10M:autoextend

假设这个数据文件过一段时间已经长到988MB。下面是添加另一个总扩展数据文件之后的配置行:

innodb_data_home_dir =

innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend

当你添加一个新文件到表空间的之后,请确信它并不存在。当你重启服务器之时,InnoDB创建并初始化这个文件。

当前,你不能从表空间删除一个数据文件。要增加表空间的大小,使用如下步骤:

1.    使用mysqldump 转储所有InnoDB表。

2.    停止服务器。

3.    删除所有已存在的表空间文件。

4.    配置新表空间。

5.    重启服务器。

6.    导入转储文件。

如果你想要改变你的InnoDB日志文件的数量和大小,你必须要停止MySQL服务器,并确信它被无错误地关闭。随后复制旧日志文件到 一个安全的地方以防万一某样东西在关闭时出错而你需要用它们来恢复表空间。从日志文件目录删除所有旧日志文件,编辑my.cnf来改变日志文件配置,并再 次启动MySQL服务器。mysqld 在启动之时发现没有日志文件,然后告诉你它正在创建一个新的日志文件。


实际中的简化版:

mysql ibdata1存放数据,索引等,是MYSQL的最主要的数据。

如果不把数据分开存放的话,这个文件的大小很容易就上了G,甚至10+G。对于某些应用来说,并不是太合适。因此要把此文件缩小。

方法:数据文件单独存放。

步骤:

1,备份数据库

从命令行进入MySQL Server 5.0\bin
备份全部数据库,执行命令mysqldump -q -uusername -pyourpassword --add-drop-table -all-databases > /all.sql

做完此步后,停止数据库服务。

2,修改mysql配置文件

修改my.ini文件,增加下面配置

innodb_file_per_table

对每张表使用单独的innoDB文件, 修改/etc/my.cnf文件

3,删除原数据文件

删除原来的ibdata1文件及日志文件ib_logfile*,删除data目录下的应用数据库文件夹(mysql文件夹不要删)

4,还原数据库

启动数据库服务

从命令行进入MySQL Server 5.0\bin
还原全部数据库,执行命令mysql -uusername -pyourpassword < /all.sql

经过以上几步后,可以看到新的ibdata1文件就只有几十M了,数据及索引都变成了针对单个表的小ibd文件了,它们在相应数据库的文件夹下面。

 

 

分享到:
评论

相关推荐

    Mysql innodb tablespace 表空间实践

    ### MySQL Innodb Tablespace 表空间实践 #### 知识点概述 - **表空间(Tablespace)**:在MySQL的InnoDB存储引擎中,表空间是用来管理数据存储的一种方式。它提供了对物理磁盘上数据文件组织的一种逻辑视图。 - *...

    MySQL InnoDB表空间加密示例详解

    总的来说,MySQL InnoDB表空间加密提供了对数据的额外安全保障,尤其是在处理敏感信息时。通过上述步骤,你能够成功地配置和测试MySQL的表空间加密功能。然而,需要注意的是,加密虽然增强了安全性,但也可能对性能...

    MySQL Innodb 索引原理详解

    ### MySQL Innodb 索引原理详解 #### 1. 各种树形结构 在深入探讨MySQL Innodb索引之前,我们先了解几种基本的树形数据结构,包括二叉搜索树、B树、B+树以及B*树。 ##### 1.1 搜索二叉树(Binary Search Tree) ...

    Mysql InnoDB删除数据后释放磁盘空间的方法

    MySQL的InnoDB存储引擎在处理数据删除时,采用了一种称为“空间回收”的机制,它并不立即释放被删除记录所占用的空间,而是将其标记为可用。这种设计在高并发环境下提高了系统的性能,避免了频繁的磁盘I/O操作。然而...

    MySql innodb 引擎表存储分析

    MySQL的InnoDB存储引擎是一种广泛使用的事务处理引擎,支持行级锁定和外键约束等功能。本文将深入解析InnoDB存储引擎中的表存储机制,重点介绍其如何管理和存储数据。 #### InnoDB表存储结构 InnoDB表存储结构的...

    mysql Innodb表空间卸载、迁移、装载的使用方法

    MySQL的InnoDB存储引擎在处理表空间方面有两种模式:共享表空间和独立表空间。共享表空间模式下,所有InnoDB表的数据和索引都存储在一个或多个大文件(如ibdata1)中。而独立表空间模式,也称为文件-per-table模式,...

    MySQL内核:InnoDB存储引擎 卷1.pdf.zip

    深入学习《MySQL内核:InnoDB存储引擎 卷1》,读者可以了解到InnoDB的内部工作机制,如如何处理B+树索引、事务的提交与回滚、锁的实现以及内存管理等内容,这对于优化数据库性能、解决并发问题、设计高效的数据模型...

    实战mysql innodb 删除数据后释放磁盘

    解决这个问题的方法是,在创建数据库时,设置参数 innodb_file_per_table=1。这将使 InnoDB 对每个表创建一个数据文件,然后可以使用 OPTIMIZE TABLE 命令来释放所有已经删除的磁盘空间。 OPTIMIZE TABLE 命令可以...

    MySql Innodb底层存储架构

    MySQL的InnoDB存储引擎是目前使用最为广泛的事务处理引擎之一,它提供了行级锁定、外键支持、崩溃修复能力以及多版本并发控制等功能。InnoDB存储引擎的底层存储架构设计得非常精细,能够有效地支持大规模的数据存储...

    mysql 5.6 新特性-innodb

    ### MySQL 5.6 新特性-InnoDB:深入剖析 #### MySQL 5.6 版本简介及重要性 MySQL 5.6 是 MySQL 的一个重要版本,相比于之前的版本(如 MySQL 5.1 和 5.5),它在多个方面进行了显著的改进。这些改进不仅提升了...

    MySql Innodb 引擎特性详解

    5. **支持分区和表空间**:InnoDB引擎支持数据分区和表空间管理,便于管理和优化大规模数据集。 6. **支持外键约束**:与MyISAM相比,InnoDB引擎支持外键约束,有助于维护数据库的完整性。 7. **不支持全文索引*...

    MySQL InnoDB存储引擎特性全揭秘

    InnoDB 存储引擎的文件管理主要包括表空间文件、重做日志文件等。 - **表空间文件**: - **独立表空间文件**:通过 `--innodb-file-per-table` 参数配置,使每张表拥有单独的 `.ibd` 文件。 - **全局表空间文件**...

    MySQL Innodb 参数详解与优化实践

    MySQL作为一款广泛使用的开源关系型数据库管理系统,其InnoDB存储引擎因其高可靠性和事务处理能力而备受青睐。为了充分发挥InnoDB的优势并针对特定场景进行性能优化,合理配置相关的参数至关重要。本文将详细介绍...

    MySQL innodb 8.0 新特性

    MySQL是一个广泛使用的开源关系型数据库管理系统,而InnoDB是MySQL的默认存储引擎,提供了事务处理、行级锁定和外键等特性。随着技术的不断进步,MySQL数据库也在不断地更新和改进。在MySQL 8.0版本中,InnoDB作为其...

    mysql innodb引擎 知识点总结

    MySQL的InnoDB引擎是数据库管理的核心组件,尤其在处理事务处理和行级锁定方面表现出色。以下是关于MySQL InnoDB引擎的一些关键知识点: 1. **事务处理**:InnoDB支持ACID(原子性、一致性、隔离性和持久性)事务,...

    Mysql Innodb page结构解析

    在深入探讨MySQL Innodb引擎中Page的结构之前,我们需要明确一点:Innodb是MySQL中一个非常重要的存储引擎,尤其在处理高并发读写场景时表现突出。它的核心设计之一就是Page的管理机制,这是理解Innodbd工作原理的...

    MYSQL innodb性能优化学习总结

    - **innodb_file_per_table**:该参数控制InnoDB是否为每个表使用独立的数据表空间,建议设置为1,以避免共享表空间(ibdata1)可能带来的问题,例如难以进行数据库的备份和恢复。 - **innodb_stats_on_metadata**...

    查看InnoDB的磁盘空间利用率

    在MySQL数据库系统中,InnoDB存储引擎是默认的事务处理引擎,它负责处理大部分的数据存储和操作。了解InnoDB的磁盘空间利用率是数据库管理员优化性能、规划存储和监控数据库健康状况的重要环节。本篇文章将深入探讨...

Global site tag (gtag.js) - Google Analytics