解决MySQL数据库目录ibdata1文件占用空间大问题

经常使用MySQL并启用了InnoDB引擎的时候,会发现数据库相应目录下,ibdata1这个文件会越来越大,并且即便删除表中数据也无法减小其空间占用。所以,接下来的配置就是为了解决这个问题。

1、先停止所有访问数据库的服务;
2、导出数据文件;

mysqldump -u root -p dbname| gzip > dbname.sql.gz
该命令会将数据库压缩导出,会慢点,如果你数据库并不大的话,可以不用压缩,那么就是:

mysqldump -u root -p dbname > dbname.sql
3、修改MySQL配置;

vi /etc/mysql/my.cnf
在[mysqld]下添加一行:

innodb_file_per_table
并删除数据库所在路径中的ibdata1及两个log文件。
然后重新启动数据库:

service mysql restart
接下来登进数据库,使用以下命令查看配置是否生效:

show variables like '%per_table%';
如果输出结果为ON,那么配置已经修改成功;
4、导入原来的数据
登入数据库后执行:

source dbname.sql
或者不登录mysql执行:

mysqldump -uroot -p dbname < dbname.sql;
导入完成后即可发现,ibdata1这个文件已经不怎么增长了,所有数据表的数据都会存在他自己目录下的同名db文件中,这时候清理表数据后,空间占用也会相应的减小。

Linux修改mysql数据文件路径

1.设置新的存放路径

mkdir -p /data/mysql
2.复制原有数据

cp -R /var/lib/mysql/* /data/mysql
3.修改权限

chown -R mysql:mysql /data/mysql
4.修改配置文件

vi /etc/mysql/my.cnf
datadir = /data/mysql
5.修改启动文件

vi /etc/apparmor.d/usr.sbin.mysqld
#把

/var/lib/mysql r,
/var/lib/mysql/** rwk,
#改成

/data/mysql r,
/data/mysql/** rwk,
6.重启服务
重启apparmor

/etc/init.d/apparmor restart
/etc/init.d/mysql restart
至此修改完成。

附录:

导出数据库并压缩:

mysqldump -u root -p mysql | gzip > mysql.sql.gz
解压:

gunzip mysql.sql.gz
导入:

source mysql.sql

mysqldump -uroot -p dbname < dbname.sql;
如果无法启动,查看LOG:

tail -n 40 /var/log/syslog

时间: 2024-10-30 00:55:05

解决MySQL数据库目录ibdata1文件占用空间大问题的相关文章

mysql数据库目录存放位置更改

mysql数据库目录存放位置更改  使用了VPS一段时间之后发现磁盘空间快满了.本人的VPS在购买的时候买了500gbd的磁盘,提供商赠送了20GB的高性能系统磁盘.这样系统就有两个磁盘空间了.因此在初次安装mysql 的是时候将数据库目录安装在了系统盘.(第一个磁盘)使用了一段时间之后数据库存储量变大,快将20GB的存放空间占满了.因此必须将存放数据空间换地方了.嘿嘿下面是简单的操作了,不合理之处还请大侠们指点. 操作步骤:     1.检查mysql数据库存放目录     mysql -u 

php计算指定目录下文件占用空间的方法

 这篇文章主要介绍了php计算指定目录下文件占用空间的方法,实例分析了php操作目录及文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php计算指定目录下文件占用空间的方法.分享给大家供大家参考.具体分析如下: php中可以通过 RecursiveDirectoryIterator 扩展 DirectoryIterator的getChildren() 方法提供访问子目录中的每一个元素的方法,下面的代码通过遍历访问目录下的所有文件,获取他们暂用的空间. ? 1 2 3

mysql-请问:用java代码怎样读取MySQL数据库生成JSP文件?谢谢!

问题描述 请问:用java代码怎样读取MySQL数据库生成JSP文件?谢谢! 用java代码怎样读取MySQL数据库生成JSP文件? 解决方案 你是要写一个数据导出的程序吧,程序里面包含数据导出命令,生成文件格式为jsp啊. 解决方案二: 将文件从数据库(MySQL)中进行读取 解决方案三: 不能从后台去数据库去数据然后写到JSP文件?

php计算指定目录下文件占用空间的方法_php技巧

本文实例讲述了php计算指定目录下文件占用空间的方法.分享给大家供大家参考.具体分析如下: php中可以通过 RecursiveDirectoryIterator 扩展 DirectoryIterator的getChildren() 方法提供访问子目录中的每一个元素的方法,下面的代码通过遍历访问目录下的所有文件,获取他们暂用的空间. <?php $dir = new RecursiveDirectoryIterator('C:\wamp'); $totalSize = 0; foreach (n

请问:java代码通过io流怎么读取MySQL数据库生成jsp文件?谢谢!

问题描述 请问:java代码通过io流怎么读取MySQL数据库生成jsp文件?谢谢! java代码通过io流怎么读取MySQL数据库生成jsp文件 解决方案 IO读取数据库?!你确定? 最次也得是jdbc吧?要有大神实现我也涨涨姿势.. 或者jdbc读到内存再写成文件,再用IO读到内存写成jsp? 解决方案二: io流读取文件数据,数据库都是sql语句获取的,你这问法不懂, 解决方案三: 回复a877536298: <% String url = "jdbc:mysql://localho

csv 文件导入mysql 数据库 ,提示文件找不到什么原因?

问题描述 csv 文件导入mysql 数据库 ,提示文件找不到什么原因? LOAD DATA INFILE "D:/csv03011039.csv" REPLACE INTO TABLE download_csv CHARACTER SET utf8 FIELDS TERMINATED BY "," ENCLOSED BY "" LINES TERMINATED BY "rn"; 解决方案 d:xxx.csv 注意文件路径

求教如何java程序调用cmd 连接mysql数据库读取sql文件

问题描述 求教如何java程序调用cmd 连接mysql数据库读取sql文件 开始 -> 运行 -> 输入CMD D: cd mysqlbin mysql -u root -p123456 test <d:a.sql 这是在命令行执行的 谁能告诉我JAVA要怎么写 谢谢啦 解决方案 http://www.cnblogs.com/taoweiji/archive/2012/12/11/2812852.html 解决方案二: java本身就是在虚拟机里面运行的,不可能去调用Windows的组

如何解决mysql数据库8小时无连接自动关闭

windows下打开my.ini,增加: interactive_timeout=28800000 wait_timeout=28800000 专家解答:MySQL是一个小型关系型数据库管理系统,由于MySQL体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库. 关于mysql自动关闭服务的现象,可以通过mysql服务器端程序mysql Administrator调整连接参数.将max_connections max_u

为什么 mysql 里的 ibdata1 文件不断的增长?

ibdata1 file 我们在 Percona 支持栏目经常收到关于 MySQL 的 ibdata1 文件的这个问题. 当监控服务器发送一个关于 MySQL 服务器存储的报警时,恐慌就开始了 -- 就是说磁盘快要满了. 一番调查后你意识到大多数地盘空间被 InnoDB 的共享表空间 ibdata1 使用.而你已经启用了 innodb_file_per_table,所以问题是: ibdata1存了什么? 当你启用了 innodb_file_per_table,表被存储在他们自己的表空间里,但是共