Вопрос: Подключитесь к командной строке MySQL без командной строки root


Я создаю сценарий Bash для некоторых задач. Одной из этих задач является создание базы данных MySQL из одного сценария bash. Сейчас я создаю два vars: один для имени пользователя магазина, а другой для пароля хранилища. Это важная часть моего скрипта:

MYSQL_USER=root
MYSQL_PASS=mypass_goes_here

touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql
mysql --user=$MYSQL_USER --password="$MYSQL_PASS" < /tmp/script.sql
rm -rf /tmp/script.sql

Но всегда получайте сообщение о том, что доступ запрещен для пользователя root без NO PASSWORD, что я делаю неправильно? Мне нужно сделать то же самое для PostgreSQL.


10
2018-06-15 19:42


Источник


Сделайте некоторые отладки (-: Try echo "$MYSQL_PASS" прежде чем передать его на mysql линия. У него есть правильный пароль? - KM.
Можете ли вы войти в систему, как обычно, без сценария? - qweet
-час пропал, отсутствует. Также не рекомендуется вводить пароли в командной строке, так как они будут видны для всех, кто звонит ps wwaux, - Nils


Ответы:


Как для MySQL, так и для PostgreSQL вы можете указать своего пользователя и пароль в локальном файле конфигурации. .my.cnf для MySQL и .pgpass для PostgreSQL. Эти файлы должны находиться в вашем домашнем каталоге (т. Е. ~ / .My.cnf).

.my.cnf:

[mysql]
user=user
password=password

.pgpass:

host:port:database:user:password

Здесь вы можете иметь подстановочный знак, заменяя любое поле для *******.

PS: НЕ ПОДНИМАЙТЕ ПАРОЛЬ НА КОМАНДНОЙ ЛИНИИ! Это может быть прекрасно видно п.с. если ваша система не настроена так, чтобы не показывать процессы, принадлежащие другим пользователям.

@thinice: Если вы хотите создать действительно защищенные файлы, вы должны:

umask 077
touch .my.new.config
umask 022 # or whatever was your default

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

PostgreSQL откажется использовать файл с разрешениями выше 0600 в любом случае.


21
2018-06-15 20:08



Для mysql клиента mysql вы можете указать определенный файл конфигурации с помощью --defaults-extra-file=filename, Это может быть полезно, если вы хотите разместить его где-то нестандартным или просто создать временный файл. Подозреваю, что это аналогичный вариант с PostgreSQL, но я не знаком с этим. - Zoredache
И за любовь к счастливым галмовым шортам chmod, что файл 0600 - thinice
@kworr Я попробую, но моя MySQL не начнет изменять эти параметры на /etc/my.cnf :( не знаю причину. Я попробую еще раз позже - ReynierPM
Это не файл /etc/my.cnf. Обновление ответа. - kworr
@kworr Я пробую ваше решение, но не работает вообще. БД создается пустым и не отображается в phpMyAdmin или любом другом инструменте графического интерфейса. Я установил каталог данных в /etc/my.cnf в datadir = / data / var / lib / mysql и установил разрешения для 0755 в / data / var / lib / mysql, а также для владельца mysql: mysql, почему база данных пуста ? в чем проблема? - ReynierPM


MYSQL_USER="root"
MYSQL_PASSWORD="PASSWORD"
DBNAME="DB_NAME"

mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "CREATE DATABASE $DBNAME;" 2> /tmp/error1

STATUS=$? 
if [ $STATUS -eq 0 ];
then 
    echo -e "Database '$DBNAME' is created"
elif (grep -i "^ERROR 1007" /tmp/error1 > /dev/null);
then
    echo -e "Database '$DBNAME' already exists"
else
    echo -e "Failed to create database '$DBNAME'"
fi

rm -r /tmp/error1 

Это сделает трюк благодаря


2
2018-06-22 12:14





MYSQL_USER="root"
MYSQL_PASS="mypass_goes_here"

touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql
mysql --user=$MYSQL_USER --password=$MYSQL_PASS < /tmp/script.sql
rm -rf /tmp/script.sql

будьте уверены, как вы пишете свой пропуск, и он не убегает

--defaults-extra-file = - хорошая вещь (tm) (c)


1
2018-06-16 01:08





Не ставьте кавычки вокруг пароля, потому что, если вы делаете кавычки, считаются частью пароля.


1
2018-06-16 12:02





mysql_config_editor set --login-path=storedPasswordKey --host=localhost --user=root --password

Как выполнить командную строку с защищенным паролем? используйте редактор конфигурации !!!

Начиная с mysql 5.6.6 вы можете сохранить пароль в файле конфигурации, а затем выполнить команды cli, подобные этому ....

mysql --login-path=storedPasswordKey ....

--login-path заменяет переменные ... host, user AND password. отлично правый!


1
2018-02-19 13:25



blog.geekslikeshinythings.com/2015/02/... - Artistan
Спасибо, что поделился! Из этого подхода есть только один вопрос. Параметр --login-путь должен быть первым параметром вызова, иначе вы получите сообщение «unknown variable» login-path = local '. - André Augusto