Я хотів би знати команду виконувати mysqldump бази даних без запиту пароля.
ПРИЧИНА: Я хотів би запустити роботу з крон, яка щодня щодня займає mysqldump бази даних. Тому я не зможу вставити пароль, коли буде запропоновано.
Як я міг це вирішити?
Я хотів би знати команду виконувати mysqldump бази даних без запиту пароля.
ПРИЧИНА: Я хотів би запустити роботу з крон, яка щодня щодня займає mysqldump бази даних. Тому я не зможу вставити пароль, коли буде запропоновано.
Як я міг це вирішити?
Відповіді:
Оскільки ви використовуєте Ubuntu, все, що вам потрібно зробити, це лише додати файл у домашній каталог, і це вимкне запит пароля mysqldump. Це робиться шляхом створення файлу ~/.my.cnf(дозволів має бути 600).
Додайте це до файлу .my.cnf
[mysqldump]
user=mysqluser
password=secret
Це дозволяє вам підключитися як користувач MySQL, якому потрібен пароль, не вводячи його фактично. Вам навіть не потрібен -p або --password.
Дуже зручно для написання команд mysql та mysqldump.
Етапи досягнення цього можна знайти за цим посиланням .
Крім того, ви можете використовувати таку команду:
mysqldump -u [user name] -p[password] [database name] > [dump file]
але майте на увазі, що вона за своєю суттю небезпечна, оскільки всю команду (включаючи пароль) може переглядати будь-який інший користувач у системі під час роботи дампа за допомогою простої ps axкоманди.
--defaults-file. Як `mysqldump --defaults-file = my_other.cnf --print-defaults`
~/.my.cnf. Дивіться stackoverflow.com/a/14653239/470749 . MySql очікував, що мій буде c:\wamp\bin\mysql\mysql5.5.24\my.cnf. Тому я створив там файл. Перезапуск Mysql не був необхідним; він працював негайно для мого наступного mysqldump.
GRANT LOCK TABLES, SELECT ON *.* TO 'BACKUPUSER'@'%' IDENTIFIED BY 'PASSWORD';
Додавання до відповіді @ 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
Кілька відповідей згадують про введення пароля у файл конфігурації.
Крім того, зі свого сценарію ви можете 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 @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@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 @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
export MYSQL_PWD=...Ніяк НЕ відображається в списку процесів. Навіть ні на частку секунди. Це тому, що exportкоманда є (і повинна бути) вбудованою оболонкою. Таким чином, оболонка не розщеплює / не виконує процес з аргументом команди, якщо ви виконуєте його у своїй оболонці.
Щоб використовувати файл, який знаходиться в будь-якій точці ОС, використовуйте, --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та передати ім'я користувача через скрипт / кліп. Я не впевнений, покращить це безпека чи ні, це було б зовсім іншим питанням.
Для повноти я зазначу, що ви можете зробити наступне, але це надзвичайно небезпечно і ніколи не повинно використовуватися у виробничих умовах:
mysqldump -u [user_name] -p[password] [database] > [desiredoutput].sql
Примітка: між -p та паролем немає місця.
Наприклад -pPassWord, правильно, а -p Passwordневірно.
Так, це дуже просто .... просто в одному магічному командному рядку більше немає
mysqldump --user='myusername' --password='mypassword' -h MyUrlOrIPAddress databasename > myfile.sql
і готово :)
Для мене, використовуючи MariaDB, я повинен був зробити це: додати файл ~/.my.cnfі змінити дозволи, виконавши chmod 600 ~/.my.cnf. Потім додайте свої файли у файл. Чарівний фрагмент, який мені не вистачало, полягав у тому, що пароль повинен знаходитися під клієнтським блоком (ref: docs ), наприклад:
[client]
password = "my_password"
[mysqldump]
user = root
host = localhost
Якщо ви завітаєте сюди шукати, як зробити mysqldump з MariaDB. Помістіть пароль під блоком [client], а потім користувачем під блоком [mysqldump].
[mysqldump]розділ, і він працював без проблем. Ubuntu 18.04 LTS
Ось рішення для 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 встановлена у вашому контейнері.
Сподіваюся, це допоможе тобі, як воно могло допомогти мені!
що про --password = "" працював для мене, працюючи 5.1.51
mysqldump -h localhost -u <user> --password="<password>"
--password=xxxв командному рядку зробить пароль видимим для всіх, хто має можливість читати proc (або робити повний ps) - що досить за замовчуванням.
Безумовно, я вважаю, що було б краще і безпечніше розмістити повний cmd рядок у кореневому кронтабі, з обліковими записами. Принаймні, редагування crontab обмежене (читабельне) для того, хто вже знає пароль .. тому не хвилюйтеся показувати його у простому тексті ...
Якщо вам потрібно більше, ніж простий mysqldump ... просто поставте скрипт bash, який приймає облікові дані як парами і виконує всі зручності всередині ...
Файл bas в простому
#!/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
Ви можете вказати пароль у командному рядку наступним чином:
mysqldump -h <host> -u <user> -p<password> dumpfile
Варіанти для mysqldump - це чутливий регістр!
mysqldump -u root -pmypassword