脚踏实地、勇往直前!
全部博文(1005)
分类: Mysql/postgreSQL
2014-10-21 17:28:48
innodb引起的数据库,即使开启了 innodb_file_per_table=1 每个表一个ibdata文件,但是一些数据信息还是会存入到innodb_data_file_path定义的共享文件中,若是没有开启innodb_file_per_table的话,所有的数据都存放在共享文件中,这样的话就会导致ibdata文件不停的增长,导致磁盘空间紧张,通过下面的办法可以给ibdata文件瘦身.
1.备份所有的数据库
$mysqldump -h node2 -uroot -poracle --default-character-set=gbk --routines --single-transaction --all-databases|gzip>/dbext/mysql/bak/all_db_bak.sql.gz
2.删除数据库
mysql> drop database hxl;
Query OK, 0 rows affected (0.03 sec)
这个步骤可以不用,我这里是因为这个数据库有点问题,将其删除掉
3.停止mysql
mysqladmin -h hostname -uroot -p shutdown
4.删除ibdata*,ib_logfile文件
根据配置文件中相应参数(innodb_data_file_path,innodb_log_group_home_dir)指定的路径进行删除,每个数据库的环境都可能不一样
$rm /db/mysql/innodb/redolog/*
$rm /db/mysql/innodb/data/*
5.重新启动mysqld
重启动后,系统会根据配置innodb_data_file_path参数(这里可以根据需要调整ibdata文件,比如大小,个数
)自动生成ibdata文件,根据innodb_log_group_home_dir参数生成ib_logfile文件
6.导入数据
$time gunzip -c /dbext/mysql/bak/all_db_bak.sql.gz|mysql -h node2 -uroot -p
[mysql@node2 config]$ time gunzip -c /dbext/mysql/bak/all_db_bak.sql.gz|mysql -h node2 -uroot -p
Enter password:
ERROR 1813 (HY000) at line 45: Tablespace for table '`cr_debug`.`breakpoints`' exists. Please DISCARD the tablespace before IMPORT.
我这里报如上的错误,打算删除数据库cr_debug,这个可以放心删除,因为前面我们做了整个数据的备份
mysql> drop database cr_debug;
ERROR 1010 (HY000): Error dropping database (can't rmdir './cr_debug', errno: 39)
mysql> drop database cr_debug;
Query OK, 0 rows affected (0.00 sec)
进入到数据库目录cr_debug将该目录下的文件删除掉,然后再次执行导入命令.
-- The End --