且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

mysql5.6表空间管理

更新时间:2022-09-21 18:09:36

一、在之前的版本,采用独立表空间(.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里指定,否则等创建数据库以后再指定,就会报错。


  1. innodb_undo_directory = /data2/ (指定存放的目录,默认是数据目录)

  2. innodb_undo_logs = 128 (指定回滚段128K)

  3. innodb_undo_tablespaces = 4 (指定有多少个undo log文件)

然后启动mysql,你会发现

mysql5.6表空间管理

undo log创建好后,就不能再次修改,或者增加。


















本文转自hcymysql51CTO博客,原文链接:http://blog.51cto.com/hcymysql/973450 ,如需转载请自行联系原作者