ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Vitess] mysqlctld 기본적인 사용법 알아보기
    Database/Vitess 2023. 1. 31. 05:45
    728x90
    반응형

    - 목차

     

    들어가며.

    VitessMySQL 을 확장 가능하게 관리해주는 강력한 도구입니다.

    mysqlctldVitess 에서 MySQL 인스턴스를 제어하고 관리하는 데 사용되는 유틸리티입니다.

    이를 통해 MySQL 서버를 시작하거나 중지하고, 데이터 디렉토리를 관리할 수 있습니다.

    그리고 mysqld_safe 처럼 MySQL 인스턴스의 장애시 재시작과 같은 Failover 의 역할 또한 수행합니다.

     

    이번 글에서는 mysqlctld 의 사용법을 간단하게 정리해보겠습니다.

    참고로 Dockervitess/lite:v17.0.7-mysql80 이미지를 통해서 전반적인 실습을 진행하도록 하겠습니다.

     

    https://hub.docker.com/r/vitess/lite

     

    https://hub.docker.com/r/vitess/lite

     

    hub.docker.com

     

     

     

    Vitess MySQL Instance 실행하기.

    Vitess 에서 MySQL 인스턴스를 실행하려면 mysqlctld 명령어를 사용합니다.

    mysqlctldMySQL 서버 프로세스인 mysqld를 제어하고 관리하는 역할을 하며, 실행 시 --tablet_uid 옵션을 통해 각 MySQL 인스턴스를 구분합니다.

     

    < mysqlctld 의 기본적인 사용법 >

    mysqlctld --tablet_uid=1

     

    --tablet_uid 는 MySQL 인스턴스를 식별하기 위한 유일한 숫자 값입니다.

    이를 통해 mysqlctld 는 데이터 디렉토리, 소켓 파일, 로그 경로 등을 일관된 경로로 생성하고 관리합니다.

    예를 들어, --tablet_uid=1 로 설정하면 MySQL 데이터 경로/vt/vtdataroot/vt_0000000001 과 같이 생성됩니다.

     

    아래의 도커 명령어는 기본적인 mysqld 를 실행시키기 위한 Vitess mysqlctld 의 명령어입니다.

    mysqlctld 명령어를 실행하게 되면 mysqld 프로세스가 실행되게 됩니다.

    docker run --platform linux/amd64 -d \
    --name mysqlctld vitess/lite:v17.0.7-mysql80 \
    /vt/bin/mysqlctld --tablet_uid=1

     

     

    위 도커 컨테이너가 실행된 이후에 파일 구조의 변화를 살펴보겠습니다.

    /vt/vtdataroot 디렉토리 하위에 vt_0000000001 이라는 폴더가 생성됩니다.

    이는 mysqlctld 명령어의 option 으로 주어진 --tablet_uid 의 값인 1 이 반영된 결과입니다.

    그리고 출력되는 파일들은 pid, socket, data 디렉토리 등 MySQL 과 관련된 익숙한 파일들이 출력됩니다.

    docker exec mysqlctld ls /vt/vtdataroot/vt_0000000001
    bin-logs
    data
    error.log
    innodb
    my.cnf
    mysql.pid
    mysql.sock
    mysql.sock.lock
    relay-logs
    slow-query.log
    tmp

     

     

    Socket File 을 통해서 MySQL 내부로 접속해보도록 하겠습니다.

    기본적인 root 사용자와 생성된 Unix Domain Socket 파일을 통해서 접근을 시도합니다.

    docker exec -it mysqlctld mysql -S /vt/vtdataroot/vt_0000000001/mysql.sock -u root

     

     

    --pid_file.

    일반적으로 mysqld_safe 와 같은 Watcher Process감시해야할 대상의 상태를 점검합니다.

    mysqlctld 의 경우에는 실행되는 mysqld 프로세스의 상태를 감지해야하는데요.

    감지를 위한 기본적인 수단으로써 mysql.pid 파일 내부에 저장된 Process ID 가 필요합니다.

     

    --pid-file 옵션은 mysql.pid 파일의 위치를 지정할 수 있는 옵션입니다.

    사용방식은 아래와 같습니다.

    아래의 명령어는 /vt/config 라는 새로운 디렉토리를 생성하고 /vt/config/mysql.pid 파일을 생성합니다.

    docker run --platform linux/amd64 -d \
    --name mysqlctld vitess/lite:v17.0.7-mysql80 \
    bash -c 'mkdir -p /vt/config && /vt/bin/mysqlctld --tablet_uid=1 --pid_file=/vt/config/mysql.pid'

     

    그리고 아래의 캡쳐 이미지와 같이 /vt/config 디렉토리 하위에 mysql.pid 파일이 생성됨을 확인할 수 있습니다.

     

     

    --mysql_socket.

    --pid_file 옵션처럼 --mysql_socket 옵선은 mysql.sock 파일의 위치를 지정할 수 있는 옵션입니다.

     

    docker run --platform linux/amd64 -d \
    --name mysqlctld vitess/lite:v17.0.7-mysql80 \
    bash -c 'mkdir -p /vt/socket && /vt/bin/mysqlctld --tablet_uid=1 --mysql_socket=/vt/socket/mysql.sock'

     

     

    그리고 /vt/socket/mysql.sock 파일을 통해서 mysqld 내부로 진입할 수 있게 됩니다.

     

     

     

    --init_db_sql_file.

    --init_db_sql_file 옵션을 사용하면 초기화된 MySQL 인스턴스에 기본 데이터베이스와 테이블을 자동으로 생성할 수 있습니다.

     

    우선 vt_test 라는 데이터베이스와 users 테이블을 생성하는 간단한 init.sql 파일을 생성합니다.

    cat <<'EOF'> /tmp/init.sql
    SET GLOBAL super_read_only=0;
    CREATE DATABASE IF NOT EXISTS vt_test;
    USE vt_test;
    
    CREATE TABLE users (
      id INT PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(255) NOT NULL,
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    
    INSERT INTO users (name) VALUES ('Vitess User');
    SET GLOBAL super_read_only=1;
    EOF

     

    그리고 아래와 같이 init.sql 파일을 Docker Container 내부로 마운트한 이후에 --init_db_sql_file 옵션을 사용합니다.

    docker run --platform linux/amd64 -d \
    --name mysqlctld \
    --mount type=bind,source=/tmp/init.sql,target=/vt/init.sql \
    vitess/lite:v17.0.7-mysql80 \
    /vt/bin/mysqlctld --tablet_uid=1 --init_db_sql_file=/vt/init.sql

     

    아래의 이미지는 init.sql 에 작성된 Database, Table, Record 들이 정상적으로 생성되었는가를 확인한 결과입니다.

     

     

     

     

    반응형
Designed by Tistory.