Master/Slave 서버의 작업이 완료된 후 1~4차 네임서버의 업그레이드를 진행하였으며, Replication 상태를 중점적으로 확인하였습니다.
기존 버전과 업그레이드할 버전은 아래와 같습니다.
OS | 기존 버전 | 업그레이드 버전 |
---|---|---|
OS | CentOS Linux release 7.6.1810 (Core) | Rocky Linux release 9.3 (Blue Onyx) |
DB | mySQL 5.6.14 | 10.6.16 |
PDNS | 4.2.0 | 4.8.3 |
▶ 🧑💻 공통 기본 설정 보기
dnf list mariadb
===
마지막 메타자료 만료확인(0:22:38 이전): 2024년 01월 29일 (월) 오후 04시 10분 59초.
사용 가능한 꾸러미
mariadb.x86_64 3:10.5.22-1.el9_2 appstream
===
참고 URL
https://mariadb.org/download/?t=repo-config
vi /etc/yum.repos.d/MariaDB.repo
===
[mariadb]
name = MariaDB
# rpm.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# baseurl = https://rpm.mariadb.org/10.6/centos/$releasever/$basearch
baseurl = https://mirrors.xtom.jp/mariadb/yum/10.6/centos/$releasever/$basearch
# gpgkey = https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB
gpgkey = https://mirrors.xtom.jp/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
===
dnf update -y
dnf list mariadb-server
===
마지막 메타자료 만료확인(0:00:47 이전): 2024년 01월 29일 (월) 오후 04시 35분 39초.
사용 가능한 꾸러미
MariaDB-server.x86_64 10.6.16-1.el9 mariadb
mariadb-server.x86_64 3:10.5.22-1.el9_2 appstream
===
# '-y' 옵션으로 설치하므로 repo로 추가한 패키지 명의 대소문자 확인 후 주의하여 입력
dnf install -y MariaDB-server MariaDB-client
systemctl enable mariadb --now
netstat -nltp | egrep 'Proto|3306'
===
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 10014/mariadbd
tcp6 0 0 :::3306 :::* LISTEN 10014/mariadbd
===
mariadb 설치 후 비밀번호 없이 Enter로 접근 가능합니다. 이때 비밀번호를 설정해야 하니 아래처럼 입력하여 임시 비밀번호를 설정하거나 그냥 backup.sql 파일을 밀어 넣고 재시작해도 됩니다.
mysql -uroot -p
===
Enter password: [Enter] 입력
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.6.16-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
---
MariaDB [(none)]> set password=password('비밀번호');
Query OK, 0 rows affected (0.005 sec)
MariaDB [(none)]> quit
Bye
===
vi /etc/my.cnf.d/server.cnf
===
[mysqld]
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
log-bin = mysql-bin
server-id = 1
init_connect = 'SET collation_connection = utf8_general_ci, NAMES utf8'
character-set-server = utf8
collation-server = utf8_general_ci
expire_logs_days = 10
[mysqldump]
default-character-set = utf8
[mysql]
default-character-set = utf8
===
일단 mariadb 설정은 이 정도로 하고 pdns 설치로 넘어가겠습니다.
dnf config-manager --set-enabled crb
dnf install -y epel-release
dnf install -y pdns pdns-backend-mysql pdns-recursor
# 백업 진행
cp -arp /etc/pdns /etc/pdns_ori
cp -arp /etc/pdns-recursor /etc/pdns-recursor_ori
chmod 660 /etc/pdns/pdns.conf
vi /etc/pdns/pdns.conf
===
allow-axfr-ips=127.0.0.1
config-dir=/etc/pdns
daemon=yes
disable-axfr=no
guardian=yes
launch=gmysql
local-port=53
module-dir=/usr/lib64/pdns
#recursor=127.0.0.1:54
setgid=pdns
setuid=pdns
socket-dir=/var/run/pdns
version-string=DNS
gmysql-host=localhost 또는 127.0.0.1
gmysql-user=데이터베이스명
gmysql-password=비밀번호
gmysql-dbname=계정명
gmysql-port=3306
gmysql-socket=/var/lib/mysql/mysql.sock
===
소유권을 660으로 하지 않으면 root:pdns 소유자이므로 start 시 pdns.conf 파일을 읽어올 수 없어 에러가 발생합니다.
/etc/pdns/pdns.conf 설정을 전부 복원했으면 db data 복원으로 넘어갑니다.
mariadb를 mysql 백업 본으로 복원 시 유의할 점은 alldump인 경우 mysql.user table이 view 정책으로 바뀌면서 오류가 발생할 수 있다는 점입니다. user view를 아래 명령어로 재생성하거나 수동으로 옮겨주어도 됩니다.
INSERT INTO `tables_priv` (`Host`, `Db`, `User`, `Table_name`, `Grantor`, `Timestamp`, `Table_priv`, `Column_priv`) VALUES ('localhost','mysql','mariadb.sys','global_priv','root@localhost','0000-00-00 00:00:00','Select,Delete','');
mariadb 10.4 이상 버전부터 패스워드 변경은 아래 명령어로 진행합니다.
set password for 'root'@'localhost' = password('비밀번호');
테이블이나 내부 쿼리 데이터가 잘 복원되었는지, user 내부 계정의 권한과 hosts도 복구되었는지 확인합니다.
mkdir /var/run/pdns
chown root.pdns /var/run/pdns
chmod 660 -R /var/run/pdns
systemctl enable pdns --now
===
이제 질의테스트를 해보겠습니다. nslookup 시 Slave 서버의 IP를 지정하여 질의합니다.
이때, 질의할 도메인이 기존 DB 백업본에 등록된 도메인인지 확인합니다.
nslookup 도메인명 Slave서버IP
mysql> change master to master_host="마스터IP", master_user="계정", master_password="비밀번호", master_port=3306, master_log_file="bin로그정보", master_log_pos=포지션_값;
mysql> start slave;
mysql> show slave status\G;