新加表空间的配置文件主要是这个参数:
innodb_data_file_path = ibdata1:370M;ibdata2:50M;ibdata3:50M;ibdata4:500M;ibdata5:500M:autoextend
有几种情况
1 在线上环境时,我的表空间之前没有计划,在使用一段时间后,想新增,这时要先得到此时ibdata1的大小,我的方法是 在配置中随便配个大小,如371M, 这时启动mysql ,会报错起不来,查看错误日志,里面会有pages的大小,通过这个pages的大小计算此时的ibdata1大小
ibdata = pages * page_size/1024
page_size=16k(mysql默认的,可以再编译时更改,下一步将测试这个值对性能的影响)
(正常的得到表空间大小的方法没找到;使用du -h 的值偏大,减1,2M,可以试一下)
2 在使用mysql之前计划好表空间的使用方式和大小,如
innodb_data_file_path = ibdata1:10G;ibdata2:10G;ibdata3:10G;ibdata4:10G;ibdata5:10G:autoextend
这种方式比较理想
表空间的使用
如果采用第2中方式建立表空间的话,在启动初始化后,会建立这5个表空间,只是先把磁盘空间占上而已,如果使用的话,还是按顺序使用的,第一个满了用第二个。
不足:
表空间顾名思义就是存储表数据的空间,而 MySQL 的管理方式则是:按顺序使用,第一个满了用第二个。这在很大方面上限制了灵活性,例如我们希望将某些大表、不经常存取的单独放在某个表空间中,就不被允许。而这在其他商业数据库上都是很基本的功能。
我们只能寄希望于 MySQL 的以后能为我们带来这样的功能。
没有啥不足的,是你不知道而已innodb_file_per_table 请打开这个参数http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#multiple-tablespaces
你可以存储每个InnoDB表和它的索引在它自己的文件在中,这个特征被称为“多表空间” ,因为实际上每个表有它自己的表空间。
对那些想把特定表格移到分离物理磁盘的用户,或者那些希望快速恢复单个表的备份而无须打断其余InnoDB表的使用的用户,使用多表空间会是有益的。
你可以往my.cnf的[mysqld]节添加下面行来允许多表空间:
[mysqld]innodb_file_per_table
重启服务器之后,InnoDB存储每个新创建的表到表格所属于的数据库目录下它自己的文件tbl_name.ibd里。这类似于MyISAM存储引擎所做的,但MyISAM 把表分成数据文件tbl_name.MYD和索引文件tbl_name.MYI。对于InnoDB,数据和所以被一起存到.ibd文件。tbl_name.frm文件照旧依然被创建。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26690043/viewspace-719510/ ,如需转载,请注明出处,否则将追究法律责任。