Как выполнить 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!