mysql单一数据库重定位

我想知道是否有可能在不同的文件系统位置上运行不同的数据库。

背景:我们是托pipe服务,托pipeMySQL,Web和SMTP到客户,但我们所有的服务(SQL,SMTP,HTTP)位于不同的地方。 我们将分配一个单一的逻辑卷给客户,这将容纳客户的邮件,weppages和(希望)sql数据库。 网页和邮件已经被覆盖了,但是我找不到能够指定数据库位置(mysql存储数据库的目录)的configuration设置。

请让我强调,这里的目标是将不同的数据库迁移到文件系统中的不同位置,而不是将它们从一个地方移到另一个地方。

也请不要用软硬符号链接来回答。 ;)

谢谢

你想将差异数据库的数据文件放在不同的目录下,并将它们加载到一个MySQL实例中,我是否正确地说?

在[mysqld]块下有一个叫做'datadir'的指令,通常用于确定数据库文件的存储位置。

据我所知,MySQL不能有一个实例multilple'datadir'。 你可以有多个使用mysqld_multi的实例,并使用每个实例指向不同的datadir。 但是,由于每个实例都必须使用不同的端口。

在大多数情况下,如果不将一个单独的实例专用于此,您将很难做到这一点。 如果您为其分配一个单独的实例,则可以使用datadir伪指令,该伪指令具有不同的由神性标识的cnf。

我首先想到的是鼓励或坚持客户使用MyISAM。 如果使用MyISAM,则可以将数据库符号链接到新的文件系统。 相反,如果使用InnoDB,则存储机制在不同数据库之间共享,不能在逻辑上分离。 请注意,客户仍然可以创buildInnoDB表,除非通过使用skip-innodb运行MySQL来阻止它。 在共享的环境中,这可能不太现实。 请注意,不同的引擎也有不同的performance。

例如:

  • datadir/usr/local/mysql/data
  • 新的文件系统是/home/user1
  • 数据库是database1

解:

  • symlink /usr/local/mysql/data/database1/home/user1/database1

简单的答案是,你不能做你想要的MySQL。

很长的答案是,托pipe提供商通常在执行Web服务的机器上的本地主机上运行MySQL。 这消除了将mysql数据从一台机器移动到另一台机器的networking带宽。 它不允许没有额外的机器集群。

或者,托pipe服务提供商将拥有一个MySQL服务器池,通常位于使用复制/心跳的主服务器/辅助服务器或使用MySQL群集的主/主/主服务器。 在一个特定的MySQL“簇”被填满后,新的数据库被创build在一个新的簇上。 为了保持一些可用性,客户端在创build数据库的时候会被分配到mysql.domain.com,这样他们就不必记住他们在mysql401.hostname.com上了。 如果你真的想要的话,你也可以运行MySQL4和MySQL5集群。