Как выполнить mysqldump без подсказки пароля?
Я хотел бы знать команду для выполнения mysqldump базы данных без подсказки для пароля.
ПРИЧИНА:
Я хотел бы запустить задание cron, которое каждый раз берет mysqldump базы данных. Поэтому я не буду вставлять пароль при появлении запроса.
Как я могу это решить?
Ответы
Ответ 1
Поскольку вы используете Ubuntu, все, что вам нужно сделать, это просто добавить файл в ваш домашний каталог, и он отключит запрос пароля mysqldump. Это делается путем создания файла ~/.my.cnf
(разрешения должны быть 600).
Добавьте это в файл .my.cnf
[mysqldump]
user=mysqluser
password=secret
Это позволяет вам подключаться как пользователь MySQL, которому требуется пароль без необходимости его ввода. Вам даже не нужно задание -p или - -p.
Очень удобно для написания сценариев команд mysql и mysqldump.
Шаги для достижения этой цели можно найти по этой ссылке.
В качестве альтернативы вы можете использовать следующую команду:
mysqldump -u [user name] -p[password] [database name] > [dump file]
но имейте в виду, что это по своей сути небезопасно, поскольку вся команда (включая пароль) может быть просмотрена любым другим пользователем в системе во время работы дампа с помощью простой команды ps ax
.
Ответ 2
Добавление в ответ @Frankline:
Параметр -p
должен быть исключен из команды, чтобы использовать пароль в файле конфигурации.
Правильно:
mysqldump –u my_username my_db > my_db.sql
Неверно:
mysqldump –u my_username -p my_db > my_db.sql
.my.cnf
может опустить имя пользователя.
[mysqldump]
password=my_password
Если ваш файл .my.cnf
не находится в местоположении по умолчанию и mysqldump
не видит его, укажите его с помощью --defaults-file
.
mysqldump --defaults-file=/path-to-file/.my.cnf –u my_username my_db > my_db.sql
Ответ 3
В нескольких ответах упоминается установка пароля в файле конфигурации.
Кроме того, из вашего скрипта вы можете export MYSQL_PWD=yourverysecretpassword
.
Преимуществом этого метода по сравнению с использованием файла конфигурации является то, что вам не нужен отдельный файл конфигурации для синхронизации с вашим сценарием. У вас есть только сценарий для обслуживания.
В этом методе нет недостатков.
Пароль не виден другим пользователям в системе (он будет виден, если он находится в командной строке). Переменные среды видны только пользователю, выполняющему команду mysql и root.
Пароль также будет виден любому, кто может прочитать сам скрипт, поэтому убедитесь, что сам скрипт защищен. Это ничем не отличается от защиты файла конфигурации. Вы все еще можете получить пароль из отдельного файла, если хотите, чтобы скрипт был общедоступным (например, export MYSQL_PWD=$(cat /root/mysql_password)
). Все еще проще экспортировать переменную, чем создавать файл конфигурации.
НАПРИМЕР,
$ export MYSQL_PWD=$(>&2 read -s -p "Input password (will not echo): "; echo "$REPLY")
$ mysqldump -u root mysql | head
-- MySQL dump 10.13 Distrib 5.6.23, for Linux (x86_64)
--
-- Host: localhost Database: mysql
-- ------------------------------------------------------
-- Server version 5.6.23
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
$ mysqldump -u root mysql | head
-- MySQL dump 10.13 Distrib 5.6.23, for Linux (x86_64)
--
-- Host: localhost Database: mysql
-- ------------------------------------------------------
-- Server version 5.6.23
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
Ответ 4
Чтобы использовать файл, который находится где-нибудь внутри ОС, используйте --defaults-extra-file
например:
mysqldump --defaults-extra-file=/path/.sqlpwd [database] > [desiredoutput].sql
Примечание. .sqlpwd
- это просто пример имени файла. Вы можете использовать все, что пожелаете.
Примечание. MySQL автоматически проверит наличие ~/.my.cnf
которое можно использовать вместо --defaults-extra-file
Если вы используете CRON, как я, попробуйте это!
mysqldump --defaults-extra-file=/path/.sqlpwd [database] > "$(date '+%F').sql"
Требуемое разрешение и рекомендуемая собственность
sudo chmod 600 /path/.sqlpwd && sudo chown $USER:nogroup /path/.sqlpwd
Содержание .sqlpwd
:
[mysqldump]
user=username
password=password
Другие примеры для передачи в .cnf
или .sqlpwd
[mysql]
user=username
password=password
[mysqldiff]
user=username
password=password
[client]
user=username
password=password
Если вы хотите автоматически войти в базу данных, вам понадобится, например, запись [mysql]
.
Теперь вы можете создать псевдоним, который автоматически соединяет вас с БД
alias whateveryouwant="mysql --defaults-extra-file=/path/.sqlpwd [database]"
Вы также можете поместить пароль только внутри .sqlpwd
и передать имя пользователя через скрипт /cli. Я не уверен, улучшит ли это безопасность или нет, это был бы совсем другой вопрос.
Для полноты картины я скажу, что вы можете сделать следующее, но крайне небезопасно и никогда не должно использоваться в производственной среде:
mysqldump -u [user_name] -p[password] [database] > [desiredoutput].sql
Примечание. Между -p и паролем нет пробела.
Например, -pPassWord
правильный, а -p Password
неверный.
Ответ 5
Да, это очень легко... просто в одной магической командной строке больше
mysqldump --user='myusername' --password='mypassword' -h MyUrlOrIPAddress databasename > myfile.sql
и сделано:)
Ответ 6
Для меня, используя MariaDB, мне нужно было сделать следующее: добавить файл ~/.my.cnf
и изменить разрешения, выполнив chmod 600 ~/.my.cnf
. Затем добавьте свои учетные данные в файл. Волшебная часть, которую я пропустил, заключалась в том, что пароль должен находиться под клиентским блоком (ref: docs), вот так:
[client]
password = "my_password"
[mysqldump]
user = root
host = localhost
Если вы пришли сюда в поисках, как сделать mysqldump с MariaDB. Поместите пароль в блок [client], а затем пользователя в блок [mysqldump].
Ответ 7
Вот решение для Docker в сценарии /bin/sh:
docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "[client]" > /root/mysql-credentials.cnf'
docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "user=root" >> /root/mysql-credentials.cnf'
docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "password=$MYSQL_ROOT_PASSWORD" >> /root/mysql-credentials.cnf'
docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec mysqldump --defaults-extra-file=/root/mysql-credentials.cnf --all-databases'
Замените [MYSQL_CONTAINER_NAME]
и убедитесь, что в вашем контейнере установлена переменная среды MYSQL_ROOT_PASSWORD
.
Надеюсь, это поможет вам, как это может помочь мне!
Ответ 8
У меня есть следующее.
/и т.д. /mysqlpwd
[mysql]
user=root
password=password
Со следующим псевдонимом.
alias 'mysql -p'='mysql --defaults-extra-file=/etc/mysqlpwd'
Чтобы сделать восстановление, я просто использую:
mysql -p [database] [file.sql]
Ответ 9
что насчет --password = "" у меня работало на 5.1.51
mysqldump -h localhost -u <user> --password="<password>"
Ответ 10
Определенно, я думаю, было бы лучше и безопаснее разместить полную cmd-строку в корневом crontab с помощью credentails.
По крайней мере, редактирование crontab ограничено (доступно для чтения) тому, кто уже знает пароль.. так что не беспокойтесь, чтобы показать его в виде обычного текста...
Если нужно больше, чем просто mysqldump... просто поместите bash script, который принимает credentails как параметры и выполняет все удобства внутри...
Базовый файл в простой
#!/bin/bash
mysqldump -u$1 -p$2 yourdbname > /your/path/save.sql
В Crontab:
0 0 * * * bash /path/to/above/bash/file.sh root secretpwd 2>&1 /var/log/mycustomMysqlDump.log
Ответ 11
Вы можете указать пароль в командной строке следующим образом:
mysqldump -h <host> -u <user> -p<password> dumpfile
Параметры для mysqldump - это Case Sensitive!