2008-09-29 4 views
34

내가 스키마 덤프 mysqldump를 사용하기 위해 노력하고있어, 그것은 대부분 작동하지만 나는 하나의 호기심에 달렸다는 man 페이지와 --help 출력이 말한대로 암호를 (설정하는 것보다 다른 일을하고있는 것처럼 -p 또는 --password 옵션이 보인다 그것해야한다).mysqldump --password가 실제로하는 일을 실제로합니까?

특히 여기에 표시된 내용은 http://snippets.dzone.com/posts/show/360 인 것처럼 보입니다. 즉, 데이터베이스를 덤프로 설정하는 것입니다.

다소 이상한 주장을 뒷받침하기 위해 --password (또는 -p) 옵션을 지정하지 않으면 사용법을 인쇄하고 오류와 함께 종료됩니다. 암호를 지정하면 즉시 암호 (!)를 입력하라는 메시지가 나타나고 --password 옵션에 지정된 데이터베이스가 덤프됩니다 (또는 데이터베이스 이름과 일치하지 않는 암호가 지정된 경우 일반적으로 오류가 발생 함) .

 
    $ mysqldump -u test -h myhost --no-data --tables --password lose 
    Enter password: 
    -- MySQL dump 10.10 
    mysqldump: Got error: 1044: Access denied for user 'test'@'%' to 
    database 'lose' when selecting the database 

그래서, 무슨 일이 있습니다 : 여기

은 성적 증명서입니까? 이것은 이것이 일하기로되어있는 방식입니까? 확실히 의미가있는 것처럼 보이지도 않으며 공식 문서와 일치하지 않습니다. 마지막으로 이것이 작동하는 방식이라면 자동화 된 작업에 사용할 암호를 어떻게 지정해야합니까? expect ???

나는 mysqldump Ver 10.10 Distrib 5.0.22, for pc-linux-gnu (i486)을 사용하고 있습니다.

+0

일반 태그가 제거되었습니다. gotcha – Sklivvz

답변

79

: 서버에 접속할 때

--password [= 암호] -p [암호]

사용하는 패스워드. 짧은 옵션 양식 (-p)을 사용하는 경우 옵션과 암호 사이에 공백을 사용할 수 없습니다. 명령 행에서 --password 또는 -p 옵션 다음에 암호 값을 생략하면 을 입력하라는 메시지가 나타납니다.
명령 줄에서 암호를 지정하면 안전하지 않은 것으로 간주되어야합니다. 6.6 절. "암호 보안 유지하기"를보십시오.

구문 상으로 --password 스위치를 올바르게 사용하고 있지 않습니다. 이와 같이 명령 행 파서는 mysqldump가 mysqldump가 단순한 명령을 시도 할 때처럼 데이터베이스 이름으로 해석하는 독립형 인수로 "lost"를 사용하는 것을보고 있습니다.

이 문제를 해결하려면 --password=lose 또는 -plose을 사용하거나 -p 또는 --password을 사용하고 메시지가 표시되면 암호를 입력하십시오. -p를 사용하는 경우

--password=lose 

는 다음 -p 암호, 즉 '-plose'사이에 공백이있을 수 있습니다 :

+18

감사합니다. 감사합니다. '-u username' 옵션이 공백을 허락하는 것은 정말로 이상하지 만'-ppassword' 옵션은 공백을 허용하지 않습니다. 직관적 인 디자인이 아닙니다. –

+1

'mysqldump'를 어떻게 가져 와서 "경고 : 커맨드 라인 인터페이스에서 패스워드를 사용하는 것이 안전하지 않을 수 있습니까?" –

+0

-pwin, @antik;) –

2

시도해 보셨습니까 --password = whatever-password-is?

아마 나는 질문을 놓치고있다. 그러나 그것은 내가 도구를 실행하는 것이다.

3

는 --password 버전 작동하는지 나는 잘 모르겠지만, 즉시 나중에 암호를 지정할 수 있습니다 -p 사용하면 (키는 공백을 포함하지 아니하는 것입니다) :

의 mysqldump -pmypassword을. ..

0

-p 옵션에는 인수가 필요하지 않습니다. 암호를 사용하여 데이터베이스에 액세스 할 것임을 나타 내기 위해 -p 또는 --password를 넣으면됩니다. -p 다음에 넣은 이름의 데이터베이스를 덤프하는 이유는 mysqldump의 마지막 인수가 덤프 할 데이터베이스의 이름이어야한다는 것입니다 (또는 모두를 원할 경우 --all-databases).

@ Nathan의 대답도 사실입니다. 암호를 으로 지정하면 -p 스위치 다음에 즉시 (스크립트에서 유용하며 명령을 실행 한 후에 직접 입력 할 수 없습니다). 남자에서 mysqldump를

3

처럼 잃게 --password 사이에 '='를 배치하십시오 .

0

--password [= 암호 여기서

또 다른 옵션 파일을 작성하는 것이다 documentation

13

~/.my.cnf (권한 (600) 일 필요).

실제로 암호를 입력 할 필요없이 .my.cnf 파일

[client] 
password=lose 

이 암호를 필요로하는 MySQL의 사용자로 연결할 수 있도록이를 추가합니다. 당신은 심지어 -p 나 --password도 필요 없다. 스크립트 MySQL의 & mysqldump는 명령에 대한 매우 편리

. 당신이 인수없이 -p 또는 --password를 사용하는 경우

1

, 당신은 암호를 삽입하도록 요청하는 프롬프트를 얻을 것이다. 명령 행에 암호를 표시하려면

, 당신은 -pYOURPASSWORD 또는 --password = 지정한 패스워드를 사용해야합니다. -p 다음에 공백이없고 --password 뒤에 "="기호가 있음에 유의하십시오.

예를 들어, mysqldump는 암호를 요구 한 다음 "lose"를 데이터베이스 이름으로 처리합니다. 암호가 있다면 "="

-2

"test"사용자가 "잃어버린"데이터베이스에 액세스 할 수있는 권한이 없을 수도 있습니까?

9

암호에 특수 문자가있는 경우 이런 현상이 발생합니다. 여기에 mysql 암호는! 그것에서, 그래서 == password = 'xxx! xxxx'할 필요가있다. '표시에 유의하십시오.

+0

고마워! 저에게 시간을 절약했습니다 – CreativityKills

+0

시간을 절약 할 수있었습니다! – lookdad

관련 문제