본문 바로가기

리눅스

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

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