mysql 명령줄에 비밀번호를 전달하는 방법

mysql 명령줄에 비밀번호를 전달하는 방법

foo.php예를 들어 MySQL 비밀번호 P455w0rd를 사용하려고 할 때 파일에 MySQL 비밀번호를 저장합니다 .

$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)

$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)

두 옵션 모두 여전히 비밀번호가 필요합니다. 비밀번호를 보내는 올바른 방법은 무엇입니까 stdin?

답변1

클라이언트 유틸리티는 mysql또는 옵션을 사용하여 명령줄에서 비밀번호를 얻을 수 있습니다.-p--password=

사용하는 경우 -p옵션 문자 뒤에 공백이 있어서는 안 됩니다.

$ mysql -pmypassword

나는 자체 문서화 기능이 있기 때문에 스크립트의 긴 옵션을 선호합니다.

mysql --password=mypassword --user=me --host=etc

답변2

비밀번호를 명령줄에 전달하는 방법에 대해 매우 주의해야 합니다. 주의하지 않으면 결국 ps.


가장 안전한 방법은 새 구성 파일을 생성하고 또는 명령줄 옵션을 mysql사용하여 전달하는 것입니다 .--defaults-file=--defaults-extra-file=

둘 사이의 차이점은 기본 구성 파일 외에 후자가 읽히는 반면, 전자의 경우 인수로 전달된 파일만 사용된다는 것입니다.

추가 구성 파일에는 다음과 유사한 콘텐츠가 포함되어야 합니다.

[client]
user=foo
password=P@55w0rd

이 파일을 안전하게 보관하세요.

그런 다음 다음을 실행하십시오.

mysql --defaults-extra-file=<path to the new config file> [all my other options]

답변3

~/.my.cnf 파일을 생성하고 본인만 액세스할 수 있도록 설정하고 권한을 600으로 설정합니다.

   [client]
   user=myuser
   password=mypassword

그러면 비밀번호를 다시 입력할 필요가 없습니다.

   bash$ mysql -u myuser mydatabase
   mysql>

답변4

@maxschlepzig가 댓글에서 말했듯이,

-p를 지정하지 않으면 mysql은 MYSQL_PWD 환경 변수를 읽습니다.

그래서 배쉬에서는:

read -s -p "Enter the mysql password for $DBUSER @ $DBNAME: " DBPASS 
export MYSQL_PWD="$DBPASS" 
mysqldump -u $DBUSER $DBNAME > dump.sql

# once you are done
export MYSQL_PWD="" 

관련 정보