-
[Vitess] mysqlctld 기본적인 사용법 알아보기Database/Vitess 2023. 1. 31. 05:45728x90반응형
- 목차
들어가며.
Vitess 는 MySQL 을 확장 가능하게 관리해주는 강력한 도구입니다.
mysqlctld 는 Vitess 에서 MySQL 인스턴스를 제어하고 관리하는 데 사용되는 유틸리티입니다.
이를 통해 MySQL 서버를 시작하거나 중지하고, 데이터 디렉토리를 관리할 수 있습니다.
그리고 mysqld_safe 처럼 MySQL 인스턴스의 장애시 재시작과 같은 Failover 의 역할 또한 수행합니다.
이번 글에서는 mysqlctld 의 사용법을 간단하게 정리해보겠습니다.
참고로 Docker 와 vitess/lite:v17.0.7-mysql80 이미지를 통해서 전반적인 실습을 진행하도록 하겠습니다.
https://hub.docker.com/r/vitess/lite
Vitess MySQL Instance 실행하기.
Vitess 에서 MySQL 인스턴스를 실행하려면 mysqlctld 명령어를 사용합니다.
mysqlctld 는 MySQL 서버 프로세스인 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 들이 정상적으로 생성되었는가를 확인한 결과입니다.
반응형'Database > Vitess' 카테고리의 다른 글
[Vitess] VTOrc Orchestration 알아보기 ( EmergencyReparentShard ) (0) 2023.10.30 [Vitess] Docker 환경에서 vttablet 실행하기: 단계별 가이드 (0) 2023.09.19 Vitess Multi Shards 구현하기 ( Sharded Keyspace ) (0) 2023.09.06 KinD 로 Vitess 구현하기. (0) 2023.09.05 [Vitess] Vitess 환경에서 Primary-Replica Replication 구축하기 (0) 2023.04.10