SYSTEM/Software

MariaDB upgrade 10.2 to 10.7

SeonJaeLee 2022. 11. 7. 16:12
반응형

MariaDB를 업그레이드 할 일이 생겼습니다. 

 

기존에 M-S 형태로 사용하던 중 서버를 새로 구입하여 M-S-S 로 하드웨어 스펙업과 동시에 소프트웨어 버전도 업그레이드 하려고합니다. 

 

서버 설치 후 백업데이터를 통한 업그레이드 까지 진행하였으며 11월 중에 라이브서비스를 이관 할 예정이네요

 

엔진 업그레이드시 별다른 문제는 없었지만 몇몇 옵션들이 더이상 사용되지 않는 것이 확인되었으며 로그의 warning 메세지를 통해 확인 후 설정을 제거하면 됩니다. 

 

1. 환경

Version

OS : CentOS 7 to Rocky Linux 8

DB : MariaDB 10.2 to MariaDB 10.7

 

Server Setting

Old_DB : 172.16.1.11

MariaDB-M : 172.16.1.21

MariaDB-S1 : 172.16.1.22

MariaDB-S2 : 172.16.1.23

 

MariaDB Setting ( my.cnf 예시 )

[client]
socket          = /tmp/mysql.sock

[mysqld]
port = 3306
sql_mode = ""

socket = /tmp/mysql.sock
pid-file = /apps/mariadb/mysql_data/mysql.pid
datadir = /apps/mariadb/mysql_data
innodb_data_home_dir = /apps/mariadb/mysql_data
innodb_log_group_home_dir = /apps/mariadb/mysql_data

character-set-client-handshake = FALSE
character-set-server = utf8
init_connect=SET collation_connection = utf8_general_ci
init_connect = SET NAMES utf8

# Common Config
interactive_timeout = 600
join_buffer_size = 2M
max_allowed_packet = 128M
max_heap_table_size = 1G
tmp_table_size = 1G
max_connections = 2048
read_buffer_size = 1M
read_rnd_buffer_size = 1M
sort_buffer_size = 1M
max_length_for_sort_data = 1024
table_open_cache = 20000
wait_timeout = 30
open_files_limit = 65536
thread_pool_max_threads = 65536
max_connect_errors = 10000
thread_cache_size = 500
optimizer_search_depth = 12
transaction-isolation = READ-COMMITTED
lower_case_table_names = 1

skip-external-locking
skip-name-resolve
skip-host-cache

log-error=/apps/mariadb/mysql_data/mariadb-err.err

## Innodb config
slow_query_log_file = /apps/mariadb/mysql_data/mysql-slow-query.log
slow_query_log = 1
long_query_time = 3
log_warnings = 1

## Innodb config
innodb_buffer_pool_size = 64G
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT_NO_FSYNC
innodb_lock_wait_timeout = 40
innodb_log_buffer_size = 128M
innodb_log_file_size = 1G
#innodb_log_files_in_group = 5
#innodb_thread_sleep_delay = 0
innodb_fast_shutdown = 1
#innodb_thread_concurrency = 0
innodb_read_io_threads = 16
innodb_write_io_threads = 16
innodb_open_files = 32768
innodb_flush_log_at_trx_commit = 0
innodb_sort_buffer_size = 64M
innodb_online_alter_log_max_size = 2G

## Thread Pool
thread_handling = pool-of-threads
thread_pool_stall_limit = 60
thread_pool_idle_timeout = 120

## MyISAM Config
bulk_insert_buffer_size = 64M
key_buffer_size = 128M
myisam_max_sort_file_size = 4G
myisam_repair_threads = 1
myisam_sort_buffer_size = 64M

[mysqldump]
quick
max_allowed_packet = 512M

# Replication MariaDB-M
server-id = 10
max_binlog_size = 1G
expire_logs_days = 3
log-bin = /apps/mariadb/mysql_binlog/mysql-bin
binlog-format=mixed
binlog_commit_wait_usec=5000
binlog_commit_wait_count=50

# Replication MariaDB-S1
server-id = 11
relay-log = /apps/mariadb/mysql_relay/relay-log
log_slave_updates=1
read_only = 1

# Replication MariaDB-S2
server-id = 12
relay-log = /apps/mariadb/mysql_relay/relay-log
log_slave_updates=1
read_only = 1

2. Install & upgrade

Step1

MariaDB-M, MariaDB-S1, MariaDB-S2

공통작업 : 10.7 기본설치 , mariadb-backup버전이 낮을 경우 10.5버전 이후에서 캐릭터셋에 문제 발생

