使用下面引用的代码创建同义词。
跨存储引擎(例如:InnoDB、MyISAM 等)执行此操作的最简单方法是对数据库的所有访问使用“同义词”。
这些链接将向您展示完成此操作所需的存储过程。
注意:您应该删除“sys.”来自“create_synonym_db.sql”中的“sys.quote_identifier”(应该只是“quote_identifier”)。
代码:
使用方法:
这将为“CURRENT_DB”创建一个匹配的访问架构,这将允许通过引用“FAKE-DB_NAME”实现所有标准 SQL 功能。
CALL create_synonym_db('CURRENT_DB', 'FAKE_DB_NAME');
删除同义词:
这将删除同义词,但不会删除原始数据库(在 Maria 10.10.0 系列上测试)。
DROP DATABASE FAKE_DB_NAME;
为了满足您的需求,您将让所有应用层与“FAKE_DB_NAME”通信,并且,如果需要进行您正在讨论的维护形式,您将删除当前同义词并将其替换为指向另一个数据库。
因此,一旦为正确的维护帐户(无论您使用何种 MySQL 帐户进行此类维护)加载了这些存储过程,您将执行以下操作:
(1) 创建同义词:
CALL create_synonym_db('NormalDB', 'FAKE_DB_NAME');
(2) 按同义词正常使用数据库:
- “FAKE_DB_NAME”引用数据库的所有 SQL 代码
(3) 使用您选择的任何方法创建临时/备份/替换数据库。
(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”中(从应用程序层)进行维护。