关于 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_file_per_table的话, 那些Innodb存储类型的表的数据都放在这个共享表空间中,而系统变量innodb_file_per_table=1的话,那么InnoDB存储引擎类型的表就会产生一个独立表空间...
对于innodb的数据结构,首先要解决两个概念性的问题: 共享表空间以及独占表空间。什么是共享表空间和独占表空间共享表空间以及独占表空间都是针对数据的存储方式而言的。共享表空间: 某一个数据库的所有的表数据,...
1、InnoDB可以选择使用共享表空间或者是独立表空间方式,建议使用独立表空间,便于管理、维护。启用 innodb_file_per_table 选项,5.5以后可以在线动态修改生效,并且执行 ALTER TABLE xx ENGINE = InnoDB 将现有表...
1、InnoDB可以选择使用共享表空间或者是独立表空间方式,建议使用独立表空间,便于管理、维护。启用 innodb_file_per_table 选项,5.5以后可以在线动态修改生效,并且执行 ALTER TABLE xx ENGINE = InnoDB 将现有表...
myisam 存储数据有三个文件.MYD,.MYI ,.FRM 数据文件和索引文件分开存储innodb存储数据有.FRM存放表定义,.ibd(独享表空间),.ibdata(共享表空间).innodb存储数据分独立表空间和共享表空间(具体使用哪个由innodb_...
用文件恢复工具通常无法恢复出表文件,或者恢复出的表文件内容为乱码,mysql无法正常识别加载,这时需要用mysql碎片扫描工具扫描残存的表数据,可搜索mysql5/8版本InnoDB表碎片,包括独立表空间和共享表空间,上千...
8.什么是独立表空间和共享表空间?它们的区别是什么? 9.清空表的所有数据性能最好的语句是? 10.唯一索引和普通索引哪个性能更好? 11.left join 和 right join 的区别是什么? 12.什么是最左匹配原则?它的生效...
# InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间 # 独立表空间优点: # 1.每个表都有自已独立的表空间。 # 2.每个表的数据和索引都会存在自已的表空间中。 # 3.可以实现单表在不同的数据库中...
1.3.1 支持动态更改独立表空间 39 1.3.2 支持动态更改innodb锁超时时间 40 1.4 innodb新参数汇总 40 1.5 同步复制新参数汇总 48 1.6 sql语句写法的改变 53 1.6.1 delete表连接语法改变 53 1.6.2 mysql5.5存储...