我正在使用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
但是,我想知道是否有办法更改您插入的表的名称?例如,我希望将其插入到table_staging
或类似的内容中。这可能,或者我将不得不使用sed
?
答案 0 :(得分:15)
创建mysql
转储文件后,您可以执行以下操作:
sed -i 's/`old-table-name`/`new-table-name`/g' old-table-name.dump
sed
命令将使用mysql转储文件中的新表名搜索并替换旧表名。
答案 1 :(得分:8)
使用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
答案 2 :(得分:1)
我认为在转储数据时不可能,因为可能存在对正在更改的表的FK引用。
如果您希望更改的表没有FK引用,则可以手动编辑生成的转储文件:
CREATE TABLE `old_table_name`
变为
CREATE TABLE `new_table_name`
我的建议是转储数据,将其重新导入新数据库,然后运行更改以重命名表。