Подтвердить что ты не робот

Импорт нескольких файлов .sql dump в базу данных mysql из оболочки

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

например.

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

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

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

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

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

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

ИЗМЕНИТЬ

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

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

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

Ответ 1

cat *.sql | mysql? Нужны ли они вам в любом конкретном порядке?

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Здесь он находится на GitHub

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

Итак:

myload foo.sql bar.sql.gz

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

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

Ответ 5

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

 find . -name '*.sql'|xargs mysql ...