답변:
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
옵션은 제외해야한다 config 파일에 암호를 사용하기 위해 명령에서.
옳은:
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
명령이 쉘 내장 (및 내장)이어야하기 때문입니다. 따라서 쉘에서 명령을 실행하면 쉘은 명령의 인수로 프로세스를 포크 / 실행하지 않습니다.
OS 내부에있는 파일을 사용하려면 다음을 사용하십시오 --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]
예를 들어 항목 이 필요합니다 .
이제 자동으로 DB에 연결되는 별칭을 만들 수 있습니다
alias whateveryouwant="mysql --defaults-extra-file=/path/.sqlpwd [database]"
또한 비밀번호를 내부에 넣고 .sqlpwd
스크립트 / cli를 통해 사용자 이름을 전달할 수도 있습니다 . 이것이 보안을 향상 시킬지 여부는 확실하지 않습니다. 전체적으로 다른 질문 일 것입니다.
완전성을 위해 다음을 수행 할 수 있다고 말하지만 매우 안전하지 않으며 프로덕션 환경에서 사용해서는 안됩니다.
mysqldump -u [user_name] -p[password] [database] > [desiredoutput].sql
참고 : -p와 비밀번호 사이에는 SPACE가 없습니다.
예를 들어 -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
여기에 와서 MariaDB로 mysqldump를 수행하는 방법을 찾으십시오. 비밀번호를 [client] 블록 아래에두고 사용자를 [mysqldump] 블록 아래에 두십시오.
[mysqldump]
섹션 아래에 비밀번호를 입력 하면 문제없이 작동합니다. 우분투 18.04 LTS
다음은 스크립트 / bin / sh의 Docker 솔루션입니다.
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
가 컨테이너에 설정되어 있는지 확인하십시오 .
그것이 나를 도울 수있는 것처럼 당신을 도울 수 있기를 바랍니다!
확실히 나는 전체 cmd 라인을 루트 crontab에 credentails로 배치하는 것이 더 좋고 안전하다고 생각합니다. 적어도 crontab 편집은 이미 암호를 알고있는 사람에게 제한되어 있습니다 (읽기 가능). 따라서 일반 텍스트로 표시 할 걱정은 없습니다 ...
간단한 mysqldump 이상이 필요한 경우 ... 크레 덴 테일을 매개 변수로 받아들이고 모든 편의 기능을 수행하는 bash 스크립트를 배치하십시오 ...
간단한 저음 파일
#!/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