2023. 12. 29. 11:08ㆍDB이관
최근 신규서버를 새로 세팅하면서 DB서버 의 경우 데이터는 대부분 안가져오지만 형태는 그대로 사용해야 했기에 신규 서버세팅을 하면서 스키마와 기타 트리거, 펑션, 프로시저, 뷰 등 껍데기만이라도 다 가져오면서 utf8mb3에서 utf8mb4로 변경하여 적용해야했다.
기본파일의 경우 MariaDB 공식 홈페이지에서 다운로드 받았다.
mariadb-10.6.14-linux-systemd-x86_64.tar.gz
다운로드 주소
https://mariadb.org/download/?t=mariadb&o=true&p=mariadb&r=10.6.14
그리고 centos7.9에서 테스트할땐 잘만 설치시나리오 대로 되고 하던게 Rocky8.8에서 설치를 신규로 진행할때 보안설정쪽에서 에러가 발생하기도 했다.
Rokcy8.8에서 설치시 에러발생
/usr/local/mysql/bin/mysql_secure_installation --basedir=/usr/local/mysql 보안설정을 진행하던 중
error while loading shared libraries: libncurses.so.5 와 같은 에러가 발생한다면 다음과 같이 설치해주자.
yum install -y ncurses*
설치 시나리오 시작.
파일을 다운 또는 리눅스 상으로 전송했다 라는 가정하에 설치 절차를 진행한다.
데이터 파일을 놔둘 폴더 생성
mkdir -p /home/mysql_data
설치예정 경로는 /usr/local
#압축해제
tar -xvf mariadb-10.6.14-linux-systemd-x86_64.tar.gz -C /usr/local/
#이동 및 폴더명 변경
cd /usr/local
mv mariadb-10.6.14-linux-systemd-x86_64 mariadb-10.6.14
#심볼릭 링크 생성
ln -s mariadb-10.6.14 mysql
#그룹생성
groupadd mysql
#유저 생성
useradd -s /bin/bash -g mysql mysql
리눅스 서비스로 등록하기 위한 파일생성
#시스템 파일 생성
vi /etc/systemd/system/mariadb.service
서비스파일 내용
[Unit]
Description=mariadb-10.6.14
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
[Install]
WantedBy=multi-user.target
사용하는 폴더들에 대한 소유권을 mysql계정에게 준다.
# mysql 권한설정
chown -R mysql.mysql /home/mysql_data/
chown -R mysql.mysql /usr/local/mysql
chown -R mysql.mysql /usr/local/mariadb-10.6.14
chown -R mysql.mysql /etc/systemd/system/mariadb.service
# my.cnf 파일 /etc에 위치시켜야함. (소유자가 아닌경우 소유권도 변경)
chown root:root /etc/my.cnf
# mariaDB install 수행
/usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf
# 설치 후 해당 폴더내부 root 권한을 가지기 때문에 다시 폴더권한 지정
chown -R mysql.mysql /home/mysql_data
# mariadb 데몬 reload 및 실행
systemctl daemon-reload
systemctl start mariadb
# mariadb 보안설정
/usr/local/mysql/bin/mysql_secure_installation --basedir=/usr/local/mysql
my.cnf파일에 적용된 utf8mb4 소스들(나머지들은 제외하고 utf8mb4로 적용된 부분만 간추렸다.)
[client]
default-character-set = utf8mb4
[mysqld]
###chracter
character-set-client-handshake=FALSE
init_connect = SET collation_connection = utf8mb4_general_ci
init_connect = SET NAMES utf8mb4
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
[mysqldump]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
모든 설치 이후 utf8mb4 설정 확인
show variables like 'c%';
테이블과 컬럼에 대한설정도 보고싶다면
SELECT table_name, column_name, character_set_name, collation_name
FROM information_schema.columns
WHERE table_schema = '테이블명';
덤프시 사용 팁
mysqldump를 사용하여 덤프하는건 다른 블로그들에도 많이 나와있다.
그런데 내 경우에는 테이블의 스키마만 유지해야했고 만약 autoincrement가 적용되어 있다면 그 부분들에 대해서는 초기값이 세팅되야했다. 또한 데이터를 가져오는부분에 있어서는 default 캐릭터셋으로 지정이 가능했지만 테이블 스키마는 그대로 utf8mb3로 적용되는 불상사가 발생하기도 했다.
그래서 편법으로 적용된게 다음과 같은 형태이다.
#덤프수행
/usr/local/mysql/bin/mysqldump -u root -p --single-transaction --routines --triggers -d --skip-add-drop-table --default-character-set=utf8mb4 ABC | sed 's/AUTO_INCREMENT=[0-9]*//' > /home/dump/ABC.sql
# table 스키마 utf8mb4 적용.
sed -i 's/utf8mb3/utf8mb4/g' /home/dump/ABC.sql
sed 's/AUTO_INCREMENT=[0-9]*//' 와 같은 형태로 해당 문자열을 강제로 바꿔주고 그 SQL문내에 테이블 스키마에 정의된 utf8mb3를 utf8mb4로 강제로 변경해주었다.
character_set_system 의 경우 utf8mb3로 남아있었다.
시스템 상으로 사용되는 테이블들의 경우 utf8mb3로 설정된 채 남아있는 모습을 볼 수 있는데 이 또한 설정에 따라 utf8mb4로 되야하는게 아닌가 라는 말이 나왔다.
[MariaDB] Charset 변경 utf8 -> utf8mb4
나도 찾아본 결과 해당 블로그에서는 다음과 같이 설명한다.
그런데 character_set_system은 여전히 utf8mb3로 남아있는 것을 볼 수 있는데, 이 값은 DB Server가 T 식별자(Identifier, 테이블이나 컬럼명 등)를 저장하기 위해 사용하는 character set입니다. 이 값은 사용자가 설정하거나 변경할 수 없다고 합니다.
그리고 stack overflow나 공식홈페이지에서 찾아봐도 비슷하게 설명하고 있었다.
공식홈페이지 설명
character_set_system
- Description: Character set used by the server to store identifiers, always set to utf8, or its synonym utf8mb3 starting with MariaDB 10.6. From MariaDB 10.6, the utf8 character set (and related collations) is by default an alias for utf8mb3 rather than the other way around. It can be set to imply utf8mb4 by changing the value of the old_mode system variable.
- Scope: Global
- Dynamic: No
- Data Type: string
- Default Value: utf8mb3 (>= MariaDB 10.6), utf8 (<= MariaDB 10.5)
참고주소
'DB이관' 카테고리의 다른 글
자바로 파일변환 및 쿼리문 txt생성! (0) | 2021.09.15 |
---|---|
JAVA – Value ‘0000-00-00’ can not be represented as java.sql.Timestamp 에러해결 (0) | 2021.09.15 |
MariaDB my.cnf 파일설정 (0) | 2021.09.15 |
MariaDB 데이터 insert오류관련 개인정리 (0) | 2021.09.15 |
Oracle, mariaDB 차이점 정리 (0) | 2021.09.14 |