如何别名的MySQL数据库?(How do I alias a database in MySQL?

2019-07-02 08:54发布

我正在寻找一种方式来别名在MySQL数据库中。 原因是为了能够在不停止系统情况下重命名活动,生产数据库。 我想我可以别名数据库的新名称,变更和部署连接到它在我闲暇的代码,并最终删除旧的别名。

如果有更好的方法来做到这一点,请让我知道。

Answer 1:

https://dev.mysql.com/doc/refman/5.7/en/symbolic-links-to-databases.html说

MySQL不支持链接一个目录到多个数据库。

您可以使用符号链接到数据库目录DATADIR外链接到其他位置,例如。

$ cd /var/lib/mysql
$ ln -s /other/dir/mydatabase .

但你不能使用符号链接,使一个数据库目录中的一个“别名”另一个MySQL数据库:

$ cd /var/lib/mysql
$ ln -s `pwd`/mydatabase1 mydatabase2  # WRONG

其原因是InnoDB的保留数据库名和其他元数据自身的数据字典中,存储在表空间文件。 如果你混淆,你不会得到你想要的。

MySQL没有混叠数据库中的任何DDL语法。



Answer 2:

INNODB不会与文件系统的符号链接工作。



Answer 3:

在Unix上,符号链接数据库的办法,首先就是一些磁盘,你有免费的空间,然后创建一个从MySQL数据目录的软链接它创建一个目录。

shell> mkdir /dr1/databases/test
shell> ln -s /dr1/databases/test /path/to/datadir

MySQL不支持链接一个目录到多个数据库。 用一个符号链接替换一个数据库目录的工作,只要你不把数据库之间的符号链接。 假设你有MySQL数据目录下的数据库DB1,然后做一个符号链接DB2指向DB1:

shell> cd /path/to/datadir
shell> ln -s db1 db2

其结果是,或者在任何DB1表tbl_a,也似乎是在DB2表tbl_a。 如果一个客户端更新db1.tbl_a和其他客户端更新db2.tbl_a,问题很可能会发生。

要确定你的数据目录的位置,使用此语句:

SHOW VARIABLES LIKE 'datadir';

来源: http://dev.mysql.com/doc/refman/5.1/en/symbolic-links.html

Ubuntu的/ Debian的例子

警告:不能用工作MyISAM

1)确定你的数据目录的位置:

echo "SHOW VARIABLES LIKE 'datadir';" | mysql -u root -p

2)进入你的数据目录的位置,并停止mysql服务:

sudo su
service mysql stop
cd path/to/datadir

3)创建的软链接:

ln -s current_db db_alias

4)修正permisions:

chown -R mysql:mysql db_alias

5)启动mysql

service mysql start


Answer 4:

使用下面引用创建同义词的代码。

要做到这一点,这将跨存储引擎的工作原理最简单的方法(如:InnoDB的,MyISAM数据等)是使用“同义词”所有对数据库的访问。

这些链接会显示您为了实现这一目标所需要的存储过程。

注意:您应该删除“SYS”。 从“sys.quote_identifier”(应该只是“quote_identifier”)在“create_synonym_db.sql”。

码:

  • https://github.com/mysql/mysql-sys/blob/master/procedures/create_synonym_db.sql
  • https://github.com/mysql/mysql-sys/blob/master/functions/quote_identifier.sql

使用方法:

这将使“CURRENT_DB”这将允许通过引用“假DB_NAME”所有标准SQL的功能匹配的访问模式。

CALL create_synonym_db('CURRENT_DB', 'FAKE_DB_NAME');

要删除的代名词:

这将下降的代名词,但不删除原始数据库(玛丽亚10.10.0系列测试)。

DROP DATABASE FAKE_DB_NAME;

为了实现你的需求,你将有所有应用层与“FAKE_DB_NAME”沟通,并就需要做你讨论维修的形式,你会删除当前的代名词,并用一个指向更换到其他数据库。

因此,一旦加载了正确的保养帐户的存储prodecures(无论MySQL账户使用此类维护),你会做以下几点:

(1)创建同义词:

CALL create_synonym_db('NormalDB', 'FAKE_DB_NAME');

(2)通过使用同义词数据库作为正常:

  • 所有的SQL代码由“FAKE_DB_NAME”指的是数据库

(3)让您的临时/备份/ replacment与您选择什么方法DB。

(4)所有应用层SQL代码切换到Temp DB

DROP DATABASE FAKE_DB_NAME;
CALL create_synonym_db('TempDB', 'FAKE_DB_NAME');

(5)执行已计划在“NormalDB”任何维修

(6)切换所有应用层SQL代码到Temp DB

这两项交易应接近瞬间。

DROP DATABASE FAKE_DB_NAME;
CALL create_synonym_db('NormalDB', 'FAKE_DB_NAME');

这将允许您无缝地在任何数据库交换,而不会对应用程序层更改代码。

重要提示:请记住,当你“切换”到“TempDB的”,向它提出的不会是“NormalDB”你有效地维护了“离线”(从应用层)的任何变化。



文章来源: How do I alias a database in MySQL?