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