셸 스크립트를 통해 SQL 명령을 실행하여 자동화되도록하려면 어떻게해야합니까?
쉘 스크립트를 사용하여 SQL 파일로 수집 한 데이터를 복원하고 싶습니다. 서버에 연결하고 데이터를 복원하고 싶습니다. 이 명령은 SSH 명령 줄을 통해 별도로 실행될 때 작동합니다.
이것이 내가 사용하는 명령입니다.
mysql -h "server-name" -u root "password" "database-name" < "filename.sql"
이것은 파일을 만들고 ds_fbids.sql
mysql에 파이프 하는 쉘 스크립트 코드입니다 .
perl fb_apps_frm_fb.pl
perl fb_new_spider.pl ds_fbids.txt ds_fbids.sql
mysql -h dbservername -u username -ppassword dbname < ds_fbids.sql
이를 수행하는 올바른 방법은 무엇입니까?
답변
-p
비밀번호를 보내 려면 플래그 를 사용해야 합니다. 그리고 -p
암호 사이에 공백이 없어야하기 때문에 까다 롭습니다 .
$ mysql -h "server-name" -u "root" "-pXXXXXXXX" "database-name" < "filename.sql"
-p
mysql 클라이언트가 대화식으로 비밀번호를 묻는 프롬프트를 표시 한 후 공백을 사용 하면 다음 명령 인수가 database-name으로 해석됩니다.
$ mysql -h "server-name" -u "root" -p "XXXXXXXX" "database-name" < "filename.sql"
Enter password: <you type it in here>
ERROR 1049 (42000): Unknown database 'XXXXXXXX'
실제로 ~ / .my.cnf에 사용자와 비밀번호를 저장하는 것을 선호하므로 명령 줄에 전혀 입력하지 않아도됩니다.
[client]
user = root
password = XXXXXXXX
그때:
$ mysql -h "server-name" "database-name" < "filename.sql"
당신의 의견을 다시 :
위와 같은 배치 모드 mysql 명령을 명령 줄과 셸 스크립트에서 항상 실행합니다. 정확한 스크립트 나 오류 출력을 공유하지 않았기 때문에 쉘 스크립트의 문제점을 진단하기가 어렵습니다. 위의 원래 질문을 수정하고 무엇이 잘못되었는지에 대한 예를 제공하는 것이 좋습니다.
또한 쉘 스크립트 문제를 해결할 때 -x
플래그를 사용 하므로 각 명령이 어떻게 실행되는지 볼 수 있습니다.
$ bash -x myscript.sh
답변
이 구문을 사용하십시오.
mysql -u $user -p$passsword -Bse "command1;command2;....;commandn"
답변
이전의 모든 대답은 훌륭합니다. 실행하려는 간단한 한 줄 sql 명령 인 경우 -e 옵션을 사용할 수도 있습니다.
mysql -h <host> -u<user> -p<password> database -e \
"SELECT * FROM blah WHERE foo='bar';"
답변
SQL 스크립트를 실행하는 방법은 다음 구문을 사용하십시오.
mysql --host= localhost --user=root --password=xxxxxx -e "source dbscript.sql"
호스트를 localhost로 사용하는 경우 언급 할 필요가 없습니다. 이것을 사용할 수 있습니다 :
mysql --user=root --password=xxxxxx -e "source dbscript.sql"
이것은 Windows 및 Linux에서 작동합니다.
비밀번호 내용에 !
(느낌표)가 있으면 \
그 앞에 (백 슬래시)를 추가해야 합니다.
답변
질문의 핵심은 이미 여러 번 대답되었지만 방금 셸 스크립팅과 SQL 모두에서 백틱이 비닝된다고 생각했습니다. 테이블이나 데이터베이스 이름을 지정하기 위해 SQL에서 사용해야하는 경우 다음과 같이 쉘 스크립트에서 이스케이프해야합니다.
mysql -p=password -u "root" -Bse "CREATE DATABASE \`${1}_database\`;
CREATE USER '$1'@'%' IDENTIFIED BY '$2';
GRANT ALL PRIVILEGES ON `${1}_database`.* TO '$1'@'%' WITH GRANT OPTION;"
물론, 사용자 입력을 신뢰하지 않는 한 연결된 사용자 입력 (통과 인수)을 통해 SQL을 생성하면 안됩니다. MySQL로.
답변
mysql -h "hostname" -u usr_name -pPASSWD "db_name" < sql_script_file
(에 대한 전체 경로 사용 sql_script_file
필요한 경우 )
출력을 파일로 리디렉션하려면
mysql -h "hostname" -u usr_name -pPASSWD "db_name" < sql_script_file > out_file
답변
잊었 -p
거나 --password=
후자가 더 잘 읽을 수 있습니다.
mysql -h "$server_name" "--user=$user" "--password=$password" "--database=$database_name" < "filename.sql"
자격 증명 / 이름에 공백이나 셸 특수 문자가 포함되어 있지 않은 경우 따옴표는 필요하지 않습니다.
맨 페이지도 명령 줄에 자격 증명을 제공하는 것이 안전하지 않다고 말합니다. 따라서 my.cnf에 대한 Bill의 조언을 따르십시오.