라즈베리파이에 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/
그러므로, 실질적으로 라즈베리파이 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.%';
참고
'생활코딩' 카테고리의 다른 글
라즈베리파이 - Docker Registry 서버 설치 (0) | 2024.10.22 |
---|---|
라즈베리파이 - nginx - ModSecurity 설치 (3) | 2024.10.20 |
라즈베리파이 - Git 서버 설치하기 (Gitea) (2) | 2024.10.17 |
라즈베리파이 JDK 설치 (0) | 2024.10.14 |
라즈베리파이를 사용한 음성 전달 웹앱 만들기 (1) | 2024.02.23 |