programing

셸 스크립트를 사용하여 여러 MySQL 명령을 실행하는 더 나은 방법

powerit 2023. 11. 4. 13:21
반응형

셸 스크립트를 사용하여 여러 MySQL 명령을 실행하는 더 나은 방법

여러 MySQL 명령을 실행하기 위해 *.sh 스크립트를 작성하고자 합니다.

현재 제가 할 수 있는 것은 다음과 같은 것입니다.

mysql -h$host -u$user -p$password -e "drop database $dbname;"
mysql -h$host -u$user -p$password -e "create database $dbname;"
mysql -h$host -u$user -p$password -e "another MySQL command"
...

타이핑을 피할 수 있는 방법이 있습니까?mysql -h$host -u$user -p$password -e내가 MySQL 명령을 실행하고 싶을 때마다?

예를 들어 텍스트 파일에서 MySQL 문을 실행할 수 있다고 생각합니다.

여기 cmds 입니다.MySQL 명령을 포함하는 txt 파일:

select colA from TableA;
select colB from TableB;
select colC from TableC;

셸 스크립트를 사용하여 실행하려면 다음을 입력합니다.

mysql -h$host -u$user -p$password db_dbname < cmds.txt

이렇게 하면 셸 스크립트에서 MySQL 명령을 분리할 수 있습니다.

스크립트에 진행 상황 정보가 표시되도록 할 수도 있습니다.이 경우 "--verbose" 옵션을 사용하여 mysql을 호출할 수 있습니다.

자세한 정보는 https://dev.mysql.com/doc/refman/5.6/en/mysql-batch-commands.html 을 참조하십시오.

단일 다중 쿼리를 사용할 수 있습니다.

mysql -h$host -u$user -p$password -e "drop database $dbname;create database $dbname;another MySQL command;"

모든 쿼리를 다음과 같이 구분하여 쓰기만 하면 됩니다.;. 그들은 차례로 운영될 것입니다.

또한 HERE 문서를 사용하여 동일한 스크립트 내의 쿼리를 가질 수도 있습니다.

mysql -h$host -u$user -p$password db_dbname <<'EOF'
select colA from TableA;
select colB from TableB;
select colC from TableC;
EOF

제가 사용한 노트'EOF'보다는EOF매개 변수 대체를 비활성화하는 스크립트의 내용을 방지하기 위해 첫번째 줄에 있습니다(특히,`문제가 있을 수 있음)

또한 결승전 전에는 공백이 없어야 합니다(단, 다음을 사용하는 경우는 제외)<<-보다는<<-- 선두 탭 문자가 제거되는 경우):

mysql -h$host -u$user -p$password db_dbname <<- 'EOF'
↠select colA from TableA;
↠select colB from TableB;
↠select colC from TableC;
↠EOF

(교체)탭 문자로 표시).

HERE doc 구문에 대한 자세한 내용은 bash 설명서를 참조하십시오.

리눅스에는 여러 가지 방법이 있습니다.

mysql cli에서:

mysql> source mycmds.sql

파이프 사용:

echo "SELECT ..; INSERT ..;" | mysql ...

파이프 또는 리디렉션을 사용하여 파일에서 명령 실행:

cat file.sql | mysql ... OR mysql .. < file.sql

반복을 줄이는 다른 답변과는 다르지만,
옵션(사용자, 호스트...)을 줄이는 방법이 있습니다.-u,-p,-h...) 각 줄 명령에서

내가 아는 2가지 방법.


1. 쓰임새my.cnf파일

사용자 정보를 옵션 파일(예: ~/.my.cnf 등)에 저장할 수 있습니다.

[client] 
user=your_username
password=your_password
# database=database_name

그럼 그냥 달리면 됩니다.mysql하나의 옵션으로 명령-e조회합니다.

mysql -e "drop database $dbname;"
mysql -e "create database $dbname;"
mysql -e "another MySQL command"

2. 쓰임새mysql_config_editor

로그인 정보를 저장할 수 있습니다.mysql_config_editor

mysql_config_editor set --login-path=mypath1 --host=localhost --user=root --password

login-path 옵션을 사용하여 명령 실행

mysql --login-path=mypath1 -e "drop database $dbname;"
mysql --login-path=mypath1 -e "create database $dbname;"
mysql --login-path=mypath1 -e "another MySQL command"

언급URL : https://stackoverflow.com/questions/32869275/a-better-way-to-execute-multiple-mysql-commands-using-shell-script

반응형