`
Robinson
  • 浏览: 87849 次
  • 性别: 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文件了,它们在相应数据库的文件夹下面。

 

 

分享到:
评论

相关推荐

    InnoDB 中文参考手册

    MySQL 的企业级解决方案,高...在InnoDB表中不需要扩大锁定(lock escalation),因为 InnoDB 的列锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。

    innodb系统表空间维护方法

    环境说明: 有一个在运行中的mysql环境,由于之前的配置文件设置的过于简单(没有配置innodb_data_file_path变更);...2、为mysql增加第二个系统表空间文件,设置它的大小并且加上autoextend属性 [mys

    InnoDB中文参考手册

    InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行锁(locking on row level),提供与 ...

    《MYSQL备份与恢复》之 Innodb与 MyISAM引擎

     以流的形式产生备份,可以直接保存到远程机器上(本机硬盘空间不足时很有用)  MySQL数据库本身提供的工具并不支持真正的增量备份,二进制日志恢复是point-in-time(时间点)的恢复而不是增量备份。Xtrabackup工具...

    Innodb中mysql快速删除2T的大表方法示例

    前言 本文主要给大家介绍了关于Innodb中mysql快速删除2T的大表的相关内容,分享出来供大家参考...这意味着,如果在白天,访问量非常大的时候,如果你在不做任何处理措施的情况下,执行了删大表的命令,整个mysql就挂

    新版 MySQL DBA 高级视频 基于MySQL 5.7 MySQL 8.0版本.rar

    │ 7_MySQL字表分区和NULL值特殊处理.mp4 │ 8_MySQL表分区管理.mp4 │ 作业.docx │ 作业及答案.docx │ ├─新版MySQL DBA综合实战班 第09天 │ 1_课堂作业讲解.mp4 │ 2_MySQL复制原理.mp4 │ 3_MySQL传统复制...

    浅析mysql 共享表空间与独享表空间以及他们之间的转化

    对于innodb的数据结构,首先要解决两个概念性的问题: 共享表空间以及独占表空间。什么是共享表空间和独占表空间共享表空间以及独占表空间都是针对数据的存储方式而言的。共享表空间: 某一个数据库的所有的表数据,...

    MySQL删除数据,表文件大小依然没变的原因

    对于运行很长时间的数据库来说,往往会出现表占用存储空间过大的问题,可是将许多没用的表删除之后,表文件的大小并没有改变,想解决这个问题,就需要了解 InnoDB 如何回收表空间的。 对于一张表来说,占用空间重要...

    MySQL 5.1中文手冊

    15.2.5. 创建InnoDB表空间 15.2.6. 创建InnoDB表 15.2.7. 添加和删除InnoDB数据和日志文件 15.2.8. InnoDB数据库的备份和恢复 15.2.9. 将InnoDB数据库移到另一台机器上 15.2.10. InnoDB事务模型和锁定 15.2.11. ...

    mysql数据库my.cnf配置文件

    # InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间 # 独立表空间优点: # 1.每个表都有自已独立的表空间。 # 2.每个表的数据和索引都会存在自已的表空间中。 # 3.可以实现单表在不同的数据库中...

    MySQL 5.1参考手册

    15.2.5. 创建InnoDB表空间 15.2.6. 创建InnoDB表 15.2.7. 添加和删除InnoDB数据和日志文件 15.2.8. InnoDB数据库的备份和恢复 15.2.9. 将InnoDB数据库移到另一台机器上 15.2.10. InnoDB事务模型和锁定 15.2.11. ...

    MySQL 5.1官方简体中文参考手册

    5.4. mysql_fix_privilege_tables:升级MySQL系统表 5.5. MySQL服务器关机进程 5.6. 一般安全问题 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻击者面前保持安全 5.6.3. Mysqld安全相关启动选项 5.6.4. LOAD DATA LOCAL...

    MySQL面试题精选35题

    8.什么是独立表空间和共享表空间?它们的区别是什么? 9.清空表的所有数据性能最好的语句是? 10.唯一索引和普通索引哪个性能更好? 11.left join 和 right join 的区别是什么? 12.什么是最左匹配原则?它的生效...

    MySQL 5.1参考手册 (中文版)

    15.2.5. 创建InnoDB表空间 15.2.6. 创建InnoDB表 15.2.7. 添加和删除InnoDB数据和日志文件 15.2.8. InnoDB数据库的备份和恢复 15.2.9. 将InnoDB数据库移到另一台机器上 15.2.10. InnoDB事务模型和锁定 15.2.11. ...

    MySQL 5.1参考手册中文版

    5.4. mysql_fix_privilege_tables:升级MySQL系统表 5.5. MySQL服务器关机进程 5.6. 一般安全问题 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻击者面前保持安全 5.6.3. Mysqld安全相关启动选项 5.6.4. LOAD DATA ...

    mysql5.1中文手册

    mysql_fix_privilege_tables:升级MySQL系统表 5.5. MySQL服务器关机进程 5.6. 一般安全问题 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻击者面前保持安全 5.6.3. Mysqld安全相关启动选项 5.6.4. ...

    MySQL无法启动1067错误的又一种解决方法(机房断电)

    2.删除innodb表空间ibdata1 3.启动mysql服务: 4.导入数据: 5.检查数据: 虽然这方法简单,但需要mysqldump导出的数据文件进行还原。 您可能感兴趣的文章:mysql 服务意外停止1067错误解决办法小结mysql服务...

    Mysql存储引擎InnoDB和Myisam的六大区别

     基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB  事务处理上方面:    MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不...

Global site tag (gtag.js) - Google Analytics