`
hudeyong926
  • 浏览: 2032680 次
  • 来自: 武汉
社区版块
存档分类
最新评论

innodb 共享表空间 转 独立表空间 详细说明

 
阅读更多

关于 MySQL 中的 Innodb 引擎就不多说了, 毕竟除了MyISAM 之外, 它的应用最广泛. Innodb 存储数据有两种方式: 共享表空间 和 独立表空间. 顾名思义, 共享表空间 就是把所有数据库数据放在一个或多个文件中( 这种方式的话,使用裸设备倒是很方便); 独立表空间 就是采用和MyISAM 相同的方式, 每个表拥有一个独立的数据文件( .idb )。
在服务器资源有限,单表数据不是特别多的情况下, 独立表空间明显比共享方式效率更高 . 但是MySQL 默认是共享表空间

1,查看一下是共享表空间,还是独立表空间

mysql> show variables like '%per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF   |
+-----------------------+-------+
1 row in set (0.00 sec)

如果是OFF,肯定不是独立表空间。如果是ON的话,也不一定是独立表空间。最直接的方法就是查看硬盘上的文件,独立表空间,每个表都对应了一个空间。

[root@localhost tg]# ll  
总用量 64  
-rw-rw----. 1 mysql mysql   65 12月 30 20:09 db.opt  
-rw-rw----. 1 mysql mysql 8658 12月 30 23:17 gb.frm  
-rw-rw----. 1 mysql mysql 8658 12月 30 23:19 qr.frm  
-rw-rw----. 1 mysql mysql 8658 12月 30 23:19 qy.frm  
-rw-rw----. 1 mysql mysql 8658 12月 30 23:19 tg.frm  
-rw-rw----. 1 mysql mysql 8658 12月 30 23:19 xcy.frm  

tg是一个数据库名,里面的都是innodb的。像这种情况就是共享表空间。

2,停掉mysql

/etc/init.d/mysqld stop  

 3,修改my.cnf的配置文件 [mysqld] 段添加

innodb-file-per-table=1  

 4,备份使用innodb引擎的数据库

mysqldump -u tg -p tg >/home/6fan/tg.sql;  

 5,删除使用innodb的数据库,以及日志文件

cd /var/lib/mysql    //数据库文件位置

rm -f ib*           //删除日志和空间

rm -rf tg           //删除使用innodb引擎的数据库文件夹

如果不删除使用innodb的数据库文件夹,启动不了innodb引擎,我查看了一下错误日志。如下

111231 20:54:44 InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 512 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100 200 300 400 500
111231 20:54:50 InnoDB: Log file ./ib_logfile1 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile1 size to 512 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100 200 300 400 500
InnoDB: Cannot initialize created log files because
InnoDB: data files are corrupt, or new data files were
InnoDB: created when the database was started previous
InnoDB: time but the database was not shut down
InnoDB: normally after that.
111231 20:54:55 [ERROR] Plugin 'InnoDB' init function returned error.
111231 20:54:55 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
111231 20:54:55 [Note] Event Scheduler: Loaded 0 events

6,启动mysql

/etc/init.d/mysqld start 

 7,导入数据库

mysql -u root -p  < /home/6fan/tg.sql

8,在查看一下,是转换好了

//进入到mysql后的查寻
mysql> show variables like '%per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON   |
+-----------------------+-------+
1 row in set (0.00 sec)

//查看数据库目录下的文件
[root@localhost tg]# ll
总用量 544
-rw-rw----. 1 mysql mysql    65 12月 31 22:48 db.opt
-rw-rw----. 1 mysql mysql  8658 12月 31 22:49 gb.frm
-rw-rw----. 1 mysql mysql 98304 12月 31 22:49 gb.ibd
-rw-rw----. 1 mysql mysql  8658 12月 31 22:49 qr.frm
-rw-rw----. 1 mysql mysql 98304 12月 31 22:49 qr.ibd
-rw-rw----. 1 mysql mysql  8658 12月 31 22:49 qy.frm
-rw-rw----. 1 mysql mysql 98304 12月 31 22:49 qy.ibd
-rw-rw----. 1 mysql mysql  8658 12月 31 22:49 tg.frm
-rw-rw----. 1 mysql mysql 98304 12月 31 22:49 tg.ibd
-rw-rw----. 1 mysql mysql  8658 12月 31 22:49 xcy.frm
-rw-rw----. 1 mysql mysql 98304 12月 31 22:49 xcy.ibd

 从这里可以看出,每一张表都对应有一个.ibd的文件,根共享表空间是不一样的。到这儿就完全配置好了。

分享到:
评论

相关推荐

    Mysql InnoDB 共享表空间和独立表空间

    mysql InnoDB的存储管理也类似,但是mysql增加了一个共享表空间和独立表空间的概念;  一、概念  共享表空间: Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以...

    innodb存储引擎修改表共享空间为独立空间

    共享表空间模式下,所有的InnoDB表数据和索引都存储在一个或多个文件中,而独立表空间模式则为每个InnoDB表创建单独的数据文件。 1. **共享表空间与独立表空间的区别** - **共享表空间**:所有InnoDB表的数据和...

    MySql innodb 引擎表存储分析

    - 通过查询 `innodb_file_per_table` 变量确认是否启用了独立表空间管理模式。 ```sql SHOW VARIABLES LIKE '%per%'; ``` - 结果显示 `innodb_file_per_table` 的值为 `ON`,表明启用了独立表空间管理模式。 5...

    InnoDB 表的限制

    系统表空间共享所有InnoDB表,而独立表空间允许为每个表创建单独的物理文件,以更好地管理磁盘空间。 10. **内存限制** InnoDB使用缓冲池来缓存数据和索引,其大小由`innodb_buffer_pool_size`参数设置。过小会...

    浅析mysql 共享表空间与独享表空间以及他们之间的转化

    转换共享表空间和独享表空间时,可以手动进行,但是需要注意,一旦共享表空间中的表数据被使用,就无法通过修改参数来改变它们的存储方式,除非将现有数据导入新的独立表空间中。 此外,还可以修改独享表空间的数据...

    mysql Innodb表空间卸载、迁移、装载的使用方法

    MySQL的InnoDB存储引擎在处理表空间方面有两种模式:共享表空间和独立表空间。共享表空间模式下,所有InnoDB表的数据和索引都存储在一个或多个大文件(如ibdata1)中。而独立表空间模式,也称为文件-per-table模式,...

    InnoDB官方文档中文翻译版

    InnoDB使用表空间(Tablespaces)来存储数据,可以配置多个表空间,包括系统表空间(默认)和独立表空间。数据文件(.ibd)存储表的物理结构和数据,每个InnoDB表可以有自己的独立表空间文件。 六、页与B+树索引 ...

    mysql-innodb

    InnoDB的数据和索引存储在表空间中,可以使用共享表空间或独享表空间。独享表空间模式下,每个表都有独立的.idb文件存储数据和索引,而.frm文件则保存元数据。表空间的移动和恢复需谨慎操作,如使用`ALTER TABLE`...

    Innodb的整体架构图1

    3. **数据和索引存储**:InnoDB支持两种表空间模式:共享表空间和独立表空间。在共享表空间模式下,所有数据和索引都存放在ibdata1文件中,这简化了管理,但可能导致空间利用率不高。而在独立表空间模式下,每个表的...

    InnoDB源码解析

    - .ibd文件:InnoDB使用独立表空间存储每个表的数据和索引。 - ibdata文件:系统表空间文件,所有表共享。 - Redo Log文件:为故障恢复提供支持,保证了事务的持久性。 - Doublewrite Buffer文件:用于存储临时页,...

    mySql 存储引擎 启用 Innodb

    - **InnoDB**:数据存储在一个或多个表空间文件中,可以是独立表空间或共享表空间。每个表空间可以包含多个表的数据。InnoDB还支持原始设备表空间,允许将表数据直接存储在裸设备上。 - **MyISAM**:每个表的数据...

    优化InnoDB表BLOB,TEXT列的存储效率

    1、InnoDB可以选择使用共享表空间或者是独立表空间方式,建议使用独立表空间,便于管理、维护。启用 innodb_file_per_table 选项,5.5以后可以在线动态修改生效,并且执行 ALTER TABLE xx ENGINE = InnoDB 将现有表...

    空间不足之Lvm方案与MySQL自带方案比较

    4. **空间管理**:独立表空间不存在共享表空间的表空间回缩问题,删除操作后可以通过ALTER TABLE等命令回收空间,减少碎片产生。 5. **性能优化**:独立表空间有助于减少碎片化,尤其在单表数据量很大时,易于发现...

Global site tag (gtag.js) - Google Analytics