mysql表ibdata1数据切换到单个表储存、默认导出的表结构

释放MySQL ibdata1文件的空间

mysqldump选项:

--add-drop-table:在每个创建数据库表语句前添加删除数据库表的语句;

--add-locks:备份数据库表时锁定数据库表;

--all-databases:备份MySQL服务器上的所有数据库;

--comments:添加注释信息;

--compact:压缩模式,产生更少的输出;

--complete-insert:输出完成的插入语句;

--databases:指定要备份的数据库;

--default-character-set:指定默认字符集;

--force:当出现错误时仍然继续备份操作;

--host:指定要备份数据库的服务器;

--lock-tables:备份前,锁定所有数据库表;

--no-create-db:禁止生成创建数据库语句;

--no-create-info:禁止生成创建数据库库表语句;

--password:连接MySQL服务器的密码;

--port:MySQL服务器的端口号;

--user:连接MySQL服务器的用户名。

mysqldump默认导出的表结构如下:

mysqldump  -uroot -p-d  -B testdb >testdb.sql

[sql] view plain copy 

  1. DROP TABLE IF EXISTS `test`;
  2. CREATE TABLE `test` (
  3. `id` int(11) NOTNULL AUTO_INCREMENT,
  4. `name` varchar(5)DEFAULT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

来自: http://man.linuxde.net/mysqldump

在MySQL数据库中,如果不指定innodb_file_per_table参数,单独存在每个表的数据,MySQL的数据都会存放在ibdata1文件。
mysql ibdata1存放数据,索引等,是MYSQL的最主要的数据。

步骤:

1,备份数据库

从命令行进入MySQL Server 5.1/bin
备份全部数据库,执行命令mysqldump -q -uusername -pyourpassword --add-drop-table --all-databases > /backup/all.sql

删除数据库
drop database db1;
drop database db2;

此处不删除应用数据库,在全库恢复数据库时,就会报异常错误,一些表的*.ibd会报不存在。

解决方式:

move db1 /backup/db1_bak

move db2 /backup/db2_bak

做完此步后,然后停止数据库。

2,修改mysql配置文件

修改my.cnf文件,增加下面配置

innodb_file_per_table

对每张表使用单独的innoDB文件, 修改/etc/my.cnf文件

3,删除原数据文件

删除原来的ibdata1文件及日志文件ib_logfile*,删除data目录下的应用数据库文件夹(mysql,test,information_schema数据库本身文件夹不要删除)

4,还原数据库

启动数据库服务

从命令行进入MySQL Server 5.1/bin
还原全部数据库,执行命令mysql -uusername -pyourpassword < /backup/*.sql

大公告成。

经过以上几步后,可以看到新的ibdata1文件就只有几十M了,数据及索引都变成了针对单个表的小ibd文件了,它们在相应数据库的文件夹下面。

时间: 2024-10-07 05:27:35

mysql表ibdata1数据切换到单个表储存、默认导出的表结构的相关文章

mysql 如何将一个库的一个表的数据复制到另一个库中的一个表

insert   库2..表2   select   字段1,字段2   from   库1..表1 where 条件 https://www.cnblogs.com/banruo/archive/2010/09/07/1820285.html 如果 库 中没有这个表 Create table Table2 (Select * from Table1); https://blog.csdn.net/wangluo605/article/details/82289209 原文地址:https://

EF里单个实体的增查改删以及主从表关联数据的各种增删 改查

本文目录 EF对单个实体的增查改删 增加单个实体 查询单个实体 修改单个实体 删除单个实体 EF里主从表关联数据的各种增删改查 增加(增加从表数据.增加主从表数据) 查询(根据主表找从表数据.根据从表找主表数据) 修改(修改从表的外键) 删除(删除主从表关系.删除主表数据.删除主从表数据.修改从表数据外键) 补充内容 SaveChanges方法提交多次操作 DbSet.Add方法返回当前实体 源码和系列文章导航 注:本章节多次演示了各种删除,要重复查看效果,需要解开注释初始化数据方法. 一.EF

使用SQL语句清空数据库所有表的数据

近来发现数据库过大,空间不足,因此打算将数据库的数据进行全面的清理,但表非常多,一张一张的清空,实在麻烦,因此就想利用SQL语句一次清空所有数据.找到了三种方法进行清空.使用的数据库为MS SQL SERVER.1.搜索出所有表名,构造为一条SQL语句 declare @trun_name varchar(8000)set @trun_name='' select @trun_name=@trun_name + 'truncate table ' + [name] + ' ' from syso

mysql初识之数据文件及其他文件

在mysql中数据文件存放于在my.cnf中datadir指定的路径,使用的表引擎不同产生的文件格式.表文件个数也会有所差异.mysql的表引擎有多种,表的扩展名也不一样,如innodb用“ .ibd”,archive用“.arc ”,csv用“.csv”等. myisam表引擎 myisam表会产生三个文件:MYI.MYD.frm文件 frm文件: 主要存放表的元数据(meta),包括表结构定义信息等.不论是哪个表引擎都会有一个frm文件,存放在数据库的数据目录下. .MYI文件(索引文件):

Oracle11G R2用exp无法导出空表解决方法

在11G R2中有个新特性,当表无数据时,不分配segment,以节省空间Oracle当然在执行export导出时,空表则无法导出,但是还是有解决办法的: 解决方法: 一.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 二.设置deferred_segment_creation参数 该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment.修改SQL语句: alter sy

Oracle 11gR2 用exp无法导出空表解决方法

Oracle 11gR2 用exp无法导出空表解决方法 在11gR2中有个新特性,当表无数据时,不分配segment以节省空间,Oracle 当然在执行export导出时,空表则无法导出,但是还是有解决办法的: 解决方法: 一.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 二.设置deferred_segment_creation参数 该参数值默认是TRUE,当改为FALSE时,无无是空表还是非空表,

MySQL在创建数据表的时候创建索引

转载:http://www.baike369.com/content/?id=5478 MySQL在创建数据表的时候创建索引 在MySQL中创建表的时候,可以直接创建索引.基本的语法格式如下: CREATE TABLE 表名(字段名 数据类型 [完整性约束条件], [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY [索引名](字段名1 [(长度)] [ASC | DESC]) ); UNIQUE:可选.表示索引为唯一性索引. FULLTEXT:可选.表示索引为全

记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案

问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务. 问题前提:老系统,当时设计系统的人大概是大学没毕业,表设计和sql语句写的不仅仅是垃圾,简直无法直视.原开发人员都已离职,到我来维护,这就是传说中的维护不了就跑路,然后我就是掉坑的那个!!! 我尝试解决该问题,so,有个这个日志. 方案概述 方案一:优化现有mysql数据库.优点:不影响现有业务

mysql数据库、数据表、数据基本操作

1 连接数据库 mysql -h 主机地址 -u用户名 -p 密码 2 查看数据库 show databases; 3 查看版本号 select version(); 4 查看当前数据库 select database(); 5 查看现有的数据表 show tables; 6 查看数据表结构 desc 表名; 7 查看数据表创建语句 show create table table_name; 8 查询数据 select * from 表名; 9 查看数据表的前三条数据 select * from