2012-07-03 2 views
1

Я пытаюсь написать скрипт python, с помощью которого можно восстановить нашу базу данных. Мы сохраняем все наши таблицы (индивидуально) в репозитории. Поскольку набрав «source table1.sql, source table2.sql, ..» Будет громоздко, я написал сценарий, чтобы сделать это автоматически.Автоматическое восстановление базы данных из * .sql файлов

Я нашел решение, используя Popen.

process = Popen('mysql %s -u%s -p%s' % (db, "root", ""), stdout=PIPE, stdin=PIPE, shell=True) output = process.communicate('source' + file)[0]

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

Есть ли лучший способ сделать это? Я попытался сделать это, используя пакетный скрипт Windows, но, как вы ожидаете, это намного менее гибко, чем использование python (например,)

+0

-p% s с пустым паролем делает это приглашение .. – Gryphius

+0

Это фик его! Теперь, как я могу голосовать за вас как лучший ответ? – iab

+0

Я добавил его в качестве ответа – Gryphius

ответ

2

Поскольку, очевидно, у вас есть пустой пароль, удалите параметр -p, -p без пароля делает MySQL Prompt

from subprocess import Popen, PIPE 

process = Popen('mysql %s -u%s' % (db, "root"), stdout=PIPE, stdin=PIPE, shell=True) 
output = process.communicate('source' + file)[0] 
-1

Ну, вы можете передать его в командной строке после прочтения это из файла

with open('secret_password.txt', 'r') as f: 
    password = f.read() 
process = Popen('mysql %s -u%s -p%s' % (db, "root", password), stdout=PIPE, stdin=PIPE, 

В противном случае вы можете исследовать pexpect, который позволяет вам взаимодействовать с процессами. Другие альтернативы для чтения из файла конфигурации (например, ConfigParser) или просто сделать его модулем python и импортировать пароль как переменную.

+1

Вам не нужно ничего такого сложного, как парсер или pexpect. Просто скажите клиенту mysql использовать файл конфигурации - он может сделать это сам. – Cylindric

1

Для того, чтобы предотвратить разоблачение пароль кому-либо с разрешения, чтобы увидеть запущенные процессы, то лучше поставить пароль в конфигурационном файле, и называют это из командной строки:

Конфигурационный файл:

[client] 
host=host_name 
user=user_name 
password=your_pass 

Затем из командной строки:

MySQL --defaults-экстра-файл = your_configfilename

+0

Спасибо. Это предложение также было полезно. – iab

Смежные вопросы