본문 바로가기

생활코딩

라즈베리파이 MySQL 설치

라즈베리파이에 MySQL 설치하는 걸 매번 잊어버리는 것 같아 정리 차원에서 적어둡니다.

 

MySQL vs MariaDB

라즈베리파이 64bit 최신 OS는 리눅스 Debian bookworm을 포팅한 ARM64 버전입니다. 보통 Linux에 설치할 수 있는 MySQL류의 무료 DBMS는 MySQL Community Edition과 MariaDB를 생각해 볼 수 있는데, debian쪽에 MySQL Community 서버는 ARM64  버전을 제공하고 있지 않습니다. MySQL Community Edition의 다운로드 가능한 버전들은 다음에서 확인할 수 있습니다. 

https://dev.mysql.com/downloads/mysql/

 

MySQL :: Download MySQL Community Server

Select Version: 9.0.1 Innovation 8.4.2 LTS 8.0.39 Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris mac

dev.mysql.com

그러므로, 실질적으로 라즈베리파이 ARM64 버전 운영체제에서는 MySQL류 DBMS는 MariaDB 만이 사용 가능합니다. MariaDB가 일반적인 사용에서 MySQL Community Edition과 차이가 없기 때문에 문제는 없습니다. 

 

설치

sudo apt update
sudo apt install mariadb-server

 

설치가 끝나면 MariaDB가 바로 실행됩니다.

 

시작/정지/재시작

sudo systemctl start mariadb
sudo systemctl stop mariadb
sudo systemctl restart mariadb

 

root 계정 접속 및 암호 변경

# 초기에는 반드시 sudo로 mysql을 실행해야 root로 접속 가능합니다.
sudo mysql -u root
# MariaDB 접속 후
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '원하는암호';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit
# 이 후 부터는 다음과 같이 root로 접속합니다. sudo 없이 가능합니다.
mysql -u root -p

 

접속 클라이언트 명령어가 mysql입니다. mariadb는 mysql과 상당한 호환성을 갖기 때문에 클라이언트 명령어도 같게 지원합니다. 물론 mariadb 명령으로 접속해도 됩니다.

 

신규 DB 생성/계정 등록/권한 부여 쿼리

CREATE DATABASE DB이름 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER '계정이름'@'127.0.0.1' IDENTIFIED BY '계정암호';
GRANT ALL PRIVILEGES ON DB이름.* TO '계정이름'@'127.0.0.1';
FLUSH PRIVILEGES;

 

외부 접속 설정

라즈베리파이에 MariaDB를 설치하면 기본적으로 내부에서만 접속 가능하고 외부에서 원격 접속이 불가합니다. 그 이유는 MariaDB의  debian용 패키지에는  bind-address라는 옵션이 127.0.0.1 로 설정돼 있기 때문입니다. 즉, 내부용 네트워크 인터페이스인 Loopback에 연결이 됩니다. 그래서, 내부에서만 접근이 가능합니다. 이 옵션은 /etc/mysql/mariadb.conf.d/50-server.cnf 파일에 다음과 같이 설정돼 있습니다.

[mysqld]
....
bind-address            = 127.0.0.1
....

 

이 설정을 변경하여 외부에서도 접속이 가능하게 하려면 다음과 같이 합니다.

sudo vi /etc/mysql/my.cnf 로 파일을 엽니다. 그리고, 파일의 맨 마지막에 다음과 같은 내용을 추가합니다. 파일의 맨 마지막 전에 위의 내용도 포함이 되기 때문에 꼭 파일의 맨 마지막에 설정을 해야 위의 옵션 설정이 재설정됩니다.

[mysqld]
skip-bind-address
# 아래 두 방법은 모두 특정 네트워크 인터페이스에 연결되지 않고 전체 인터페이스로부터의 연결을 허용합니다.
# 다른 방법으로
#bind-address=*
# 또 다른 방법으로
#bind-address=0.0.0.0

 

이렇게 한 후 MariaDB를 재시작합니다.

sudo systemctl restart mariadb

 

이후부터는 사용자 등록 및 권한 부여시 다음과 같이 host 주소를 %로 사용하면 외부 아무데서나 접근 가능합니다.

CREATE USER '계정이름'@'%' IDENTIFIED BY '계정암호';
GRANT ALL PRIVILEGES ON DB이름.* TO '계정이름'@'%';

 

내부 네트워크 망에서만 접근 가능하게 하는 것 같이 접근하는 클라이언트 IP 주소를 제한하려면 host 주소를 192.168.0.% 식으로 지정하면 됩니다.

CREATE USER '계정이름'@'192.168.0.%' IDENTIFIED BY '계정암호';
GRANT ALL PRIVILEGES ON DB이름.* TO '계정이름'@'192.168.0.%';

 

참고