Mysqldump, запущенный cron и защита паролем
Я написал script для резервного копирования моих баз данных MySQL, используя:
mysqldump --opt --all-databases -u user -pmypassword > myDump.sql
Cron запускает его каждую ночь и выводит результат на другой сервер.
mypassword
отображается в моем script, каждый может видеть его с соответствующими правами. Мне также рассказывали о проблемах /proc (где можно увидеть запуск cmd).
Документация MySQL говорит:
Задание пароля в командной строке следует считать небезопасным. См. Раздел 7.6 "Сохранение пароля".
Я не нашел этот волшебный раздел 7.6 в любом месте.
Какова хорошая практика борьбы с автоматической безопасностью mysqldump и паролем?
Ответы
Ответ 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