ySQL 데이터 디렉토리를 Ubuntu 18.04의 새 위치로 이동하는 방법 =========================================================================== systemctl status MySQL.서비스

ySQL 데이터 디렉토리를 Ubuntu 18.04의 새 위치로 이동하는 방법 =========================================================================== systemctl status MySQL.서비스

2022-06-01 last update

9 minutes reading Ubuntu 18.04 MySQL Databases Ubuntu Block Storage Storage

소개


데이터베이스는 시간의 추이에 따라 증가하고, 때로는 파일 시스템의 공간을 초과할 수도 있다.입출력이 운영 체제의 나머지 부분과 동일한 파티션에 있는 경우에도 입출력 경합이 발생할 수 있습니다.RAID, 네트워크 블록 스토리지 및 기타 장치는 이중화 및 기타 필요한 기능을 제공합니다.이 강좌는 더 많은 공간을 추가하고 성능을 최적화하는 방법을 평가하거나 다른 저장 기능을 이용하고자 하는 경우에도 MySQL의 데이터 디렉터리를 재배치할 수 있도록 안내합니다.

선결 조건


이 안내서를 작성하려면 다음이 필요합니다.
  • sudo 권한이 있는 비루트 사용자의 Ubuntu 18.04 서버입니다.이 권한이 있는 사용자를 설정하는 방법에 대한 자세한 내용은 Initial Server Setup with Ubuntu 18.04 설명서에서 확인할 수 있습니다.

  • MySQL 서버.아직 MySQL을 설치하지 않은 경우 How To Install MySQL on Ubuntu 18.04 설명서를 참조하십시오.
  • 이 예에서 우리는 /mnt/volume-nyc1-01에 설치된 블록 저장 장치로 데이터를 이동합니다.How To Use Block Storage on DigitalOcean 안내서에서 설정 방법을 배울 수 있습니다.
    이 설명서는 사용자가 어떤 베이스 스토리지를 사용하든 데이터 디렉토리를 새 위치로 이동하는 데 도움을 줍니다.

    1단계 - MySQL 데이터 디렉토리 이동


    MySQL의 데이터 디렉토리를 이동할 준비를 위해 관리 자격 증명을 사용하여 대화식 MySQL 세션을 시작하여 현재 위치를 확인합니다.
    1. mysql -u root -p
    프롬프트가 나타나면 MySQL 루트 암호를 제공합니다.그런 다음 MySQL 프롬프트에서 데이터 디렉토리를 선택합니다.
    1. select @@datadir;
    Output
    +-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
    이 출력은 MySQL이 기본 데이터 디렉터리/var/lib/mysql/,를 사용하도록 구성되어 있음을 확인하므로 디렉터리를 이동해야 합니다.확인 후 모니터를 벗어나려면 exit 를 입력합니다.
    데이터 무결성을 보장하기 위해 실제 데이터 디렉토리를 변경하기 전에 MySQL을 종료합니다.
    1. sudo systemctl stop mysql
    systemctl 모든 서비스 관리 명령의 결과가 표시되지 않으므로 성공하려면 다음 명령을 사용합니다.
    1. sudo systemctl status mysql
    출력의 마지막 줄에서 서버가 중지되었음을 알려주면 서버가 종료되었는지 확인할 수 있습니다.
    Output
    . . . Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.
    현재 서버가 종료되었습니다. 우리는 rsync 를 사용하여 기존 데이터베이스 디렉터리를 새 위치로 복사할 것입니다.-a 로고를 사용하여 권한 및 기타 디렉터리 속성을 보존하고 -v 상세한 출력을 제공하여 진도를 추적할 수 있습니다.
    참고: 디렉터리에 뒤따르는 슬래시가 없는지 확인하십시오. 탭을 사용하면 슬래시가 추가될 수 있습니다.뒤따르는 슬래시가 있는 경우 rsync 디렉토리의 컨텐트를 포함 mysql 디렉토리로 전송하지 않고 마운트 지점에 덤프합니다.
    1. sudo rsync -av /var/lib/mysql /mnt/volume-nyc1-01
    완료rsync 후 현재 폴더의 이름을 로 변경합니다.bak는 이사가 성공할 때까지 연기하고 보류합니다.이름을 바꾸면 새 위치의 파일이 헷갈릴 수 있습니다.
    1. sudo mv /var/lib/mysql /var/lib/mysql.bak
    이제 우리는 주의력을 설정으로 돌릴 준비를 하고 있다.

    2단계 - 새 데이터 위치 지정


    MySQL에는 구성 값을 덮어쓸 수 있는 몇 가지 방법이 있습니다.기본적으로 datadir 파일의 /var/lib/mysql/etc/mysql/mysql.conf.d/mysqld.cnf 로 설정됩니다.새 데이터 디렉토리를 반영하려면 이 파일을 편집합니다.
    1. sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    datadir=로 시작하는 선을 찾고 다음 경로를 변경하여 새 위치를 반영합니다.
    우리의 예에서 업데이트된 파일은 다음과 같다.
    /etc/mysql/mysql.conf.d/mysqld.회사 명
    . . .
    datadir=/mnt/volume-nyc1-01/mysql
    . . .
    
    이것은 MySQL을 다시 시작하는 정확한 시기인 것 같지만, 우리가 성공적으로 완성하기 전에 설정해야 할 것이 하나 더 있습니다.

    3단계 - AppArmor 액세스 제어 규칙 구성


    AppArmor에 MySQL이 기본 디렉터리와 새 위치 사이에 별명을 만들어서 새 디렉터리에 쓸 수 있도록 알려야 합니다.이 작업을 수행하려면 AppArmoralias 파일을 편집합니다.
    1. sudo nano /etc/apparmor.d/tunables/alias
    파일 하단에 다음 별칭 규칙을 추가합니다.
    . . .
    [label /etc/apparmor.d/tunables/alias]
    alias /var/lib/mysql/ -> /mnt/volume-nyc1-01/mysql/,
    . . .
    
    변경 사항을 적용하려면 AppArmor를 다시 시작하십시오.
    1. sudo systemctl restart apparmor
    참고 AppArmor 구성 단계를 건너뛰면 다음과 같은 오류 메시지가 나타납니다.
    Output
    Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
    systemctljournalctl의 출력은 다음과 같습니다.
    Output
    Jul 18 11:03:24 ubuntu-512mb-nyc1-01 systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE
    메시지가 AppArmor와 데이터 디렉터리 사이에 현저하게 연결되지 않았기 때문에 이 오류를 해결하는 데 시간이 좀 걸릴 수 있습니다.

    단계 4 - MySQL 재시작


    다음 단계는 MySQL을 시작하는 것이지만 이렇게 하면 또 다른 오류가 발생합니다.이번에는 스크립트mysql-systemd-start가 AppArmor 문제가 아닌 두 기본 경로와 일치하는 디렉터리-d나 기호 링크-L가 있는지 확인하기 때문에 오류가 발생합니다.찾을 수 없는 경우 실패:
    /usr/share/mysql/mysql 시스템 시작
    . . .
    if [ ! -d /var/lib/mysql ] && [ ! -L /var/lib/mysql ]; then
     echo "MySQL data dir not found at /var/lib/mysql. Please create one."
     exit 1
    fi
    
    if [ ! -d /var/lib/mysql/mysql ] && [ ! -L /var/lib/mysql/mysql ]; then
     echo "MySQL system database not found. Please run mysql_install_db tool."
     exit 1
    fi
    
    . . .
    
    
    서버를 시작하려면 이것들이 필요하기 때문에, 스크립트의 환경 검사를 통해 최소한의 디렉터리 구조를 만들 것입니다.
    1. sudo mkdir /var/lib/mysql/mysql -p
    이제 MySQL을 시작할 준비가 되었습니다.
    1. sudo systemctl start mysql
    2. sudo systemctl status mysql
    새 데이터 디렉토리가 사용 중인지 확인하려면 MySQL 모니터를 시작합니다.
    1. mysql -u root -p
    데이터 디렉토리의 값을 다시 보려면 다음과 같이 하십시오.
    Output
    +----------------------------+ | @@datadir | +----------------------------+ | /mnt/volume-nyc1-01/mysql/ | +----------------------------+ 1 row in set (0.01 sec)
    이제 MySQL을 다시 시작하고 새 위치를 사용하고 있는지 확인하십시오. 이 기회를 빌려 데이터베이스 기능이 모두 갖추어져 있는지 확인하십시오.기존 데이터의 무결성을 확인한 후 백업 데이터 디렉토리를 제거할 수 있습니다.
    1. sudo rm -Rf /var/lib/mysql.bak
    마지막으로 MySQL을 다시 시작하여 제대로 작동하는지 확인합니다.
    1. sudo systemctl restart mysql
    2. sudo systemctl status mysql

    결론


    이 강좌에서 우리는 MySQL의 데이터 디렉터리를 새로운 위치로 이동하고 Ubuntu의 AppArmor ACL을 업데이트하여 조정에 적응하도록 합니다.비록 우리가 사용하는 것은 블록 저장 장치이지만, 이곳의 설명은 데이터 디렉터리의 위치를 재정의하는 데 적합해야 하며, 하부 기술이 어떻든지 간에.
    MySQL 데이터 디렉토리 관리에 대한 자세한 내용은 MySQL 공식 문서의 다음 섹션을 참조하십시오.
  • The Mysql Data Directory
  • Setting Up Multiple Data Directories