一、在之前的版本,采用独立表空间(.ibd)存放数据时,是不能更改路径的,比如磁盘满了,恰巧没做LVM卷组,那么通过CREATE TABLE t1(id int primary key)engine=innodb DATA DIRECTORY="/data2/",就把创建t1表的.ibd放到了/data2/目录下。
二、可以在线不停机把.ibd数据拷贝到另一台机器上。
首先,执行FLUSH TABLES t1 FOR EXPORT; t1表加读锁(只能读,不能写,目的是保证数据一致性),然后把数据导出到磁盘上。
其次,到数据目录下,把t1.cfg和t1.ibd拷贝到另一台机器上。拷贝完后,UNLOCK TABLES;
最后,到另一台机器上,创建原表t1表结构,rm -f t1.ibd(再将其数据文件删除),然后执行ALTER TABLE t1 DISCARD TABLESPACE;关闭t1表的数据空间,然后把拷贝过来的t1.cfg和t1.ibd拷贝到该机的数据目录下,然后执行ALTER TABLE t1 IMPORT TABLESPACE;就会进行恢复操作。然后check table t1;没问题的话,select * from t1;你会发现数据恢复了。
三、可以把Undo Log从共享表空间里ibdata1拆分出去,注意,需要在安装mysql时,在my.cnf里指定,否则等创建数据库以后再指定,就会报错。
innodb_undo_directory = /data2/ (指定存放的目录,默认是数据目录)
innodb_undo_logs = 128 (指定回滚段128K)
innodb_undo_tablespaces = 4 (指定有多少个undo log文件)
然后启动mysql,你会发现
undo log创建好后,就不能再次修改,或者增加。