Innodb的; 多个数据目录

mik*_*ers 1 mysql innodb

我需要在不同的分区上存储两个Innodb数据库文件.(raid0上有一个数据库用于速度,另一个数据库用于raid1以获得稳定性)

根据我的阅读,实现这一目标的唯一方法是使用innodb_file_per_table和符号化.ibd和.frm文件,无论它们可能存在于已配置的mysql存储目录(我系统上的/ var/lib/mysql),其中ibdata1文件必须存在(对于表元数据).

这是完成拆分的唯一方法吗?

是否有与myisam的TABLE/INDEX DIRECTORY类似的innodb?

tec*_*ero 6

只是为了更新这篇文章,如果有人遇到这个,InnoDB现在支持自5.6版以来的数据目录.没有符号链接(不推荐),适用于*nix和Windows.

要求:

  1. MySQL 5.6及以上版本
  2. innodb_file_per_table已启用

innodb_file_per_table = 1


场景1(创建新表):

它就像在创建表时指定DATA DIRECTORY选项一样简单.

  1. CREATE TABLE t1 (c1 INT PRIMARY KEY) DATA DIRECTORY = '/alternative/directory';

场景2(将现有表移动到单独的磁盘):

这涉及更多步骤(需要重启MySQL服务器),但仍然非常直接.并且它不要求表在表创建期间指定DATA DIRECTORY选项.

  1. 停止MySQL服务器
  2. 通过简单的文件复制/文件移动将innodb表table_name .ibd文件移动到单独的磁盘/卷
  3. 创建扩展名为.isl 的文本文件,例如table_name .isl
  4. 编辑.isl文件并键入您移动的table_name .ibd文件的新路径. /alternative/directory/table_name.ibd
  5. 确保删除旧路径中的原始.ibd文件
  6. 启动MySQL服务器

现在,对移动表的后续更改将保存到新路径中的.ibd文件中.

有关参考,请参阅MySQL官方文档:http://dev.mysql.com/doc/refman/5.6/en/tablespace-placing.html

  • 场景 1 给我:“数据目录位置必须位于已知目录中。” (2认同)

Mor*_*ker 2

我今天刚刚写了一篇关于此的博客文章: http ://www.mysqlperformanceblog.com/2010/12/25/spreading-ibd-files-across-multiple-disks-the-optimization-that-isnt/

你不想做符号链接的事情 - 并且 InnoDB 不支持数据目录/索引目录。

对于 InnoDB,您实际上需要整个数据系统的稳定性。比方说——

  • 您有关键表 A、B、C。
  • 非关键表是 D、E、F。
  • 如果您将 D、E、F 重新定位到 /mnt/RAID0,并且丢失了该卷,InnoDB 实际上也将不允许您再访问表 A、B、C。
  • 除非它可以访问你的所有数据,否则InnoDB将拒绝启动。

如果您有两种截然不同的数据需求,则需要安装两次 MySQL ;)