我需要在不同的分区上存储两个Innodb数据库文件。 (关于raid0的一个数据库用于速度,另一个用于raid1以获得稳定性)
从我读过的内容来看,实现这一目标的唯一方法是使用innodb_file_per_table
和符号链接.ibd和.frm文件,无论它们可能存在于已配置的mysql存储目录中(/ var / lib) / myql在我的系统上),ibdata1文件必须存在(用于表元数据)。
这是完成拆分的唯一方法吗?
myisam的TABLE / INDEX DIRECTORY有没有innodb模拟?
答案 0 :(得分:5)
只是为了更新这篇文章,如果有人遇到这个,InnoDB现在支持自5.6版以来的数据目录。没有符号链接(不推荐),适用于* nix和Windows。
<强>要求:强>
innodb_file_per_table = 1
场景1(创建新表):
就像创建表格时指定DATA DIRECTORY选项一样简单。
CREATE TABLE t1 (c1 INT PRIMARY KEY) DATA DIRECTORY = '/alternative/directory';
场景2(将现有表格移至单独的磁盘):
这涉及更多步骤(需要重启MySQL服务器),但仍然非常简单。并且它不要求表在表创建期间指定DATA DIRECTORY选项。
/alternative/directory/table_name.ibd
现在对移动表的后续更改将保存到新路径中的.ibd文件中。
供参考,请参阅MySQL官方文档:http://dev.mysql.com/doc/refman/5.6/en/tablespace-placing.html
答案 1 :(得分:3)
我今天刚刚写了一篇博文: http://www.mysqlperformanceblog.com/2010/12/25/spreading-ibd-files-across-multiple-disks-the-optimization-that-isnt/
你不想做符号链接的事情 - 而且InnoDB不支持DATA DIRECTORY / INDEX DIRECTORY。
您实际上需要InnoDB的数据系统稳定性。让我们说 -
如果您有两个非常不同的数据要求,则需要安装两个MySQL;)
答案 2 :(得分:0)
场景2移动1表到新数据目录
平台 - Windows Server,MySQL 5.6
数据库 - 测试
表 - 员工
源数据目录 - D:\ Program Files \ MySQL \ MySQL Server 5.6 \ data \ test \
目标数据目录-E:\ data \ New_data \ test \
STEPS
确保全局变量innodb_file_per_table = 1
停止MySQL服务器
将innodb文件employee.ibd文件移动到单独的磁盘/文件夹,通过简单文件移动到E:\ data \ New_data \ test \
注意 - 将employee.frm保留在原始数据目录D:\ Program Files \ MySQL \ MySQL Server 5.6 \ data \ test \
中 源数据目录中的- D:\ Program Files \ MySQL \ MySQL Server 5.6 \ data \ test \ - 创建扩展名为.isl的文本文件,例如: employee.isl 编辑.isl文件并键入您移动的employee.ibd文件的新路径。
在文件-D:\ Program Files \ MySQL \ MySQL Server 5.6 \ data \ test \ employee.isl中 E:\数据\ NEW_DATA \测试\ employee.ibd
授予文件夹E:\ data
的写入权限启动MySQL服务器
使用测试;
从员工
中选择*