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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

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

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

Java代码   收藏代码
  1. mysql> show variables like '%per_table%';  
  2. +-----------------------+-------+  
  3. | Variable_name         | Value |  
  4. +-----------------------+-------+  
  5. | innodb_file_per_table | OFF   |  
  6. +-----------------------+-------+  
  7. 1 row in set (0.00 sec)  

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

Java代码   收藏代码
  1. [root@localhost tg]# ll    
  2. 总用量 64    
  3. -rw-rw----. 1 mysql mysql   65 12月 30 20:09 db.opt    
  4. -rw-rw----. 1 mysql mysql 8658 12月 30 23:17 gb.frm    
  5. -rw-rw----. 1 mysql mysql 8658 12月 30 23:19 qr.frm    
  6. -rw-rw----. 1 mysql mysql 8658 12月 30 23:19 qy.frm    
  7. -rw-rw----. 1 mysql mysql 8658 12月 30 23:19 tg.frm    
  8. -rw-rw----. 1 mysql mysql 8658 12月 30 23:19 xcy.frm    

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

2,停掉mysql

Java代码   收藏代码
  1. /etc/init.d/mysqld stop    

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

Java代码   收藏代码
  1. innodb-file-per-table=1    

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

Java代码   收藏代码
  1. mysqldump -u tg -p tg >/home/6fan/tg.sql;    

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

Java代码   收藏代码
  1. cd /var/lib/mysql    //数据库文件位置  
  2.   
  3. rm -f ib*           //删除日志和空间  
  4.   
  5. 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

Java代码   收藏代码
  1. /etc/init.d/mysqld start   

 7,导入数据库

Java代码   收藏代码
  1. mysql -u root -p  < /home/6fan/tg.sql  

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

Java代码   收藏代码
  1. //进入到mysql后的查寻  
  2. mysql> show variables like '%per_table%';  
  3. +-----------------------+-------+  
  4. | Variable_name         | Value |  
  5. +-----------------------+-------+  
  6. | innodb_file_per_table | ON   |  
  7. +-----------------------+-------+  
  8. 1 row in set (0.00 sec)  
  9.   
  10. //查看数据库目录下的文件  
  11. [root@localhost tg]# ll  
  12. 总用量 544  
  13. -rw-rw----. 1 mysql mysql    65 12月 31 22:48 db.opt  
  14. -rw-rw----. 1 mysql mysql  8658 12月 31 22:49 gb.frm  
  15. -rw-rw----. 1 mysql mysql 98304 12月 31 22:49 gb.ibd  
  16. -rw-rw----. 1 mysql mysql  8658 12月 31 22:49 qr.frm  
  17. -rw-rw----. 1 mysql mysql 98304 12月 31 22:49 qr.ibd  
  18. -rw-rw----. 1 mysql mysql  8658 12月 31 22:49 qy.frm  
  19. -rw-rw----. 1 mysql mysql 98304 12月 31 22:49 qy.ibd  
  20. -rw-rw----. 1 mysql mysql  8658 12月 31 22:49 tg.frm  
  21. -rw-rw----. 1 mysql mysql 98304 12月 31 22:49 tg.ibd  
  22. -rw-rw----. 1 mysql mysql  8658 12月 31 22:49 xcy.frm  
  23. -rw-rw----. 1 mysql mysql 98304 12月 31 22:49 xcy.ibd  

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
存储 关系型数据库 MySQL
第9章 【MySQL】InnoDB的表空间
第9章 【MySQL】InnoDB的表空间
226 0
第9章 【MySQL】InnoDB的表空间
|
10月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的表空间
InnoDB是MySQL默认的存储引擎,主要由存储结构、内存结构和线程结构组成。其存储结构分为逻辑和物理两部分,逻辑存储结构包括表空间、段、区和页。表空间是InnoDB逻辑结构的最高层,所有数据都存放在其中。默认情况下,InnoDB有一个共享表空间ibdata1,用于存放撤销信息、系统事务信息等。启用参数`innodb_file_per_table`后,每张表的数据可以单独存放在一个表空间内,但撤销信息等仍存放在共享表空间中。
143 6
|
存储 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
399 7
|
存储 关系型数据库 MySQL
认真学习InnoDB的数据存储结构中的区、段与表空间
认真学习InnoDB的数据存储结构中的区、段与表空间
337 2
|
存储 关系型数据库 MySQL
InnoDB 独立表空间与共享表空间
InnoDB 独立表空间与共享表空间
158 0
InnoDB 独立表空间与共享表空间
|
关系型数据库 数据库
Innodb表空间迁移
有cfg文件时表空间迁移 在源表上显示建表语句:
107 0
|
存储 关系型数据库 MySQL
一文带你了解MySQL之InnoDB表空间
通过前边的内容,相信大家都知道了表空间是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为表名.ibd的实际文件。 大家可以把表空间想象成被切分为许多个页的池子,当我们想为某个表插入一条记录的时候,就从池子中捞出一个对应的页来把数据写进去。 本章内容会深入到表空间的各个细节中,带领大家在InnoDB存储结构的池子中畅游。由于本章中将会涉及比较多的概念,虽然这些概念都不难,但是却相互依赖,所以奉劝大家看的时候:不要跳着看
442 0
|
存储 关系型数据库 MySQL
一文带你了解MySQL之InnoDB表空间
通过前边的内容,相信大家都知道了表空间是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为表名.ibd的实际文件。 大家可以把表空间想象成被切分为许多个页的池子,当我们想为某个表插入一条记录的时候,就从池子中捞出一个对应的页来把数据写进去。 本章内容会深入到表空间的各个细节中,带领大家在InnoDB存储结构的池子中畅游。由于本章中将会涉及比较多的概念,虽然这些概念都不难,但是却相互依赖,所以奉劝大家看的时候:不要跳着看
413 0
|
关系型数据库 MySQL
InnoDB系统表空间定义规则
1. InnoDB系统表空间定义规则 2. 并行复制设置不当可能导致主从数据不一致
197 0
|
存储 关系型数据库 MySQL
独立表空间&系统表空间总结---innoDB表空间(三十五)
独立表空间&系统表空间总结---innoDB表空间(三十五)