쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

mysql 쿼리를 실행하는 방법에는 다양한 방법이 존재합니다.

가장 기본적인 방법으로는 아래와 같이 mysql에 접속하여 명령어를 입력하는 방법이 있습니다.

* mysql에 접속하여 쿼리 실행(참고)

[root@localhost script]# mysql -uroot -pmysql
쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

.

mysql> select version();
쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

하지만 동일하게 select version(); 이라는 mysql 쿼리를 쉘 스크립트 안이나 리눅스 command line에서 사용하고 싶으면 어떻게 해야할까요?

쉘 스크립트나 command line에서 mysql 쿼리를 실행하는 방법은 두가지 방법이 있습니다. (이하 쉘 스크립트와 command line의 사용방법이 같기 때문에 두개를 합쳐서 커맨드라인이라고 부르겠습니다.)

| 쉘 스크립트 및 커맨드라인에서 mysql 쿼리 실행

| mysql 5.5 이하 버전

첫번째는 -e 옵션을 이용하여 처리하는 방법이 있다.

#mysql -u계정 -p비밀번호 -e "실행하고싶은_명령어"

예를 들어보면

[root@localhost script]# mysql -uroot -pmysql -e "select version();"
쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

하지만 mysql: [Warning] Using a password on the command line interface can be insecure. 와 같은 경고문구가 뜹니다. 제가 알기로는 5.5 이하 버전을 쓰시면 이런 문구가 안 뜰것이고, 그 이후 버전에는 보안이 강화되어 저런 경고문구가 뜨는 것으로 압니다.

대충 command line에 패스워드를 사용하는 것은 안전하지 않다 이런 뜻 인것 같네요.

mysql 5.5 이후 버전을 사용하시는데 이런 문구가 보기 싫으신 분들은 아래와 같이 패스워드를 미리 입력하고 필요할 때 호출하여 사용하는 방법입니다.

| mysql 5.5 이후 버전

위의 2가지 순서를 진행해 주시면 됩니다.

1) 패스워드 미리 입력 후 호출

mysql_config_editor set --login-path=root --host=localhost --user=root --password
쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

참고 : https://nirsa.tistory.com/121

2) mysql -uroot -p -> mysql –login-path=root 사용

위의 명령어로 패스워드를 미리 입력했으면 mysql -uroot -p 대신에 mysql –login-path=root를 사용하시면 됩니다.

예를 들면 아래와 같이 사용하시면 됩니다.

[root@localhost script]# mysql --login-path=root -e "select version();"
쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

위의 경고문구가 안 뜨는 것을 확인할 수 있습니다.

두번째는 파일에 쿼리를 입력하여 실행하는 방법이 있다.

예를 들어볼까요.

1) 실행하고 싶은 sql문 file을 만든다.

[root@localhost script]# vi mysql_test.sql

위와 동일하게 버전을 보는 명령어와, database의 목록을 보는 명령어 그리고 테스트용으로 1을 확인하는 명령어를 넣어주었습니다.

select version();
show databases;
select 1;
쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

2) sql 파일 실행하기

mysql < 사용하고_싶은_쿼리파일 방법으로 실행합니다.

위에서 마찬가지로 5.5 이전버전은 mysql -uroot -p를 사용하시는 것을 추천하고

5.5 이후버전을 사용하셔서 mysql: [Warning] Using a password on the command line interface can be insecure의 문구가 보기 싫으신분들은 동일하게 mysql --login-path=root를 사용하시면 됩니다.

| 5.5 이하 버전

[root@localhost script]# mysql -uroot -pmysql < mysql_test.sql
쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

| 5.5 이후 버전

[root@localhost script]# mysql --login-path=root  < mysql_test.sql
쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

mysql –login-path=root를 처음 사용하시는 분들은 아래와 같은 명령어로 패스워드를 미리 저장해야하는 것을 잊지 마시기 바랍니다!

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

첫번째 방법은 간단한 쿼리를 사용할 때, 두번째 방법은 복잡한 쿼리나 여러가지 쿼리를 사용해야 할 때 이용하는게 좋겠죠 😊

| 쉘 스크립트에 적용해보기

쉘 스크립트에도 동일하게 적용하시면 됩니다.

아래 쉘 스크립트는 mysql 5.7 버전을 처음 설치하고 난 후 임시 패스워드를 받아 패스워드를 변경하는 쉘 스크립트를 작성한 것입니다.

가끔 --connect-expired-password 와 관련 에러가 나와 옵션을 끝에 추가해주었습니다.

mysql 5.7 첫 설치 후 임시 패스워드 받아 패스워드 변경하기

#!/bin/bash
#temp mpassword
        #grep 'temporary password' /var/log/mysqld.log
        mpassword=$(awk '/temporary password/{print $11}' /var/log/mysqld.log)
        echo -e "\033[47;31m you must reset your mpassword  \033[0m "
        echo -n "what do you wanna change to mysql repassword : "
        read repassword
 
        #mysql 5.6 version after
        echo -e "\033[47;31m "your mysql temp password:" $mpassword \033[0m "
        echo -e "\033[47;31m "Enter your mysql temp password" \033[0m "
 
#mysql password & policy change
mysql_config_editor set --login-path=root --host=localhost --user=root --password
mysql --login-path=root -e "SET PASSWORD = PASSWORD('$mpassword');" --connect-expired-password
mysql --login-path=root -e "uninstall plugin validate_password;" --connect-expired-password
mysql --login-path=root -e "update mysql.user set authentication_string=password('$repassword') where user='root';" --connect-expired-password
mysql --login-path=root -e "FLUSH PRIVILEGES;" --connect-expired-password

| 쉘 스크립트 작성시 사용한 문법 및 참고사항

* login path 사용법

1.mysql 설정 에디터 도움말

[root@localhost script]# mysql_config_editor –help
쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

2. 로그인 path 생성

mysql_config_editor set --login-path=설정_이름--host=주소 --user=아이디 --port=포트 –password

ex1) mysql_config_editor set --login-path=root --host=localhost --user=root –password
ex2) mysql_config_editor set --login-path=fido --host=localhost --user=fido –password

3.설정된 로그인 path 확인

print 라는 옵션을 사용합니다 😊

1)모두 확인

[root@localhost script]# mysql_config_editor print --all
쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

2) 특정 로그인 path 확인

mysql_config_editor print --login-path=설정_이름

ex) [root@localhost script]# mysql_config_editor print --login-path=root
쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

4. 로그인 path 삭제

mysql_config_editor remove --login-path=설정_이름

ex) mysql_config_editor remove --login-path=fido
쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

5. mysql 로그인 설정 파일 위치

linux unix 계정의 경우 로그인 계정의 홈 디렉토리에 생성됩니다.

파일이 숨겨져있기 때문에 ls -al과 같은 숨긴 폴더를 보는 옵션을 넣어야 합니다.

쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

또한 파일은 암호화 되어있습니다.

vi .mylogin.cnf
쉘 스크립트 mysql 명령어 - swel seukeulibteu mysql myeonglyeong-eo

참고 : http://www.irgroup.org/mysql-login-path/