Mysqldump:您可以更改您所创建的表的名称吗';你要插进去吗?

Mysqldump:您可以更改您所创建的表的名称吗';你要插进去吗?,mysql,Mysql,我正在使用mysqldump将表从一个数据库传输到另一个数据库 mysqldump -h host -u user -p password -e --single-transaction --no-create- info --default-character-set=utf8 --complete-insert --result-file=thisisaresult db table 但是,我想知道是否有办法更改插入的表的名称?例如,我希望将其插入到表\u staging,或者类似的内容中

我正在使用
mysqldump
将表从一个数据库传输到另一个数据库

mysqldump -h host -u user -p password -e --single-transaction --no-create- info --default-character-set=utf8 --complete-insert --result-file=thisisaresult db table

但是,我想知道是否有办法更改插入的表的名称?例如,我希望将其插入到
表\u staging
,或者类似的内容中。这是可能的,还是我必须只使用
sed

我认为在转储数据时是不可能的,因为可能存在对正在更改的表的FK引用

如果没有对要更改的表的FK引用,则可以手动编辑生成的转储文件:

CREATE TABLE `old_table_name`
变成

CREATE TABLE `new_table_name`

我的建议是转储数据,将其重新导入新数据库,然后运行alters重命名表。

创建
mysql
转储文件后,可以执行以下操作:

sed -i 's/`old-table-name`/`new-table-name`/g' old-table-name.dump

sed
命令将从mysql转储文件中搜索旧表名并将其替换为新表名。

使用Unix sed创建转储时,可以动态更改表名

# create dump of mytable, renaming it to mytable_new

$ mysqldump -umyuser -pmypass -hmyhost mydb mytable |\
  sed -e 's/`mytable`/`mytable_new`/'| gzip -c > mydb_mytable_new.dump.gz


# restoring in another database:

$ gunzip -c mydb_mytable_new.dump.gz | mysql -umyuser2 -pmypass2 -hmyhost2 mydb2

我使用了这个,但我还在表名周围添加了`以确保它不是表中某个位置的数据。所以它看起来是这样的:
sed-i's/`old table name`/`new table name`/g'old table name.dump
谢谢,这太棒了。我认为如果转储4GB,速度可能会非常慢:(对于Mac Os X用户,在使用操作系统提供的sed(
/usr/bin/sed
)。您可以
brew安装gnu sed
并使用
gsed
,但它将按说明工作。