리눅스

MySQL에서 원격 접속을 허용하는 방법

변군Dev 2022. 11. 26. 01:15
728x90

MySQL에서 원격 접속을 허용하는 방법

1. MySQL 서버 구성

MySQL 서버가 원격 접속을 수락하도록 구성해야 합니다. 이를 위해 MySQL 설정 파일을 수정해야 합니다. 설정 파일은 일반적으로 "/usr/local/mysql/my.cnf" 또는 "/etc/my.cnf"에 위치합니다.

 

아래와 같이 설정 파일을 열고 bind-address 옵션을 주석 처리 또는 수정하여 모든 IP 주소에서의 접속을 허용합니다.

# 기본적으로 MySQL은 로컬 호스트에서만 접속을 허용하도록 설정되어 있습니다.
# 다른 IP에서의 접속을 허용하려면 아래의 옵션을 변경합니다.

# bind-address            = 127.0.0.1

# 모든 IP 주소에서의 접속을 허용합니다.
bind-address            = 0.0.0.0

설정 파일을 수정한 후 MySQL 서버를 다시 시작합니다.

sudo systemctl restart mysql

2. MySQL 사용자에게 원격 접속 권한 부여

  • 권한 확인
SELECT Host,User,plugin,authentication_string FROM mysql.user;
MariaDB [(none)]> SELECT Host,User,plugin,authentication_string FROM mysql.user;
+------------------+------------+--------+-----------------------+
| Host             | User       | plugin | authentication_string |
+------------------+------------+--------+-----------------------+
| localhost        | root       |        |                       |
| 127.0.0.1        | root       |        |                       |
| ::1              | root       |        |                       |
| localhost        | racktables |        |                       |
+------------------+------------+--------+-----------------------+
4 rows in set (0.000 sec)

MariaDB [(none)]>
  • 권한 설정(권한 부여)
    • 특정 IP 대역, 특정 데이터베이스에 접근 허용
      • 특정 IP 대역 : 192.168.0.0/24
      • 특정 데이터베이스 : racktables_db
    • GRANT ALL PRIVILEGES ON 데이터베이스.* TO 'mysql_계정'@'아이피' IDENTIFIED BY 'mysql_계정_패스워드';
    • GRANT ALL PRIVILEGES ON *.* TO 'mysql_계정'@'%' IDENTIFIED BY 'mysql_계정_패스워드';
    • * 참고로 %은 모든 아이피를 포함하지만, localhost는 포함하지 않는다.
GRANT ALL PRIVILEGES ON racktables_db.* TO 'racktables'@'192.168.0.%' IDENTIFIED BY 'mysqlpassword!';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON racktables_db.* TO 'racktables'@'192.168.0.%' IDENTIFIED BY 'mysqlpassword!';
Query OK, 0 rows affected (0.000 sec)
  • 권한 확인
SELECT Host,User,plugin,authentication_string FROM mysql.user;
MariaDB [(none)]> SELECT Host,User,plugin,authentication_string FROM mysql.user;
+------------------+------------+--------+-----------------------+
| Host             | User       | plugin | authentication_string |
+------------------+------------+--------+-----------------------+
| localhost        | root       |        |                       |
| 127.0.0.1        | root       |        |                       |
| ::1              | root       |        |                       |
| localhost        | racktables |        |                       |
| 192.168.0.0/24   | racktables |        |                       |
+------------------+------------+--------+-----------------------+
5 rows in set (0.000 sec)

MariaDB [(none)]>
FLUSH PRIVILEGES;
728x90

원격지에서 MySQL 서버에 접속하기

Mac 노트북에 mysql-client 설치하기

brew install mysql-client
> brew install mysql-client
...
==> mysql-client
mysql-client is keg-only, which means it was not symlinked into /opt/homebrew,
because it conflicts with mysql (which contains client libraries).

If you need to have mysql-client first in your PATH, run:
  echo 'export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"' >> ~/.zshrc

For compilers to find mysql-client you may need to set:
  export LDFLAGS="-L/opt/homebrew/opt/mysql-client/lib"
  export CPPFLAGS="-I/opt/homebrew/opt/mysql-client/include"

For pkg-config to find mysql-client you may need to set:
  export PKG_CONFIG_PATH="/opt/homebrew/opt/mysql-client/lib/pkgconfig"
echo 'export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

 

  • 권한 삭제

DELETE FROM mysql.user WHERE Host='아이피' AND User='mysql_계정_패스워드';

DELETE FROM mysql.user WHERE Host='192.168.0.%' AND User='racktables';
MariaDB [(none)]> DELETE FROM mysql.user WHERE Host='192.168.0.%' AND User='racktables';
Query OK, 1 row affected (0.000 sec)

 

728x90