7.3. MySQL 사용
MySQL 서버는 빠르고 강력한 오픈 소스 데이터베이스 서버입니다. MySQL 은 데이터를 구조화된 정보로 변환하고 데이터에 액세스하기 위한 SQL 인터페이스를 제공하는 관계형 데이터베이스입니다. 여러 스토리지 엔진 및 플러그인뿐만 아니라 GIS(Gyge Information System) 및 JSON(JavaScript Object Notation) 기능이 포함되어 있습니다.
RHEL 시스템에 MySQL 을 설치하고 구성하는 방법, MySQL 데이터를 백업하는 방법, 이전 MySQL 버전에서 마이그레이션하는 방법, MySQL 을 복제하는 방법을 알아봅니다.
7.3.1. MySQL 설치 링크 복사링크가 클립보드에 복사되었습니다!
RHEL 8에서 MySQL 8.0 서버는 mysql:8.0 모듈 스트림으로 사용할 수 있습니다.
충돌하는 RPM 패키지로 인해 RHEL 8에서 MySQL 및 MariaDB 데이터베이스 서버를 병렬로 설치할 수 없습니다. 컨테이너에서 병렬로 MySQL 및 MariaDB 데이터베이스 서버를 사용할 수 있습니다. 컨테이너에서 여러 MySQL 및 MariaDB 버전 실행을 참조하십시오.
MySQL 을 설치하려면 다음 절차를 사용하십시오.
절차
mysql모듈에서8.0스트림(버전)을 선택하고server프로필을 지정하여 MySQL 서버 패키지를 설치합니다.yum module install mysql:8.0/server
# yum module install mysql:8.0/serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysqld서비스를 시작합니다.systemctl start mysqld.service
# systemctl start mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 부팅 시
mysqld서비스가 시작되도록 활성화합니다.systemctl enable mysqld.service
# systemctl enable mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 권장 사항: MySQL 을 설치할 때 보안을 개선하려면 다음 명령을 실행합니다.
mysql_secure_installation
$ mysql_secure_installationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은 완전히 대화형 스크립트를 시작하여 프로세스의 각 단계를 입력하라는 메시지를 표시합니다. 이 스크립트를 사용하면 다음과 같은 방법으로 보안을 개선할 수 있습니다.
- root 계정의 암호 설정
- 익명 사용자 제거
- 원격 루트 로그인 허용(로컬 호스트 외부)
7.3.2. 컨테이너에서 여러 MySQL 및 MariaDB 버전 실행 링크 복사링크가 클립보드에 복사되었습니다!
동일한 호스트에서 MySQL 과 MariaDB 를 모두 실행하려면 충돌하는 RPM 패키지로 인해 이러한 데이터베이스 서버를 병렬로 설치할 수 없기 때문에 컨테이너에서 실행합니다.
이 절차에서는 예를 들어 MySQL 8.0 및 MariaDB 10.5 가 포함되어 있지만 Red Hat Ecosystem Catalog에서 사용할 수 있는 MySQL 또는 MariaDB 컨테이너 버전을 사용할 수 있습니다.
사전 요구 사항
-
container-tools모듈이 설치되어 있습니다.
프로세스
Red Hat 고객 포털 계정을 사용하여
registry.redhat.io레지스트리에 인증합니다.podman login registry.redhat.io
# podman login registry.redhat.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 컨테이너 레지스트리에 이미 로그인한 경우 이 단계를 건너뜁니다.
컨테이너에서 MySQL 8.0 을 실행합니다.
podman run -d --name <container_name> -e MYSQL_ROOT_PASSWORD=<mysql_root_password> -p <host_port_1>:3306 rhel8/mysql-80
$ podman run -d --name <container_name> -e MYSQL_ROOT_PASSWORD=<mysql_root_password> -p <host_port_1>:3306 rhel8/mysql-80Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 컨테이너 이미지 사용에 대한 자세한 내용은 Red Hat Ecosystem Catalog 를 참조하십시오.
컨테이너에서 MariaDB 10.5 를 실행합니다.
podman run -d --name <container_name> -e MYSQL_ROOT_PASSWORD=<mariadb_root_password> -p <host_port_2>:3306 rhel8/mariadb-105
$ podman run -d --name <container_name> -e MYSQL_ROOT_PASSWORD=<mariadb_root_password> -p <host_port_2>:3306 rhel8/mariadb-105Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 컨테이너 이미지 사용에 대한 자세한 내용은 Red Hat Ecosystem Catalog 를 참조하십시오.
컨테이너에서 MariaDB 10.11 을 실행합니다.
podman run -d --name <container_name> -e MYSQL_ROOT_PASSWORD=<mariadb_root_password> -p <host_port_3>:3306 rhel8/mariadb-1011
$ podman run -d --name <container_name> -e MYSQL_ROOT_PASSWORD=<mariadb_root_password> -p <host_port_3>:3306 rhel8/mariadb-1011Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 컨테이너 이미지 사용에 대한 자세한 내용은 Red Hat Ecosystem Catalog 를 참조하십시오.
참고두 데이터베이스 서버의 컨테이너 이름과 호스트 포트는 달라야 합니다.
클라이언트가 네트워크의 데이터베이스 서버에 액세스할 수 있도록 하려면 방화벽에서 호스트 포트를 엽니다.
firewall-cmd --permanent --add-port={<host_port>/tcp,<host_port>/tcp,...} firewall-cmd --reload# firewall-cmd --permanent --add-port={<host_port>/tcp,<host_port>/tcp,...} # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
실행 중인 컨테이너에 대한 정보를 표시합니다.
podman ps
$ podman psCopy to Clipboard Copied! Toggle word wrap Toggle overflow 데이터베이스 서버에 연결하고 root로 로그인합니다.
mysql -u root -p -h localhost -P <host_port> --protocol tcp
# mysql -u root -p -h localhost -P <host_port> --protocol tcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.3. MySQL 구성 링크 복사링크가 클립보드에 복사되었습니다!
네트워킹을 위해 MySQL 서버를 구성하려면 다음 절차를 사용하십시오.
절차
/etc/my.cnf.d/mysql-server.cnf파일의[mysqld]섹션을 편집합니다. 다음 구성 지시문을 설정할 수 있습니다.bind-address- 서버가 수신 대기하는 주소입니다. 가능한 옵션은 다음과 같습니다.- 호스트 이름
- IPv4 주소
- IPv6 주소
skip-networking- 서버가 TCP/IP 연결을 수신하는지 여부를 제어합니다. 가능한 값은 다음과 같습니다.- 0 - 모든 클라이언트 수신 대기
- 1 - 로컬 고객만 청취
-
port- MySQL 이 TCP/IP 연결을 수신 대기하는 포트입니다.
mysqld서비스를 다시 시작합니다.systemctl restart mysqld.service
# systemctl restart mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.4. MySQL 서버에서 TLS 암호화 설정 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 MySQL 은 암호화되지 않은 연결을 사용합니다. 보안 연결의 경우 MySQL 서버에서 TLS 지원을 활성화하고 암호화된 연결을 설정하도록 클라이언트를 구성합니다.
7.3.4.1. MySQL 서버에 CA 인증서, 서버 인증서 및 개인 키 배치 링크 복사링크가 클립보드에 복사되었습니다!
MySQL 서버에서 TLS 암호화를 활성화하려면 먼저 CA(인증 기관) 인증서, 서버 인증서 및 MySQL 서버에 개인 키를 저장합니다.
사전 요구 사항
Privacy Enhanced mail (PEM) 형식의 다음 파일이 서버에 복사되었습니다.
-
서버의 개인 키:
server.example.com.key.pem -
서버 인증서:
server.example.com.crt.pem -
CA(인증 기관) 인증서:
ca.crt.pem
개인 키 및 CSR(인증서 서명 요청) 생성 및 CA에서 인증서를 요청하는 방법에 대한 자세한 내용은 CA 설명서를 참조하십시오.
-
서버의 개인 키:
프로세스
/etc/pki/tls/certs/디렉터리에 CA 및 서버 인증서를 저장합니다.mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/ mv <path>/ca.crt.pem /etc/pki/tls/certs/
# mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/ # mv <path>/ca.crt.pem /etc/pki/tls/certs/Copy to Clipboard Copied! Toggle word wrap Toggle overflow MySQL 서버가 파일을 읽을 수 있도록 하는 CA 및 서버 인증서에 대한 권한을 설정합니다.
chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem
# chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 인증서는 보안 연결이 설정되기 전에 통신의 일부이므로 모든 클라이언트는 인증 없이 이를 검색할 수 있습니다. 따라서 CA 및 서버 인증서 파일에 대한 엄격한 권한을 설정할 필요가 없습니다.
서버의 개인 키를
/etc/pki/tls/private/디렉터리에 저장합니다.mv <path>/server.example.com.key.pem /etc/pki/tls/private/
# mv <path>/server.example.com.key.pem /etc/pki/tls/private/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서버의 개인 키에 대한 보안 권한을 설정합니다.
chmod 640 /etc/pki/tls/private/server.example.com.key.pem chgrp mysql /etc/pki/tls/private/server.example.com.key.pem
# chmod 640 /etc/pki/tls/private/server.example.com.key.pem # chgrp mysql /etc/pki/tls/private/server.example.com.key.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 권한이 없는 사용자가 개인 키에 액세스할 수 있는 경우 MySQL 서버에 대한 연결이 더 이상 안전하지 않습니다.
SELinux 컨텍스트를 복원합니다.
restorecon -Rv /etc/pki/tls/
# restorecon -Rv /etc/pki/tls/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.4.2. MySQL 서버에서 TLS 구성 링크 복사링크가 클립보드에 복사되었습니다!
보안을 강화하려면 MySQL 서버에서 TLS 지원을 활성화합니다. 결과적으로 클라이언트는 TLS 암호화를 사용하여 서버와 함께 데이터를 전송할 수 있습니다.
사전 요구 사항
- MySQL 서버를 설치했습니다.
-
mysqld서비스가 실행 중입니다. Privacy Enhanced mail (PEM) 형식의 다음 파일은 서버에 존재하며
mysql사용자가 읽을 수 있습니다.-
서버의 개인 키:
/etc/pki/tls/private/server.example.com.key.pem -
서버 인증서:
/etc/pki/tls/certs/server.example.com.crt.pem -
CA(인증 기관) 인증서
/etc/pki/tls/certs/ca.crt.pem
-
서버의 개인 키:
- 서버 인증서의 제목 고유 이름(DN) 또는 SAN(주체 대체 이름) 필드는 서버의 호스트 이름과 일치합니다.
프로세스
/etc/my.cnf.d/mysql-server-tls.cnf파일을 만듭니다.다음 콘텐츠를 추가하여 개인 키, 서버 및 CA 인증서에 대한 경로를 구성합니다.
[mysqld] ssl_key = /etc/pki/tls/private/server.example.com.key.pem ssl_cert = /etc/pki/tls/certs/server.example.com.crt.pem ssl_ca = /etc/pki/tls/certs/ca.crt.pem
[mysqld] ssl_key = /etc/pki/tls/private/server.example.com.key.pem ssl_cert = /etc/pki/tls/certs/server.example.com.crt.pem ssl_ca = /etc/pki/tls/certs/ca.crt.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow CRL(Certificate Revocation List)이 있는 경우 이를 사용하도록 MySQL 서버를 구성합니다.
ssl_crl = /etc/pki/tls/certs/example.crl.pem
ssl_crl = /etc/pki/tls/certs/example.crl.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 암호화 없이 연결 시도를 거부합니다. 이 기능을 활성화하려면 다음을 추가합니다.
require_secure_transport = on
require_secure_transport = onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 서버가 지원해야 하는 TLS 버전을 설정합니다. 예를 들어 TLS 1.3만 지원하려면 다음을 추가합니다.
tls_version = TLSv1.3
tls_version = TLSv1.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기본적으로 서버는 TLS 1.2 및 TLS 1.3을 지원합니다.
mysqld서비스를 다시 시작합니다.systemctl restart mysqld.service
# systemctl restart mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
문제 해결을 간소화하려면 TLS 암호화를 사용하도록 로컬 클라이언트를 구성하기 전에 MySQL 서버에서 다음 단계를 수행합니다.
이제 MySQL 에 TLS 암호화가 활성화되어 있는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 특정 TLS 버전만 지원하도록 MySQL 서버를 구성한 경우
tls_version변수를 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서버가 올바른 CA 인증서, 서버 인증서 및 개인 키 파일을 사용하는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.4.3. 특정 사용자 계정에 대해 TLS 암호화 연결 필요 링크 복사링크가 클립보드에 복사되었습니다!
민감한 데이터에 액세스할 수 있는 사용자는 항상 TLS 암호화 연결을 사용하여 네트워크를 통해 암호화되지 않은 데이터를 보내지 않도록 해야 합니다.
모든 연결(require_secure_transport = on)에 보안 전송이 필요한 서버에서 구성할 수 없는 경우, TLS 암호화를 요구하도록 개별 사용자 계정을 구성합니다.
사전 요구 사항
- MySQL 서버에는 TLS 지원이 활성화되어 있습니다.
- 보안 전송을 요구하도록 구성하는 사용자가 있습니다.
- CA 인증서는 클라이언트에 저장됩니다.
프로세스
관리 사용자로 MySQL 서버에 연결합니다.
mysql -u root -p -h server.example.com
# mysql -u root -p -h server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 관리 사용자에게 원격으로 서버에 액세스할 수 있는 권한이 없는 경우 MySQL 서버에서 명령을 수행하고
localhost에 연결합니다.REQUIRE SSL절을 사용하여 사용자가 TLS 암호화 연결을 사용하여 연결해야 합니다.MySQL [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;
MySQL [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
TLS 암호화를 사용하여 서버에
example사용자로 연결합니다.mysql -u example -p -h server.example.com
# mysql -u example -p -h server.example.com ... MySQL [(none)]>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 오류가 표시되지 않고 대화형 MySQL 콘솔에 액세스할 수 있는 경우 TLS와의 연결에 성공합니다.
기본적으로 클라이언트는 서버에서 제공하는 경우 TLS 암호화를 자동으로 사용합니다. 따라서
--ssl-ca=ca.crt.pem및--ssl-mode=VERIFY_IDENTITY옵션은 필요하지 않지만 이러한 옵션을 사용하여 클라이언트는 서버 ID를 확인하므로 보안을 개선합니다.TLS가 비활성화된 사용자로 연결을 시도합니다.
mysql -u example -p -h server.example.com --ssl-mode=DISABLED
# mysql -u example -p -h server.example.com --ssl-mode=DISABLED ERROR 1045 (28000): Access denied for user 'example'@'server.example.com' (using password: YES)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 사용자에게는 TLS가 필요하지만 비활성화됨(
--ssl-mode=DISABLED)이므로 서버에서 로그인 시도를 거부했습니다.
7.3.5. MySQL 클라이언트에서 CA 인증서 검증으로 TLS 암호화 글로벌 활성화 링크 복사링크가 클립보드에 복사되었습니다!
MySQL 서버가 TLS 암호화를 지원하는 경우 보안 연결만 설정하고 서버 인증서를 확인하도록 클라이언트를 구성합니다. 다음 절차에서는 서버의 모든 사용자에 대해 TLS 지원을 활성화하는 방법을 설명합니다.
7.3.5.1. 기본적으로 TLS 암호화를 사용하도록 MySQL 클라이언트 구성 링크 복사링크가 클립보드에 복사되었습니다!
RHEL에서 MySQL 클라이언트가 TLS 암호화를 사용하도록 전역적으로 구성하고 서버 인증서의 CN(일반 이름)이 사용자가 연결하는 호스트 이름과 일치하는지 확인할 수 있습니다. 이렇게 하면 메시지 가로채기(man-in-the-middle) 공격이 방지됩니다.
사전 요구 사항
- MySQL 서버에는 TLS 지원이 활성화되어 있습니다.
-
CA 인증서는 클라이언트의
/etc/pki/tls/certs/ca.crt.pem파일에 저장됩니다.
프로세스
다음 콘텐츠를 사용하여
/etc/my.cnf.d/mysql-client-tls.cnf파일을 만듭니다.[client] ssl-mode=VERIFY_IDENTITY ssl-ca=/etc/pki/tls/certs/ca.crt.pem
[client] ssl-mode=VERIFY_IDENTITY ssl-ca=/etc/pki/tls/certs/ca.crt.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이러한 설정은 MySQL 클라이언트가 TLS 암호화를 사용하고 클라이언트가 서버 인증서의 CN(
ssl-mode=VERIFY_IDENTITY)과 호스트 이름을 비교함을 정의합니다. 또한 CA 인증서의 경로를 지정합니다(ssl-ca).
검증
호스트 이름을 사용하여 서버에 연결하고 서버 상태를 표시합니다.
mysql -u root -p -h server.example.com -e status
# mysql -u root -p -h server.example.com -e status ... SSL: Cipher in use is TLS_AES_256_GCM_SHA384Copy to Clipboard Copied! Toggle word wrap Toggle overflow SSL항목에 사용 중인Cipher가 있는 경우…연결이 암호화됩니다.이 명령에서 사용하는 사용자에게는 원격으로 인증할 수 있는 권한이 있습니다.
연결하는 호스트 이름이 서버의 TLS 인증서의 호스트 이름과 일치하지 않으면
ssl-mode=VERIFY_IDENTITY매개변수로 인해 연결이 실패합니다. 예를 들어localhost에 연결하는 경우 다음을 수행합니다.mysql -u root -p -h localhost -e status
# mysql -u root -p -h localhost -e status ERROR 2026 (HY000): SSL connection error: error:0A000086:SSL routines::certificate verify failedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.6. MySQL 데이터 백업 링크 복사링크가 클립보드에 복사되었습니다!
MySQL 데이터베이스에서 데이터를 백업하는 두 가지 주요 방법이 있습니다.
- 논리 백업
논리적 백업은 데이터를 복원하는 데 필요한 SQL 문으로 구성됩니다. 이 유형의 백업은 일반 텍스트 파일에 정보와 레코드를 내보냅니다.
물리적 백업에 대한 논리적 백업의 주요 장점은 이식성과 유연성입니다. 물리적 백업에서는 데이터를 다른 하드웨어 구성, MySQL 버전 또는 DBMS(데이터베이스 관리 시스템)에서 복원할 수 있습니다.
논리 백업은
mysqld.service가 실행 중인 경우에만 수행할 수 있습니다. 논리 백업에는 로그 및 구성 파일이 포함되지 않습니다.- 물리적 백업
물리적 백업은 콘텐츠를 저장하는 파일 및 디렉터리의 사본으로 구성됩니다.
물리적 백업은 논리 백업에 비해 다음과 같은 이점이 있습니다.
- 출력이 더 컴팩트합니다.
- 백업 크기가 작아집니다.
- 백업 및 복원 속도가 빨라집니다.
백업에는 로그 및 구성 파일이 포함됩니다.
물리적 백업은
mysqld.service가 실행 중이 아니거나 백업 중 변경을 방지하기 위해 데이터베이스의 모든 테이블이 잠겼을 때 수행해야 합니다.
다음 MySQL 백업 방법 중 하나를 사용하여 MySQL 데이터베이스의 데이터를 백업할 수 있습니다.
-
mysqldump를 사용한 논리 백업 - 파일 시스템 백업
- 백업 솔루션으로 복제
7.3.6.1. mysqldump를 사용하여 논리 백업 수행 링크 복사링크가 클립보드에 복사되었습니다!
mysqldump 클라이언트는 백업 목적으로 데이터베이스 또는 데이터베이스 컬렉션을 덤프하거나 다른 데이터베이스 서버로 전송하는 데 사용할 수 있는 백업 유틸리티입니다. mysqldump 의 출력은 일반적으로 서버 테이블 구조를 다시 만들거나, 데이터 구조를 채우거나, 둘 다로 채우는 SQL 문으로 구성됩니다. mysqldump 는 XML 및 delimited 텍스트 형식(예: CSV)을 포함하여 다른 형식으로 파일을 생성할 수도 있습니다.
mysqldump 백업을 수행하려면 다음 옵션 중 하나를 사용할 수 있습니다.
- 하나 이상의 선택된 데이터베이스 백업
- 모든 데이터베이스 백업
- 하나의 데이터베이스에서 테이블 하위 집합 백업
프로세스
단일 데이터베이스를 덤프하려면 다음을 실행합니다.
mysqldump [options] --databases db_name > backup-file.sql
# mysqldump [options] --databases db_name > backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 여러 데이터베이스를 한 번에 덤프하려면 다음을 실행합니다.
mysqldump [options] --databases db_name1 [db_name2 ...] > backup-file.sql
# mysqldump [options] --databases db_name1 [db_name2 ...] > backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 데이터베이스를 덤프하려면 다음을 실행합니다.
mysqldump [options] --all-databases > backup-file.sql
# mysqldump [options] --all-databases > backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 덤프된 하나 이상의 전체 데이터베이스를 서버로 다시 로드하려면 다음을 실행합니다.
mysql < backup-file.sql
# mysql < backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 데이터베이스를 원격 MySQL 서버에 로드하려면 다음을 실행합니다.
mysql --host=remote_host < backup-file.sql
# mysql --host=remote_host < backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 하나의 데이터베이스에서 리터럴 하위 집합을 덤프하려면
mysqldump명령 끝에 선택한 테이블 목록을 추가합니다.mysqldump [options] db_name [tbl_name ...] > backup-file.sql
# mysqldump [options] db_name [tbl_name ...] > backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 하나의 데이터베이스에서 덤프된 테이블의 리터럴 하위 집합을 로드하려면 다음을 실행합니다.
mysql db_name < backup-file.sql
# mysql db_name < backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고db_name 데이터베이스는 이 시점에 있어야 합니다.
mysqldump 에서 지원하는 옵션 목록을 보려면 다음을 실행합니다.
mysqldump --help
$ mysqldump --helpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.6.2. 파일 시스템 백업 수행 링크 복사링크가 클립보드에 복사되었습니다!
MySQL 데이터 파일의 파일 시스템 백업을 생성하려면 MySQL 데이터 디렉터리의 콘텐츠를 백업 위치에 복사합니다.
현재 구성 또는 로그 파일도 백업하려면 다음 절차의 선택적 단계를 사용합니다.
프로세스
mysqld서비스를 중지합니다.systemctl stop mysqld.service
# systemctl stop mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 데이터 파일을 필요한 위치에 복사합니다.
cp -r /var/lib/mysql /backup-location
# cp -r /var/lib/mysql /backup-locationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 구성 파일을 필요한 위치에 복사합니다.
cp -r /etc/my.cnf /etc/my.cnf.d /backup-location/configuration
# cp -r /etc/my.cnf /etc/my.cnf.d /backup-location/configurationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 로그 파일을 필요한 위치에 복사합니다.
cp /var/log/mysql/* /backup-location/logs
# cp /var/log/mysql/* /backup-location/logsCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysqld서비스를 시작합니다.systemctl start mysqld.service
# systemctl start mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 백업 위치의 백업 데이터를
/var/lib/mysql디렉토리로 로드할 때mysql:mysql이/var/lib/mysql에 있는 모든 데이터의 소유자인지 확인합니다.chown -R mysql:mysql /var/lib/mysql
# chown -R mysql:mysql /var/lib/mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.6.3. 백업 솔루션으로 복제 링크 복사링크가 클립보드에 복사되었습니다!
복제는 소스 서버의 대체 백업 솔루션입니다. 소스 서버가 복제본 서버에 복제되는 경우 소스에 영향을 주지 않고 복제본에서 백업을 실행할 수 있습니다. 복제본을 종료하고 복제본에서 데이터를 백업하는 동안 소스가 계속 실행될 수 있습니다.
MySQL 데이터베이스를 복제하는 방법에 대한 지침은 MySQL 복제를 참조하십시오.
복제 자체는 충분한 백업 솔루션이 아닙니다. 복제는 하드웨어 장애로부터 소스 서버를 보호하지만 데이터 손실을 방지하지는 않습니다. 이 방법과 함께 복제본에서 다른 백업 솔루션을 사용하는 것이 좋습니다.
7.3.7. MySQL 8.0의 RHEL 8 버전으로 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
RHEL 7에는 MySQL 데이터베이스 제품군의 서버 기본 구현으로 MariaDB 5.5 가 포함되어 있습니다. RHEL 7용 Red Hat Software Collections는 MySQL 8.0 및 여러 버전의 MariaDB 를 제공합니다. RHEL 8에서는 MySQL 8.0,MariaDB 10.3 및 MariaDB 10.5 를 제공합니다.
다음 절차에서는 mysql_upgrade 유틸리티를 사용하여 MySQL 8.0 의 Red Hat Software Collections 버전에서 RHEL 8 버전으로의 마이그레이션을 설명합니다. mysql_upgrade 유틸리티는 mysql-server 패키지에서 제공합니다.
MySQL 의 Red Hat Software Collections 버전에서 소스 데이터 디렉터리는 /var/opt/rh/rh-mysql80/lib/mysql/ 입니다. RHEL 8에서는 MySQL 데이터가 /var/lib/mysql/ 디렉터리에 저장됩니다.
사전 요구 사항
- 업그레이드를 수행하기 전에 MySQL 데이터베이스에 저장된 모든 데이터를 백업하십시오.
프로세스
mysql-server패키지가 RHEL 8 시스템에 설치되어 있는지 확인합니다.yum install mysql-server
# yum install mysql-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 데이터를 복사할 때 소스 및 대상 시스템에서
mysqld서비스가 실행되지 않는지 확인합니다.systemctl stop mysqld.service
# systemctl stop mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
RHEL 7 소스 시스템의
/var/opt/rh/rh-mysql80/lib/mysql/디렉터리의 데이터를 RHEL 8 대상 시스템의/var/lib/mysql/디렉터리에 복사합니다. 대상 시스템에서 복사된 파일에 대한 적절한 권한 및 SELinux 컨텍스트를 설정합니다.
restorecon -vr /var/lib/mysql
# restorecon -vr /var/lib/mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysql:mysql이/var/lib/mysql디렉터리에 있는 모든 데이터의 소유자인지 확인합니다.chown -R mysql:mysql /var/lib/mysql
# chown -R mysql:mysql /var/lib/mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 대상 시스템에서 MySQL 서버를 시작합니다.
systemctl start mysqld.service
# systemctl start mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고: 이전 버전의 MySQL 에서는 내부 테이블을 확인하고 복구하는 데
mysql_upgrade명령이 필요했습니다. 이제 서버를 시작할 때 자동으로 수행됩니다.
7.3.8. TLS 암호화를 사용하여 MySQL 복제 링크 복사링크가 클립보드에 복사되었습니다!
MySQL 은 기본부터 고급까지 복제를 위한 다양한 구성 옵션을 제공합니다. 이 섹션에서는 GTID(글로벌 트랜잭션 식별자)를 사용하는 새로 설치된 MySQL 서버에서 MySQL 을 복제하는 트랜잭션 기반 방법을 설명합니다. GTID를 사용하면 트랜잭션 식별 및 일관성 확인이 간소화됩니다.
MySQL 에서 복제를 설정하려면 다음을 수행해야 합니다.
복제에 기존 MySQL 서버를 사용하려면 먼저 데이터를 동기화해야 합니다. 자세한 내용은 업스트림 문서를 참조하십시오.
7.3.8.1. MySQL 소스 서버 구성 링크 복사링크가 클립보드에 복사되었습니다!
MySQL 소스 서버에 필요한 구성 옵션을 설정하여 TLS 프로토콜을 통해 데이터베이스 서버에서 수행된 모든 변경 사항을 올바르게 실행하고 복제할 수 있습니다.
사전 요구 사항
- 소스 서버가 설치되어 있어야 합니다.
소스 서버에는 TLS가 설정되어 있습니다.
중요소스 및 복제본 인증서는 동일한 인증 기관에서 서명해야 합니다.
프로세스
[mysqld]섹션의/etc/my.cnf.d/mysql-server.cnf파일에 다음 옵션을 포함합니다.bind-address=source_ip_adress이 옵션은 복제본에서 소스로 만든 연결에 필요합니다.
server-id=idID 는 고유해야 합니다.
log_bin=path_to_source_server_log이 옵션은 MySQL 소스 서버의 바이너리 로그 파일의 경로를 정의합니다. 예:
log_bin=/var/log/mysql/mysql-bin.log.gtid_mode=ON이 옵션은 서버에서 GTID(글로벌 트랜잭션 식별자)를 활성화합니다.
enforce-gtid-consistency=ON서버는 GTID를 사용하여 안전하게 로깅할 수 있는 명령만 실행하여 GTID 일관성을 적용합니다.
Optional:
binlog_do_db=db_name선택한 데이터베이스만 복제하려면 이 옵션을 사용합니다. 두 개 이상의 선택한 데이터베이스를 복제하려면 각 데이터베이스를 별도로 지정합니다.
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3Copy to Clipboard Copied! Toggle word wrap Toggle overflow Optional:
binlog_ignore_db=db_name복제에서 특정 데이터베이스를 제외하려면 이 옵션을 사용합니다.
mysqld서비스를 다시 시작합니다.systemctl restart mysqld.service
# systemctl restart mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.8.2. MySQL 복제본 서버 구성 링크 복사링크가 클립보드에 복사되었습니다!
MySQL 복제본 서버에 필요한 구성 옵션을 설정하여 복제를 성공적으로 수행할 수 있습니다.
사전 요구 사항
- 복제본 서버가 설치되어 있어야 합니다.
복제본 서버에는 TLS가 설정되어 있습니다.
중요소스 및 복제본 인증서는 동일한 인증 기관에서 서명해야 합니다.
프로세스
[mysqld]섹션의/etc/my.cnf.d/mysql-server.cnf파일에 다음 옵션을 포함합니다.server-id=idID 는 고유해야 합니다.
relay-log=path_to_replica_server_logrelay 로그는 복제 중에 MySQL 복제본 서버에서 생성한 로그 파일 집합입니다.
log_bin=path_to_replica_sever_log이 옵션은 MySQL 복제본 서버의 바이너리 로그 파일의 경로를 정의합니다. 예:
log_bin=/var/log/mysql/mysql-bin.log.이 옵션은 복제본에 필요하지 않지만 강력하게 권장됩니다.
gtid_mode=ON이 옵션은 서버에서 GTID(글로벌 트랜잭션 식별자)를 활성화합니다.
enforce-gtid-consistency=ON서버는 GTID를 사용하여 안전하게 로깅할 수 있는 명령만 실행하여 GTID 일관성을 적용합니다.
log-replica-updates=ON이 옵션을 사용하면 소스 서버에서 수신된 업데이트가 복제본의 바이너리 로그에 기록됩니다.
skip-replica-start=ON이 옵션을 사용하면 복제본 서버가 시작될 때 복제 스레드가 시작되지 않습니다.
Optional:
binlog_do_db=db_name특정 데이터베이스만 복제하려면 이 옵션을 사용합니다. 둘 이상의 데이터베이스를 복제하려면 각 데이터베이스를 별도로 지정합니다.
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3Copy to Clipboard Copied! Toggle word wrap Toggle overflow Optional:
binlog_ignore_db=db_name복제에서 특정 데이터베이스를 제외하려면 이 옵션을 사용합니다.
mysqld서비스를 다시 시작합니다.systemctl restart mysqld.service
# systemctl restart mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.8.3. MySQL 소스 서버에서 복제 사용자 생성 링크 복사링크가 클립보드에 복사되었습니다!
복제 사용자를 생성하고 복제 트래픽에 필요한 이 사용자에게 권한을 부여해야 합니다. 다음 절차에서는 적절한 권한이 있는 복제 사용자를 생성하는 방법을 보여줍니다. 소스 서버에서만 이러한 단계를 실행합니다.
사전 요구 사항
- 소스 서버는 MySQL 소스 서버 구성에 설명된 대로 설치 및 구성됩니다.
프로세스
복제 사용자를 생성합니다.
mysql> CREATE USER 'replication_user'@'replica_server_hostname' IDENTIFIED WITH mysql_native_password BY 'password';
mysql> CREATE USER 'replication_user'@'replica_server_hostname' IDENTIFIED WITH mysql_native_password BY 'password';Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자에게 복제 권한을 부여합니다.
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'replica_server_hostname';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'replica_server_hostname';Copy to Clipboard Copied! Toggle word wrap Toggle overflow MySQL 데이터베이스에서 권한 부여 테이블을 다시 로드합니다.
mysql> FLUSH PRIVILEGES;
mysql> FLUSH PRIVILEGES;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 소스 서버를 읽기 전용 상태로 설정합니다.
mysql> SET @@GLOBAL.read_only = ON;
mysql> SET @@GLOBAL.read_only = ON;Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.8.4. 소스 서버에 복제본 서버 연결 링크 복사링크가 클립보드에 복사되었습니다!
MySQL 복제본 서버에서는 자격 증명과 소스 서버의 주소를 구성해야 합니다. 다음 절차에 따라 복제본 서버를 구현합니다.
사전 요구 사항
- 소스 서버는 MySQL 소스 서버 구성에 설명된 대로 설치 및 구성됩니다.
- 복제본 서버는 MySQL 복제본 서버 구성에 설명된 대로 설치 및 구성됩니다.
- 복제 사용자를 생성했습니다. MySQL 소스 서버에서 복제 사용자 생성을 참조하십시오.
프로세스
복제본 서버를 읽기 전용 상태로 설정합니다.
mysql> SET @@GLOBAL.read_only = ON;
mysql> SET @@GLOBAL.read_only = ON;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 복제 소스를 구성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow MySQL 복제본 서버에서 복제본 스레드를 시작합니다.
mysql> START REPLICA;
mysql> START REPLICA;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 소스 및 복제본 서버에서 모두 읽기 전용 상태를 설정 해제합니다.
mysql> SET @@GLOBAL.read_only = OFF;
mysql> SET @@GLOBAL.read_only = OFF;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 디버깅을 위해 복제본 서버의 상태를 검사합니다.
mysql> SHOW REPLICA STATUS\G;
mysql> SHOW REPLICA STATUS\G;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고복제본 서버가 시작 또는 연결에 실패하면
SHOW MASTER STATUS명령의 출력에 표시된 바이너리 로그 파일 위치에 따라 특정 수의 이벤트를 건너뛸 수 있습니다. 예를 들어 정의된 위치에서 첫 번째 이벤트를 건너뜁니다.mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그런 다음 복제본 서버를 다시 시작합니다.
선택 사항: 복제본 서버에서 복제본 스레드를 중지합니다.
mysql> STOP REPLICA;
mysql> STOP REPLICA;Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.8.5. MySQL 서버에서 복제 확인 링크 복사링크가 클립보드에 복사되었습니다!
여러 MySQL 서버에 복제를 구성한 후 작동하는지 확인해야 합니다.
프로세스
소스 서버에서 예제 데이터베이스를 생성합니다.
mysql> CREATE DATABASE test_db_name;
mysql> CREATE DATABASE test_db_name;Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
test_db_name데이터베이스가 복제본 서버에서 복제되는지 확인합니다. 소스 또는 복제본 서버 중 하나에서 다음 명령을 실행하여 MySQL 서버의 바이너리 로그 파일에 대한 상태 정보를 표시합니다.
mysql> SHOW MASTER STATUS;
mysql> SHOW MASTER STATUS;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 소스에서 실행되는 트랜잭션에 대한 GTID 집합을 표시하는
Executed_Gtid_Set열은 비워 둘 수 없습니다.참고복제본 서버에서
SHOW REPLICA STATUS를 사용할 때Executed_Gtid_Set행에 동일한 GTIDs 세트가 표시됩니다.
7.3.9. MySQL 클라이언트 애플리케이션 개발 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat은 MariaDB 클라이언트 라이브러리에 대해 MySQL 클라이언트 애플리케이션을 개발하는 것이 좋습니다. 클라이언트와 서버 간의 통신 프로토콜은 MariaDB 와 MySQL 간에 호환됩니다. MariaDB 클라이언트 라이브러리는 MySQL 구현과 관련된 제한된 수의 기능을 제외하고 대부분의 일반적인 MySQL 시나리오에서 작동합니다.
MariaDB 클라이언트 라이브러리에 대해 애플리케이션을 빌드하는 데 필요한 개발 파일 및 프로그램은 mariadb-connector-c-devel 패키지에서 제공합니다.
직접 라이브러리 이름을 사용하는 대신 mariadb-connector-c-devel 패키지에 배포되는 mariadb_config 프로그램을 사용합니다. 이 프로그램을 통해 올바른 빌드 플래그가 반환됩니다.