Дамп MySQL за запитом


220

Чи можна це зробити mysqldumpодинаком SQL query?

Я маю на увазі скинути всю базу даних, як phpmyadminце робиться, коли ви експортуєтеSQL

Відповіді:


285

не mysqldump, але mysql cli ...

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

ви можете перенаправити його у файл, якщо хочете:

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

Оновлення: Оригінальна публікація запитала, чи може він скидати з бази даних запит. Що він запитував і що він мав на увазі, було різним. Він дуже хотів просто mysqldзавантажити всі таблиці.

mysqldump --tables myTable --where="id < 1000"

22
як відновити цей викинутий файл txt?
Vivek S

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 --field-terminated-by = '\ t'. Дивіться: stackoverflow.com/a/17071108/1676044
Кевін Бордерс

259

Це має спрацювати

mysqldump --databases X --tables Y --where="1 limit 1000000"

4
Кращим прикладом може бути щось, що насправді виглядає як пункт де, наприклад --where = "myColumn <1000" - перший мільйон рядків кожної таблиці здається дивним запитом;)
ijw

@ijw Якщо ви хочете зробити, це легко створити резервну копію таблиці, вам, ймовірно, не знадобиться пункт де інше, ніж обмеження.
Томас Ейл

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. Отже, якщо ви запитуєте з віддаленої консолі, цей спосіб не вдається. Якщо є спосіб зробити це і з віддаленої консолі, будь ласка, повідомте мене про це.
ночі

2
куди це зберегти файл?
Techlord

1
@dknight Я припускаю, що ви маєте на увазі віддалену консоль через термінальну консоль, і в цьому випадку ви можете отримати викинутий файл через scpпісля припинення з'єднання. ось приклад. scp user@remote-server.com:/tmp/querydump.csv ~/local.csv
Лука

Здається, це небезпечно: # 1290 - Сервер MySQL працює з опцією --secure-file-priv, тому він не може виконати це твердження
mikep

64

Вивантажте таблицю, використовуючи запит де:

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

Вивантажте всю таблицю:

mysqldump mydatabase mytable > data.sql

Примітки:

  • Замініть mydatabase, mytableі де оператор на бажані значення.
  • За замовчуванням mysqldumpбуде включати DROP TABLEі CREATE TABLEзаяви у свій висновок. Тому, якщо ви хочете не видаляти всі дані з вашої таблиці під час відновлення із збереженого файлу даних, переконайтеся, що ви використовуєте цю --no-create-infoопцію.
  • Можливо, вам потрібно буде додати відповідні -h, -uта -pпараметри до наведених вище прикладів команд, щоб вказати бажаний хост бази даних, користувача та пароль відповідно.

38

Ви можете використовувати де-небудь варіант на 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, якщо припустити, що таблиця, з якої ви експортуєте, містить стовпчик ідентифікатора, що автоматично збільшується.

Вам потрібно буде змінити значення користувача, localhost, бази даних та таблиці. Ви можете за бажанням змінити стовпчик id та імпортувати ім'я файлу.


5

MySQL Workbench також має цю функцію акуратно в графічному інтерфейсі. Просто запустіть запит, натисніть значок збереження поруч із Експорт / імпорт:

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

Потім виберіть у списку "SQL INSERT заяви (* .sql)".

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

Введіть ім’я, натисніть кнопку «Зберегти», підтвердьте ім’я таблиці, і ви отримаєте свій дамп-файл.


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

-1

mysql Експорт командного рядка результатів запиту:

mysql -h120.26.133.63 -umiyadb -proot123 miya -e "select * from user where id=1" > mydumpfile.txt

він працює для мене в ubuntu, команда: mysql -h localhost -u root -p dbname -e "select * з користувачів, де id = 1; select * з персоналу, де id = 1" --xml> / var / www / html / project / backups / db.xml
Рамеш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.