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

Mysqldump, запущенный cron и защита паролем

Я написал script для резервного копирования моих баз данных MySQL, используя:

mysqldump --opt --all-databases -u user -pmypassword > myDump.sql

Cron запускает его каждую ночь и выводит результат на другой сервер. mypassword отображается в моем script, каждый может видеть его с соответствующими правами. Мне также рассказывали о проблемах /proc (где можно увидеть запуск cmd).

Документация MySQL говорит:

Задание пароля в командной строке следует считать небезопасным. См. Раздел 7.6 "Сохранение пароля".

Я не нашел этот волшебный раздел 7.6 в любом месте.

Какова хорошая практика борьбы с автоматической безопасностью mysqldump и паролем?

4b9b3361

Ответ 1

Указание документов MySQL (http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html):

Сохраните свой пароль в файле параметров. Например, в Unix вы можете указать свой пароль в разделе [client] файла .my.cnf в вашем домашнем каталоге:

[client]
password=your_pass

Чтобы сохранить пароль в безопасности, файл не должен быть доступен никому, кроме вас. Для этого установите режим доступа к файлу до 400 или 600. Например:

shell> chmod 600 .my.cnf

Чтобы указать из командной строки конкретный файл параметров, содержащий пароль, используйте параметр --defaults-file=file_name, где file_name - полное имя пути к файлу.

Ответ 2

чтобы добавить к Sahil ответ выше, используйте -defaults-extra-file

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

тогда как --defaults файл считывается вместо файла my.cnf по умолчанию.

Ответ 3

Зайдите "Сохранять пароли" для получения хорошего ответа. Вы можете сохранить свой пароль в файле my.cnf, изменяя разрешения для этого файла, чтобы защитить пароль.

Вы также можете проверить последний комментарий на этой странице:

MYSQL_PWD = "tinkerbell" mysqldump -ubackup -all-databases > dump.sql

Ответ 4

Все ответы здесь в деталях, поэтому вы можете использовать полную команду, которая будет выполнять требуемые и должна использоваться, если база данных имеет большой размер, --single-transaction и --lock-tables здесь очень важны.

mysqldump --defaults-extra-file=/home/dangi/.my.cnf -u root --single-transaction --quick --lock-tables=false --all-databases (or) DATABASE | gzip > OUTPUT.gz;

Примечание. Ответ добавляется в ответ Авибодхи и сахиля, они уже сделали это. Я просто помещаю свой ответ в единый код с помощью important measure should be taken at time of backing up live database

Ответ 5

Следующий метод работает для меня на компьютере под управлением Windows, если у вас есть две версии MySQL, и вы не знаете, какой my.ini используется при запуске mysqldump, это также поможет:

1, C:\ProgramData\MySQL\MySQL Server 5.6\my.ini, fine [client], замените его на

[client]
user=my_user
password=my_password

2, используйте следующую команду:

C:\Program Files\MySQL Server 5.6\bin > mysqldump --default-extra-file = "C:\ProgramData\MySQL\MySQL Server 5.6\my.ini" -u my_user db_to_export > db_to_export.sql

Ответ 6

Принятый ответ хранит пароль в текстовом файле, который может быть прочитан любым административным (корневым) доступом. Если ваша база данных находится в среде совместного размещения, это нежелательно.

Лучшим вариантом было бы использовать mysql_config_editor для создания зашифрованного пути входа с именем mysqldump. Согласно документации MySQL:

mysql_config_editor шифрует файл .mylogin.cnf, поэтому его нельзя считать чистым, а его содержимое при расшифровке клиентскими программами используется только в памяти. Таким образом, пароли могут быть сохранены в файле в формате non-cleartext и использоваться позже, без необходимости просмотра в командной строке или в переменной среды.

Следующая команда создаст ваш путь к mysqldump:

mysql_config_editor --login-path=mysqldump --host=your_hostname --user=your_username --password

Вам будет предложено ввести ваш пароль, и созданный вами логин будет сохранен в зашифрованном виде. mysqldump будет автоматически использовать этот путь для входа в систему, когда вы его вызываете в будущем, если вы не укажете другой путь входа с параметром командной строки --login-path.

Вот как вы могли бы вызывать mysqldump после создания зашифрованного пути входа:

mysqldump database_name > output_file