Импорт нескольких файлов .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
Ответы
Ответ 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 ...