Импорт нескольких файлов дампа .sql в базу данных mysql из оболочки - PullRequest
39 голосов
/ 17 января 2011

У меня есть каталог с кучей .sql файлов, которые дампы mysql каждой базы данных на моем сервере.

например,

database1-2011-01-15.sql
database2-2011-01-15.sql
...

На самом деле их довольно много.

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

Я работаю на Linux-машине Debian.

Я думаю, что есть какой-то способ передать результаты ls в какую-то команду поиска или что-то в этом роде.

любая помощь и образование очень ценятся.

РЕДАКТИРОВАТЬ

Поэтому в конечном итоге я хочу автоматически импортировать один файл за раз в базу данных.

Например, если бы я делал это вручную на одном, это было бы:

mysql -u root -ppassword < database1-2011-01-15.sql

Ответы [ 5 ]

75 голосов
/ 17 января 2011

cat *.sql | mysql? Они вам нужны в каком-то конкретном порядке?

Если у вас слишком много, чтобы справиться с этим, попробуйте что-то вроде:

find . -name '*.sql' | awk '{ print "source",$0 }' | mysql --batch

Это также позволяет обойти некоторые проблемы с передачей скриптового ввода по конвейеру, хотя у вас не должно возникнуть проблем с конвейерной обработкой в ​​Linux. Хорошая особенность этого подхода заключается в том, что утилита mysql читает каждый файл, а не читает его из stdin.

17 голосов
/ 18 сентября 2012

Однострочник для чтения во всех .sql файлах и их импорта:

for SQL in *.sql; do DB=${SQL/\.sql/}; echo importing $DB; mysql $DB < $SQL; done

Единственная хитрость - замена подстроки bash для удаления .sql для получения имени базы данных.

7 голосов
/ 23 августа 2013

На http://kedar.nitty -witty.com / blog / mydumpsplitter-extract-tables-from-mysql-dump-shell-script есть превосходный маленький скрипт, который займет огромный mysqldump файл и разделить его на один файл для каждой таблицы.Затем вы можете запустить этот очень простой сценарий для загрузки базы данных из этих файлов:

for i in *.sql
do
  echo "file=$i"
  mysql -u admin_privileged_user --password=whatever your_database_here < $i
done

mydumpsplitter даже работает с файлами .gz, но это намного, намного медленнее, чем сначала gunzipping, а затем запускает его на несжатомфайл.

Я говорю огромный , но я думаю, что все относительно.Мне потребовалось около 6-8 минут, чтобы разделить файл дампа на 200 МБ на 2000 таблиц.

3 голосов
/ 01 июня 2013

Некоторое время назад я создал скрипт для именно этого, который я назвал (совершенно не творчески) "myload". Он загружает файлы SQL в MySQL.

Вот это на GitHub

Это просто и понятно; позволяет указывать параметры подключения mysql и распаковывает gzip-файлы sql на лету. Предполагается, что у вас есть файл для каждой базы данных, а основой имени файла является нужное имя базы данных.

Итак:

myload foo.sql bar.sql.gz

Создает (если не существует) базы данных с именами "foo" и "bar" и импортирует файл sql в каждую.

Для другой стороны процесса я написал этот скрипт (mydumpall) , который создает соответствующие файлы sql (или sql.gz) для каждой базы данных (или некоторое подмножество, указанное либо по имени, либо по регулярному выражению) .

3 голосов
/ 17 января 2011

Я не помню синтаксис mysqldump, но это будет что-то вроде этого

 find . -name '*.sql'|xargs mysql ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...