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=""