# 시스템 업데이트
sudo apt update
이런식의 에러가 뜨는데
# sources.list 편집
sudo nano /etc/apt/sources.list
# 아래 내용을 추가
deb http://mirror.kakao.com/ubuntu/ noble main restricted
deb http://mirror.kakao.com/ubuntu/ noble-updates main restricted
deb http://mirror.kakao.com/ubuntu/ noble universe
deb http://mirror.kakao.com/ubuntu/ noble-updates universe
deb http://mirror.kakao.com/ubuntu/ noble multiverse
deb http://mirror.kakao.com/ubuntu/ noble-updates multiverse
deb http://mirror.kakao.com/ubuntu/ noble-backports main restricted universe multiverse
그다음 ctrl+x, y, enter 하면 변경 내용이 저장된다.
이후 다시 sudo apt update 하면 오류가 사라진걸 확인할 수 있다.
Windows의 C:\ 드라이브는 wsl에서 /mnt/c/ 로 접근 가능하다.
# Windows 경로에서 WSL로 파일 복사
cp /mnt/c/Users/사용자/Downloads/mariadb-10.5.9-linux-systemd-x86_64.tar.gz ~/
# mysql 사용자 및 그룹 생성
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
# 압축해제
cd ~
tar -xzf mariadb-10.5.9-linux-systemd-x86_64.tar.gz
# /usr/local로 이동
sudo mv mariadb-10.5.9-linux-systemd-x86_64 /usr/local/mysql
# 소유권 변경
sudo chown -R mysql:mysql /usr/local/mysql
# 데이터 디렉토리 생성
sudo mkdir -p /var/lib/mysql
sudo chown mysql:mysql /var/lib/mysql
sudo chmod 750 /var/lib/mysql
# PATH에 MariaDB 추가
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 데이터베이스 초기화
sudo /usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/var/lib/mysql
# mysql 설정 디렉토리 생성
sudo mkdir -p /etc/mysql
# my.cnf 파일 생성
sudo nano /etc/mysql/my.cnf
# 해당 내용 입력
[mysqld]
basedir = /usr/local/mysql
datadir = /var/lib/mysql
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid
user = mysql
port = 3306
[mysql]
socket = /var/run/mysqld/mysqld.sock
[client]
socket = /var/run/mysqld/mysqld.sock
ctrl+x, y, enter를 눌러 변경 내용이 저장한다.
sudo mkdir -p /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqld
systemd 서비스 파일을 생성하여 자동 시작되도록 설정할 수 있다.
sudo nano /etc/systemd/system/mariadb.service
# 다음 내용을 입력
[Unit]
Description=MariaDB database server
After=network.target
[Service]
Type=notify
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnf
KillMode=process
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable mariadb
sudo systemctl start mariadb
journalctl -xeu mariadb.service
해당 명령어를 입력하면 다음과 같이 로그가 뜬다. 로그의 오류들을 살펴보면
libaio1 라이브러리가 없어서 발생하는 문제이다. libaio1dmf 설치해보자.
sudo apt update
sudo apt install libaio1
libaio1 설치 중 이런 오류가 났다. Ubuntu 24.04에서는 libaio1이 기본 저장소에서 제거되었기 때문에 오류가 나는 거 같다. libaio1을 수동 설치 해주자.
wget http://archive.ubuntu.com/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-5_amd64.deb
sudo dpkg -i libaio1_0.3.112-5_amd64.deb
libaio1 관련 오류는 해결됐지만 다른 오류가 나온다.
MariaDB가 라이브러리 문제 없이 실행까지는 시도했지만, 이제는 시스템 테이블이 없어 실행 도중 중단되고 있다고 뜬다. 이는 MariaDB가 처음 설치되고 실행되기 전에 초기 데이터 디렉토리 설정(init) 작업이 안 되었기 때문이다.
해결방법: MariaDB 초기화
MariaDB가 사용하는 디렉토리는 보통 /var/lib/mysql이다. 비어 있거나 초기화되지 않은 상태라면 initialize 작업이 필요하다.
sudo rm -rf /var/lib/mysql/*
위 명령은 데이터 손실을 일으킬 수 있다. 새로 설치한 경우에만 사용해야 한다.
sudo /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql
--basedir: MariaDB가 설치된 경로 (tar.gz 압축 해제한 디렉토리)
--datadir: MariaDB 데이터 저장 경로
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl restart mariadb
mariadb 버전을 확인하기 위해 버전 확인 명령어를 쳤는데 다음과 같은 오류가 났다. 이 오류는 MariaDB가 libncurses.so.5를 찾지 못해서 발생하는 문제이다. Ubuntu 22.04+에서는 libncurses.so.6만 있고 libncurses.so.5는 없기 때문이다.
심볼릭 링크를 생성해서 해당 문제를 해결해 보자.
ls -l /lib/*/libncurses* /usr/lib/*/libncurses* /lib/libncurses* /usr/lib/libncurses*
ls -l /lib/*/libtinfo* /usr/lib/*/libtinfo* /lib/libtinfo* /usr/lib/libtinfo*
sudo ln -s /lib/x86_64-linux-gnu/libncursesw.so.6.4 /lib/x86_64-linux-gnu/libncurses.so.5
sudo ln -s /lib/x86_64-linux-gnu/libtinfo.so.6.4 /lib/x86_64-linux-gnu/libtinfo.so.5
이 오류는 MariaDB/MySQL 서버가 시작할 때 Unix 소켓에 바인딩하지 못해서 발생하는 문제다. 원인은 다른 MySQL 프로세스가 이미 실행 중이거나 소켓 파일에 문제가 있을 때 발생한다.
sudo ps aux | grep mysql
sudo ps aux | grep mariadb
sudo pkill mysql
sudo pkill mariadb
# 소켓 파일 위치 확인
sudo find /var/run -name "*.sock" | grep mysql
sudo find /tmp -name "*.sock" | grep mysql
# 소켓 파일 삭제 (일반적인 위치들)
sudo rm -f /var/run/mysqld/mysqld.sock
sudo rm -f /tmp/mysql.sock
sudo rm -f /var/lib/mysql/mysql.sock
sudo chown -R mysql:mysql /var/lib/mysql
sudo mkdir -p /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqld
sudo systemctl restart mariadb
sudo systemctl status mariadb