1.对每个InnoDB表执行 ALTER TABLE table_name ENGINE=MyISAM
2.停止Mysql服务;
3.移除InnoDB相关文件ibdata1等;
4.修改my.cnf中的参数,添加innodb_file_per_table;
在my.cnf中[mysqld]下设置
innodb_file_per_table=1
5.启动Mysql服务;
6.将刚才修改后的那些表改回InnoDB:ALTER TABLE table_name ENGINE=InnoDB;
导出InnoDB表
1.使用mysqldump命令导出所有的InnoDB表,例如: mysqldump –add-drop-table –extended-insert –disable-keys –quick ‘db_name’ –tables ‘tbl_name’ >‘db_name.tbl_name.sql’
2.删掉这些表:
◦SET FOREIGN_KEY_CHECKS=0
◦DROP TABLE db_name.tbl_name
◦DROP TABLE db_name1.tbl_name1
◦–– DROP other tables here…
◦SET FOREIGN_KEY_CHECKS=1
3.停止Mysql服务;
4.移除InnoDB相关文件ibdata1等;
5.修改my.cnf中的参数,添加innodb_file_per_table;
6.启动Mysql服务;
7.在Mysql Console下导入表:
◦SET FOREIGN_KEY_CHECKS=0
◦SOURCE db_name.tbl_name.sql
◦SOURCE db_name1.tbl_name1.sql
◦–– SOURCE other files here…
◦SET FOREIGN_KEY_CHECKS=1
导出整个数据库
这个是我常用的,虽然他和耗磁盘和时间,但是确实是最简便的:
1.导出所有的数据: /usr/bin/mysqldump ––extended-insert ––all-databases ––add-drop-database ––disable-keys ––flush-privileges ––quick ––routines ––triggers >all-databases.sql
2.停止Mysql服务;
3.重命名mysql数据文件夹;
4.修改my.cnf中的参数,添加innodb_file_per_table;
5.mysql_install_db重新初始化mysqld;
6.开启Mysql服务
7.进入Mysql Console执行:
◦SET FOREIGN_KEY_CHECKS=0
◦SOURCE all-databases.sql
◦SET FOREIGN_KEY_CHECKS=1
8.重启数据库测试OK就领赏去吧。
如果因为断电或者直接关机导致idb文件出错,就需要重构这些文件
[mysqld]
加 innodb_force_recovery=1
以前的小应用没有注意这个问题,现在遇到了mysql表中删除了100W数据,但是体检只有一点点变小,删除前是4.7G,删除后是4.6G。优化以后2.2G,哼哼哼哼。。。查资料知道原因是mysql默认是不自动收缩的,所以删除数据体积不会变小。
我们需要手动优化来收缩数据。
方法一:使用Navicat的最优化功能
因为我是使用Navicat作为工具,所以推荐使用这个功能。选中需要优化的表,最优化即可。
方法二:运行命令优化
optimizetable数据表名称
方法三:自动批处理。说白了,还是运行命令
建议一个自动运行任务,每隔一段时间自动运行一下。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)