본문 바로가기
다른 DBMS/MySQL&MariaDB

다른 서버에 Mysql 이관하기(mysql 설치,mysqldump 사용)

by 취미툰 2023. 4. 13.
반응형

이번 글을 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

 

 

재구축 완료.

 

 

반응형

댓글