ibdata1是?
2016-05-28 16:10
162 查看
MySQL使用InnoDB引擎的时候,ibdata1这个文件会随着时间的增长,会变得越来越大,占据大量的磁盘空间。
那么,ibdata1里保存了哪些东西,为什么会变得越来越大呢,让我们开看看ibdata1的构造。
ibdata1是InnoDB的共有表空间,默认情况下会把表空间存放在一个文件ibdata1中,会造成这个文件越来越大。
发现问题所在之后,解决方法就是,使用独享表空间,将表空间分别单独存放。MySQL开启独享表空间的参数是Innodb_file_per_table,会为每个Innodb表创建一个.ibd的文件。
![](http://www.skyarch.cn/wp-content/uploads/2015/08/mysql_ibdata1_01.png)
1) 导出数据库中所有数据
2) 删除数据库中数据
3) 停止MySQL
4) 删除ibdata1文件(移动到/tmp下)
5) my.cnf设定
6) 启动MySQL
7) 导入数据
8) 确认
![](http://www.skyarch.cn/wp-content/uploads/2015/08/mysql_ibdata1_02.png)
InnoDB表的元数据
Buffer
UNDO日志
那么,ibdata1里保存了哪些东西,为什么会变得越来越大呢,让我们开看看ibdata1的构造。
ibdata1是InnoDB的共有表空间,默认情况下会把表空间存放在一个文件ibdata1中,会造成这个文件越来越大。
发现问题所在之后,解决方法就是,使用独享表空间,将表空间分别单独存放。MySQL开启独享表空间的参数是Innodb_file_per_table,会为每个Innodb表创建一个.ibd的文件。
![](http://www.skyarch.cn/wp-content/uploads/2015/08/mysql_ibdata1_01.png)
操作步骤
下面讲一下具体的操作。1) 导出数据库中所有数据
# mysqldump -u root -p --all-database > /tmp/all-database.dump
2) 删除数据库中数据
# mysql -u root -p mysql> drop database dbname;
3) 停止MySQL
# /etc/init.d/mysqld stop
4) 删除ibdata1文件(移动到/tmp下)
# mv /var/lib/mysql/ibdata1 /tmp # mv /var/lib/mysql/ib_logfile0 /tmp # mv /var/lib/mysql/ib_logfile1 /tmp
5) my.cnf设定
# vi /etc/my.cnf 开启独享表空间,并指定ibdata1大小为1G,ibdata2大小200M,自动扩张。 innodb_data_home_dir = /var/lib/mysql innodb_data_file_path = ibdata1:1G;ibdata2:200M:autoextend innodb_file_per_table
6) 启动MySQL
# /etc/init.d/mysqld start
7) 导入数据
# mysql -u root -p < /tmp/all-database.dump
8) 确认
![](http://www.skyarch.cn/wp-content/uploads/2015/08/mysql_ibdata1_02.png)
后记
开启独享表空间后,并不是说就不需要ibdata1了,因为在ibdata1中还保存着下面这些数据。InnoDB表的元数据
Buffer
UNDO日志
相关文章推荐
- Leetcode 之Binary Tree Postorder Traversal(44)
- UIWindow UIView UILable UIButton
- Android客户端性能优化(魅族资深工程师毫无保留奉献)
- 随笔提示文本
- c实现哈希查找
- PHP 正则表达式
- Maven配置一键部署远程Tomcat
- C++之菱形继承
- 给VC++6.0加快捷注释和取消注释
- 九九乘法表及其扩展
- 100~200之间的素数(及其四个优化方案)
- 交换两个变量的四种方案(面试题)
- 统计二进制中1的个数(四种方案)
- JSP系列:(6)JSP进阶-模仿JSTL核心(core)标签库
- C注释转换到C++注释项目
- 冒泡排序(数组方法和指针方法)
- 单链表中查找倒数第K个节点
- 合并两个已序单链表
- 单链表的折半查找,冒泡排序,选择排序
- C++:继承