我想知道是否可以在不同的文件系统位置操作不同的数据库。
背景:我们是一个托管服务,它为客户托管 mysql、web 和 smtp,但我们所有的服务(sql、smtp、http)都位于不同的位置。我们将为客户分配一个逻辑卷,它将容纳客户的邮件、网页和(希望如此)sql 数据库。已经涵盖了网页和邮件,但是我找不到可以让我指定数据库位置(mysql 存储数据库的目录)的配置设置。
让我强调一下,这里的目标是将不同的数据库重新定位到文件系统中的不同位置,而不是将它们从一个地方移动到另一个(单个)地方。
也请不要用软和硬符号链接来回答。;)
谢谢
您想将不同数据库的数据文件放在不同的目录下并将它们一起加载到一个 MySQL 实例中,我这样说对吗?
[mysqld] 块下有一个名为“datadir”的指令,通常用于确定数据库文件的存储位置。
据我所知,mysql 不能为一个实例拥有多个“datadir”。您可以使用mysqld_multi拥有多个实例,并使用每个实例指向不同的数据目录。但是,当然,您必须为每个实例使用不同的端口。
在大多数情况下,如果没有专门的实例,您将很难做到这一点。如果您将一个单独的实例专用于它,则可以将该
datadir
指令与神性标识的不同 cnf 一起使用。我的第一个想法是鼓励或坚持客户使用 MyISAM。如果使用 MyISAM,您可以将数据库符号链接到新文件系统。相比之下,如果使用InnoDB,存储机制在不同的数据库之间是共享的,不能在逻辑上分开。请注意,客户仍然可以创建 InnoDB 表,除非您通过运行 MySQL 来阻止它
skip-innodb
。在共享环境中,这可能不现实。请注意,不同的引擎也有不同的性能。例如:
datadir
是/usr/local/mysql/data
/home/user1
database1
解决方案:
/usr/local/mysql/data/database1
到/home/user1/database1
简短的回答是,你不能用 MySQL 做你想做的事。
很长的答案是,通常,托管服务提供商要么在提供 Web 服务的机器上的 localhost 上运行 MySQL。这消除了将 mysql 数据从一台机器移动到另一台机器的网络带宽。它不允许在没有额外机器的情况下进行集群。
或者,托管服务提供商将拥有一个 MySQL 服务器池,通常在使用复制/心跳的主/辅助服务器中,或者使用 MySQL 集群的主服务器/主服务器/主服务器。在一个特定的 MySQL“集群”被填满后,新的数据库就会在一个新的集群上创建。为了保持某种可用性,客户端在创建数据库时被分配 mysql.domain.com,这样他们就不必记住他们在 mysql401.hostname.com 上。如果你真的想的话,这允许你也运行 MySQL4 和 MySQL5 集群。