天天看点

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

在服务器资源有限,单表数据不是特别多的情况下, 独立表空间明显比共享方式效率更高 . 但是mysql 默认是共享表空间

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

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

mysql> show variables like '%per_table%';  

+-----------------------+-------+  

| variable_name         | value |  

| innodb_file_per_table | off   |  

1 row in set (0.00 sec)  

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

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

[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

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

/etc/init.d/mysqld stop    

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

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

innodb-file-per-table=1    

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

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

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

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

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: 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

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

/etc/init.d/mysqld start   

 7,导入数据库

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

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

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

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

//进入到mysql后的查寻  

| innodb_file_per_table | on   |  

//查看数据库目录下的文件  

[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的文件,根共享表空间是不一样的。到这儿就完全配置好了。