我有一个staging MySQL db,我在其中创建了用于数据加载的中间表。我想使用mysqldump将这个数据库迁移到Prod,但只使用生产中需要的表(以及所有例程、事件和触发器)。
在我将脚本交给平台团队在生产中执行之前,我想在本地测试它,所以我们在同一台服务器上创建了一个单独的模式,并尝试了以下内容:
我们尝试了不带--add-drop database的mysqldump命令,而是使用了--no-create-db,因为我担心在还原过程中,存储过程定义中的"use stage“语句可能会更改数据库并清除我的阶段数据库。结果是表被复制了,但例程没有。
有没有办法在这样做的同时做到这一点:
A.选择表的子集以及所有例程和事件
B.在不同的架构中恢复它们
C.而不会冒着破坏原始模式的风险?
发布于 2021-09-25 08:48:25
使用:
mysqldump -u username -p password --hex-blob -R -e --triggers database_name > database_name.sql您可以根据需要在转储命令中添加或删除选项。
--single-transaction ->选项,如果您不想或不能执行表锁
-d -> -d是--no-data的简称。
-R ->如果您的数据库有存储过程/函数,也可以考虑添加--routines (简称-R
-B ->包含CREATE DATABASE命令。--databases数据库名(缩写:-B数据库名)
-r ->为了避免shell的字符集干扰编码,-r schema.sql比> schema.sql更可取。另外,使用--default- character - set =utf8 (或者其他任何东西)显式指定字符集也是一个好主意。您仍然需要检查转储文件顶部的集合名称。我以前在MySQL字符集编码地狱中被抓到过
--routines ->如果您的数据库有存储过程/函数,也可以考虑添加--routines
如果数据库中具有blob数据类型,则为--hex-blob
https://stackoverflow.com/questions/69324468
复制相似问题