이번 글을 Mysql을 다른 서버에 이관하는 방법을 정리한 글입니다.
제가 실제로 작업할 환경을 바탕으로 테스트한 내용이며, 시나리오 형식입니다.
-시나리오-
OS 모종의 이유로 재구축이 필요하게 되었습니다. OS의 버전은 동일합니다.
DBA의 입장에서 기존에 쓰던 mysql을 무사히 이관하는 방법을 테스트합니다.
정보
AS-IS OS : redhat 7.9 To-BE OS: redhat 7.9 Mysql 버전 : 5.7.25 |
OS가 동일하기 때문에, mysql 엔진과 데이터 영역을 압축해서 To-BE에 푸는 방법을 생각했습니다만, 설치시에 system상에 자동으로 등록되는 것들까지 manual하게 설정할 수 없다고 판단되어 이 방법은 사용하지 않기로 하였습니다.
실제 테스트에서 사용한 방법은 아래와 같습니다.
1.As-IS DB에서 mysqldump -A 로 백업
2.To-BE OS 에 As-IS DB와 동일한 버전의 Mysql 기본 설치
3.셋팅값 AS-IS 와 동일하게 변경
4.To-BE DB에 dump import
1.As-IS DB에서 mysqldump -A 로 백업
mysqldump --user=root --password=[password입력] -A > /grafanadata/mysql_mig_test_ysbae.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
설치파일 준비
ls -al
-rw-rw-r--. 1 vagrant vagrant 528015360 Apr 12 07:51 mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar
설치파일과 dump파일을 To-BE서버로 전송합니다.
2.To-BE OS 에 As-IS DB와 동일한 버전의 Mysql 기본 설치
설치파일 압축을 풀고 rpm을 설치합니다.
tar -xvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar
mysql-community-libs-5.7.25-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.25-1.el7.x86_64.rpm
mysql-community-embedded-5.7.25-1.el7.x86_64.rpm
mysql-community-client-5.7.25-1.el7.x86_64.rpm
mysql-community-server-5.7.25-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.25-1.el7.x86_64.rpm
mysql-community-test-5.7.25-1.el7.x86_64.rpm
mysql-community-devel-5.7.25-1.el7.x86_64.rpm
mysql-community-common-5.7.25-1.el7.x86_64.rpm
<Trouble Shooting>
아래와 같은 에러가 나오면 OS상 기존에 설치된 mariadb lib을 삭제해줍니다.
mariadb-libs is obsoleted by mysql-community-libs-5.7.25-1.el7.x86_64
mariadb-libs is obsoleted by mysql-community-libs-5.7.25-1.el7.x86_64
해결법
# rpm -qa | grep mariadb-libs
mariadb-libs-5.5.68-1.el7.x86_64
#r pm -ev --nodeps mariadb-libs-5.5.68-1.el7.x86_64
Preparing packages...
mariadb-libs-1:5.5.68-1.el7.x86_64
# rpm -qa | grep mariadb-libs
RPM 설치
1.
# rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
warning: mysql-community-common-5.7.25-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-common-5.7.25-1.e################################# [100%]
2.
# rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
warning: mysql-community-libs-5.7.25-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-libs-5.7.25-1.el7################################# [100%]
3.
# rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
warning: mysql-community-client-5.7.25-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-client-5.7.25-1.e################################# [100%]
4.
# rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm
warning: mysql-community-server-5.7.25-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-server-5.7.25-1.e################################# [100%]
5.
# rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm
warning: mysql-community-devel-5.7.25-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-devel-5.7.25-1.el################################# [100%]
DB start 및 확인
# systemctl start mysqld
# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2023-04-13 01:51:31 UTC; 5s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 28915 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 28841 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 28918 (mysqld)
CGroup: /system.slice/mysqld.service
└─28918 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
Apr 13 01:51:28 rhel7.localdomain systemd[1]: Starting MySQL Server...
Apr 13 01:51:31 rhel7.localdomain systemd[1]: Started MySQL Server.
비밀번호 변경
최초설치시에는 임시비밀번호가 부여됩니다. 임시비밀번호로 접속 후 비밀번호는 변경해줍니다.
# grep 'temporary password' /var/log/mysqld.log
2023-04-13T01:51:28.824594Z 1 [Note] A temporary password is generated for root@localhost: qqXs*9(j72/:
# mysql -uroot -p
Enter password: [임시비밀번호 입력]
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '[새 비밀번호 입력]';
mysql> flush privileges;
3.셋팅값 AS-IS 와 동일하게 변경
기존 DB에는 datadir경로가 따로 설정되어 있었고 ,binlog 설정이 되어 있었습니다.
각각 설정값을 변경하겠습니다.
DATADIR 경로 변경
1) DB 종료
# systemctl stop mysqld
2)디렉토리 생성 및 권한 부여
rsync 명령어를 통해서 기존 경로(var/lib/mysql)에 있던 데이터파일들을 새로생성한 곳으로 옮깁니다
# mkdir /grafanadata
# rsync -av /var/lib/mysql /grafanadata
# chown -R mysql:mysql /grafanadata
3)my.cnf 파일 수정
socket의 경우 AS-IS DB에는 기존경로(var/lib/mysql) 밑에 그대로 있었는데, 변경하면서 경로를 같이 변경하였습니다.
# vi /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
datadir=/grafanadata/mysql //새로운 datadir
#datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
socket=/grafanadata/mysql/mysql.sock //새로운 datadir에 socket도 변경
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/grafanadata/mysql/mysql.sock //새로운 datadir에 socket도 변경
4) 기동 및 확인
# systemctl start mysqld
DB 접속 후 확인
mysql> show variables like '%datadir%'
-> ;
+---------------+---------------------+
| Variable_name | Value |
+---------------+---------------------+
| datadir | /grafanadata/mysql/ |
+---------------+---------------------+
1 row in set (0.01 sec)
<Trouble Shooting>
설정 후 기동할때 아래와 같은 에러가 발생하면서 기동이 안되는 경우가 있습니다.
그럴때는 selinux의 설정을 변경하고 다시 start하면 됩니다.
2023-04-13T05:03:03.683968Z 0 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
해결법
# setenforce 0
# getenforce
Permissive
binlog 설정
1)To-BE 서버 변경전 logbin 상태 확인
mysql> show variables like '%log_bin%'
-> ;
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | OFF |
| log_bin_basename | |
| log_bin_index | |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-------+
2)DB 다운
# systemctl stop mysqld
3)디렉토리 생성 및 권한 추가
# mkdir -p /grafanadata/mysql/log/bin-log
# chown -R mysql:mysql /grafanadata/mysql/log/bin-log
4) my.cnf에 설정값 추가
# vi my.cnf
[mysqld]
...생략
log_bin=ON
log-bin=/grafanadata/mysql/log/bin-log/binlog
binlog_format=row
max_binlog_size=256M
expire_logs_days=7
server-id=1
5)DB 기동
# systemctl start mysqld
6)설정값 확인
mysql> show variables like '%log_bin%';
+---------------------------------+---------------------------------------------+
| Variable_name | Value |
+---------------------------------+---------------------------------------------+
| log_bin | ON |
| log_bin_basename | /grafanadata/mysql/log/bin-log/binlog |
| log_bin_index | /grafanadata/mysql/log/bin-log/binlog.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+---------------------------------------------+
4.To-BE DB에 dump import
To-BE DB에 바로 import 후 as-is 정보와 비교합니다.
# mysql -u root -p < /tmp/mysql_mig_test_ysbae.sql
재구축 완료.
'다른 DBMS > MySQL&MariaDB' 카테고리의 다른 글
Recursive 구문을 활용한 연,월 dummy 데이터 생성 (0) | 2023.08.14 |
---|---|
Full Backup본으로 테이블 복구 스크립트 만들어서 복구 (0) | 2023.06.21 |
mysql 접속시 --batch --execute --skip-column-names 옵션 사용 (0) | 2021.12.21 |
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER or SET_USER_ID privilege(s) for this operation (0) | 2021.07.05 |
테스트 숫자 데이터 넣기(seq 사용) (0) | 2021.05.31 |
댓글