搜索完SO后,我找到了以下答案:
我的问题:如果我使用以下SQL命令复制MySQL架构,那么旧架构的哪些部分不会被复制?指标?约束?看法?还有什么吗?
CREATE SCHEMA new_schema DEFAULT CHARACTER SET utf8;
CREATE TABLE new_schema.table1 LIKE old_schema.table1;
CREATE TABLE new_schema.table2 LIKE old_schema.table2;
CREATE TABLE new_schema.table3 LIKE old_schema.table3;
...;
INSERT INTO new_schema.table1 SELECT * FROM old_schema.table1;
INSERT INTO new_schema.table2 SELECT * FROM old_schema.table2;
INSERT INTO new_schema.table3 SELECT * FROM old_schema.table3;
...;
答案 0 :(得分:8)
CREATE TABLE ... LIKE
将处理索引和约束。
运行此命令时应注意SET FOREIGN_KEY_CHECKS=0
,因为如果table1具有table2的外键,则创建table1将失败。同样,以错误的顺序将数据插入表中也会失败。
您的脚本不包括:
这些其他对象没有CREATE... LIKE...
个语句。您必须使用SHOW CREATE...
,然后在新架构的上下文中运行它。请参阅此处的各种SHOW CREATE...
语句:http://dev.mysql.com/doc/refman/5.6/en/show.html
我还提醒您INSERT INTO... SELECT FROM...
的工作方式,但如果表非常大,可以填满您的回滚段。像pt-archiver这样的工具尝试批量复制表,沿主键上升,以避免出现此问题。
答案 1 :(得分:2)
我认为例程不能直接用sql命令复制(据我所知,没有像create procedure myProc like old.myProc
这样的东西)。
我建议您使用mysqldump
,因为它负责复制所有内容,包括数据(如果您不想复制数据,可以使用-d
开关来阻止创建insert
陈述。
如果要创建“模板”(与其他数据库完全相同但没有数据的数据库),可以使用以下命令:
mysqldump [connectionParameters] -d -R -v yourOldDatabase > databaseTemplate.sql
解释了选项:
[connectionParameters]
:主机,用户和密码-d
:不要复制数据-R
:在转储中包含例程-v
:输出mysqldump
正在对控制台执行的操作您可以打开此“light”sql脚本来检查对象的创建方式。
希望这有帮助