cd /usr/local/src
curl -LsS -O https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
sh /usr/local/src/mariadb_repo_setup --mariadb-server-version=10.7
dnf install mariadb-server mariadb-client mariadb-backup qpress
systemctl enable mariadb
systemctl stop mariadb
mkdir -p /apps/mariadb/{mysql_data,mysql_binlog}
chown -R mysql.mysql /apps/mariadb

 

Step2

OLD_DB

Mariabackup 사용

mariabackup --backup --user=root --password='password' --target-dir=/apps/mariadb/backup
cd /apps/mariadb
tar cvf - backup | ssh -p 9922 root@172.16.1.21 tar xf - -C /apps/mariadb/


 

MariaDB-M

10.2 to 10.3 ( 10.7이 설치되어잇는 MariaDB-M을 10.3으로 다운그레이드 )

dnf remove mariadb-server
mariadb_repo_setup --mariadb-server-version=10.3
dnf install mariadb-server

my.cnf 수정 ( 상단 예시 my.cnf 참고하여 각 서버에 맞게 수정 )

백업데이터 리스토어

cd /apps/mariadb
cd backup
mariabackup --decompress --remove-original --target-dir ./
mariabackup --prepare --target-dir=./
mariabackup --copy-back --target-dir=/apps/mariadb/backup --datadir=/apps/mariadb/mysql_data/ --innodb-data-home-dir=/apps/mariadb/mysql_data

chown -R /apps/mariadb
systemctl start mariadb
mysql_upgrade -uroot -p

10.3 to 10.4

systemctl stop mariadb
dnf -y remove mariadb-server
cd /usr/local/src
sh mariadb_repo_setup --mariadb-server-version=10.4
dnf -y install mariadb-server
systemctl start mariadb
mysql_upgrade -uroot -p

10.4 to 10.5

systemctl stop mariadb
dnf -y remove mariadb-server
sh mariadb_repo_setup --mariadb-server-version=10.5
dnf -y install mariadb-server
systemctl start mariadb
mysql_upgrade -uroot -p

10.5 to 10.6

systemctl stop mariadb
dnf -y remove mariadb-server
sh mariadb_repo_setup --mariadb-server-version=10.6
dnf -y install mariadb-server
systemctl start mariadb
mysql_upgrade -uroot -p

10.6 to 10.7

systemctl stop mariadb
dnf -y remove mariadb-server
sh mariadb_repo_setup --mariadb-server-version=10.7
dnf -y install mariadb-server
systemctl start mariadb
mysql_upgrade -uroot -p

 

 

Step3

Replication

MariaDB-M

rm -rf /apps/mariadb/backup*
mariabackup --backup --user=root --password='패스워드' --target-dir=/apps/mariadb/backup
cd /apps/mariadb
tar cvf - backup | ssh -p 9922 root@172.16.1.21 tar xf - -C /apps/mariadb/

 

MariaDB-S1

cd /apps/mariadb/
mariabackup --prepare --target-dir=/apps/mariadb/backup
bariabackup --copy-back--target-dir=/apps/mariadb/backup --datadir=/apps/mariadb/mysql_data/ --innodb-data-home-dir=/apps/mariadb/mysql_Data
mkdir /apps/mariadb/mysql_relay
chown -R mysql.mysql /apps/mariadb

mysql shell

cat /apps/mariadb/mysql_data/xtrabackup_info ( binlog_pos Value check )
mysql -uroot -p
CHANGE MASTER TO MASTER_HOST='172.16.1.21',MASTER_PORT=3306 , MASTER_USER='복제계정',MASTER_PASSWORD='패스워드', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=328;
start slave;
show slave status\G;

MariaDB-S2

S1과 동일

 

 

3. ETC

1. 설치 과정에서 mariabackup 버전으로 인한 캐릭터셋 이슈와 기본적인 selinux firewalld iptalbes 등은 설명하지 않았습니다. 

 

2. mariadb.service 자체 보안중 /var/경로 또는 /home경로일 경우 

vi /usr/lib/systemd/system/mariadb.service 
ProtectHome=true > ProtectHome=false 로 변경 후 
systemctl daemon-reload 
systemctl start mariadb

 

3. 업그레이드시 하나의 버전을 올릴때마다 error로그를 확인 하는 것은 기본입니다. 

 

4. 10.6까지 작업한 분이 순차업그레이드를 하는것이 정신 건강에 좋다고 하여 버전을 건너뛰지 않고 차례대로 진행했으며 여러 단계를 넘는것이 불가능하다는 말은 아니니 참고하시기 바랍니다.

 

 

반응형