MySQL дамп по запросу

220

Можно ли сделать это mysqldumpпо одиночке SQL query?

Я имею в виду сбросить всю базу данных, как это phpmyadminделает, когда вы делаете экспорт вSQL

Якуб Арнольд
источник

Ответы:

285

не mysqldump, но mysql кли ...

mysql -e "select * from myTable" -u myuser -pxxxxxxxxx mydatabase

Вы можете перенаправить его в файл, если хотите:

mysql -e "select * from myTable" -u myuser -pxxxxxxxx mydatabase > mydumpfile.txt

Обновление: Оригинальный пост спросил, может ли он вывести из базы данных по запросу. То, что он спросил и что он имел в виду, было другим. Он действительно хотел просто mysqldump все таблицы.

mysqldump --tables myTable --where="id < 1000"
Zak
источник
22
Как восстановить этот дамп файл TXT?
Вивек С
3
для тех, кто пробует подход mysql -e. Мне пришлось немного настроить скрипт, чтобы он работал на меня. Этот требует ввода пароля SQL при запуске. mysql -e "select * from table WHERE query = 'asdasd'" -u root -p --database = DBNAME> text.txt
RichardW11
13
Вы можете просто создать новую таблицу для запроса (CREATE TABLE SELECT), а затем сбросить эту таблицу с помощью mysqldump. Таким образом, вы можете легко восстановить его позже.
Quano
1
для тех, кто хочет использовать mysqldump и восстановить файл, посмотрите здесь: stackoverflow.com/a/2431936/411786
Syco
2
Чтобы импортировать данные, которые экспортируются с помощью mysql -e с опцией -B для вывода с разделителями табуляции, выполните mysqlimport --ignore-lines = 1 --fields-terminated-by = '\ t'. См .: stackoverflow.com/a/17071108/1676044
Кевин Бордерс
259

Это должно работать

mysqldump --databases X --tables Y --where="1 limit 1000000"
Томас Але
источник
4
Лучшим примером может быть что-то, что на самом деле выглядит как предложение where, например --where = "myColumn <1000" - первый миллион строк каждой таблицы кажется странной вещью для запроса;)
ijw
@ijw. Если вы хотите сделать резервную копию таблицы, которую можно легко переустановить, вам, вероятно, не понадобится выражение where для чего-то еще, кроме ограничений.
Томас Але
3
@Sagotharan: Ну, это не вопрос. Наверное, поэтому.
Гонки легкости на орбите
80
!!ПРЕДУПРЕЖДЕНИЕ!! mysqldump добавляет команду «DROP TABLE» вверху экспортируемого файла. Это означает, что если вы выполните частичный экспорт, а затем импортируете его, вы потеряете все остальное. Ну, я сделал.
Тамлин
35
Да, чтобы не удалять все данные в вашей таблице при восстановлении из сохраненного файла данных, обязательно добавьте эту --no-create-infoопцию. Смотрите мой ответ для примера.
Гари
71

Вы можете вывести запрос как csv следующим образом:

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
парень
источник
8
Что делать, если я хочу сбросить несколько таблиц.
SIFE
11
Это создает файл на компьютере, на котором работает база данных MySQL. Таким образом, если вы запрашиваете с удаленной консоли, этот метод не работает. Если есть способ сделать это и с удаленной консоли, пожалуйста, дайте мне знать об этом.
dknight
2
где это сохранить файл?
Techlord
1
@dknight Я предполагаю, что вы имеете в виду удаленную консоль через терминальную консоль, и в этом случае вы можете получить дамп-файл через scpпосле завершения соединения. вот пример. scp user@remote-server.com:/tmp/querydump.csv ~/local.csv
Люк
Кажется, это небезопасно: # 1290 - Сервер MySQL работает с опцией --secure-file-priv, поэтому он не может выполнить этот оператор
mikep
64

Создайте таблицу с помощью запроса where:

mysqldump mydatabase mytable --where="mycolumn = myvalue" --no-create-info > data.sql

Дамп всей таблицы:

mysqldump mydatabase mytable > data.sql

Ноты:

  • Замените mydatabase, mytableи оператор where на нужные значения.
  • По умолчанию mysqldumpбудут включены DROP TABLEи CREATE TABLEоператоры в свой вывод. Поэтому, если вы не хотите удалять все данные в своей таблице при восстановлении из сохраненного файла данных, обязательно используйте эту --no-create-infoопцию.
  • Вам может понадобиться добавить соответствующую -h, -uи -pопцию к примеру командам выше, для того , чтобы указать нужный хост базы данных, пользователь и пароль, соответственно.
Gary
источник
38

Вы можете использовать опцию --where в mysqldump, чтобы получить ожидаемый вывод:

mysqldump -u root -p test t1 --where="1=1 limit 100" > arquivo.sql

Максимум 100 строк из test.t1 будут выгружены из таблицы базы данных.

Ура, ВБ

Вагнер Бьянки
источник
6

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

mysqldump -u user -p -h localhost --where "1=1 ORDER BY id DESC LIMIT 100" database table > export_file.sql

Вышеприведенное сохранит последние 100 записей в export_file.sql, при условии, что таблица, из которой вы экспортируете, имеет столбец идентификатора с автоинкрементом.

Вам нужно будет изменить значения user, localhost, database и table. При желании вы можете изменить столбец id и имя файла экспорта.

aullah
источник
5

MySQL Workbench также имеет эту функцию аккуратно в графическом интерфейсе. Просто запустите запрос, щелкните значок сохранения рядом с Экспорт / Импорт:

введите описание изображения здесь

Затем выберите «операторы SQL INSERT (* .sql)» в списке.

введите описание изображения здесь

Введите имя, нажмите «Сохранить», подтвердите имя таблицы, и вы получите файл дампа.

MPelletier
источник
3

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

mysqldump -uuser -ppassword main_dbo trHourly --where="MeterID =5406 AND TIMESTAMP<'2014-10-13 05:00:00'" --no-create-info --skip-extended-insert | grep  '^INSERT' > 5406.sql
zzapper
источник
-1

mysql Экспорт командной строки результатов запроса:

mysql -h120.26.133.63 -umiyadb -proot123 miya -e "select * from user where id=1" > mydumpfile.txt
lanni654321
источник
это работает для меня в Ubuntu, команда: mysql -h localhost -u root -p dbname -e "выбрать * из пользователей, где id = 1; выбрать * из сотрудников, где id = 1" --xml> / var / www / html / project / backups / db.xml
Рамеш