Mysqldump: можете ли вы изменить имя таблицы, в которую вы вставляете?

#mysql

#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
  

Однако мне было интересно, есть ли способ изменить имя таблицы, в которую вы вставляете? Например, я бы хотел, чтобы это было вставлено в table_staging или что-то в этом роде. Возможно ли это, или мне придется просто использовать sed ?

Ответ №1:

После создания mysql файла дампа вы могли бы сделать следующее:

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

sed Команда выполнит поиск и заменит старое имя таблицы новым именем таблицы из файла дампа mysql.

Комментарии:

1. Я использовал это, но я также добавил ` вокруг имени таблицы, чтобы убедиться, что это не данные где-то в таблице. так что тогда это выглядело бы примерно так: sed -i 's/`old-table-name`/`new-table-name`/g' old-table-name.dump

2. Спасибо, это потрясающе

3. Я думаю, что это может быть очень медленно с дампом в 4 ГБ:(

4. Для пользователей Mac Os X эта команда завершится ошибкой при использовании предоставляемого ОС sed ( /usr/bin/sed ). Вы можете brew install gnu-sed использовать gsed , и это будет работать так, как описано.

Ответ №2:

Вы можете изменить имя таблицы на лету при создании дампа с использованием 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
  

Ответ №3:

Я не думаю, что это возможно при сбросе данных, потому что могут быть ссылки FK на таблицу, которую вы изменяете.

Если нет ссылок FK на таблицу, которую вы хотите изменить, то можно просто вручную отредактировать результирующий файл дампа:

 CREATE TABLE `old_table_name`
  

Становится

 CREATE TABLE `new_table_name`
  

Моя рекомендация заключалась бы в сбросе данных, повторном импорте их в вашу новую базу данных, а затем запуске изменений для переименования вашей таблицы.

Комментарии:

1. Вам также необходимо отредактировать INSERT INTO инструкцию.