YUMSERV
반응형

Mysqld_multi가 사용하는 이유는, QA용도로 분리해서 버전을 다르게 사용하거나, 아니면 datadir를 구분해서 사용하고자 할 때 사용합니다.

현 회사에서도, datadir를 구분해서 사용해야 될 일이 있어 셋팅하게 되었습니다.

 

* 환경 : CentOS 7.9 64bit / Mysql 5.7

 

* Mysqld_multi 는 mysql 5.7버전 부터 추가되었습니다.

참고 doc : https://dev.mysql.com/doc/refman/5.7/en/mysqld-multi.html

 

MySQL :: MySQL 5.7 Reference Manual :: 4.3.4 mysqld_multi — Manage Multiple MySQL Servers

4.3.4 mysqld_multi — Manage Multiple MySQL Servers mysqld_multi is designed to manage several mysqld processes that listen for connections on different Unix socket files and TCP/IP ports. It can start or stop servers, or report their current status. Not

dev.mysql.com

 

1. MYSQL 설치

 

- 필수 패키지 설치

# yum install perl libaio libaio-devel

 

- MYSQL 5.7 다운로드 및 환경 설정

# tar xvf mysql-5.7.38-el7-x86_64.tar.gz
# mv mysql-5.7.38-el7-x86_64/* /usr/local/mysql

# vi /root/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:
# source /root/.bash_profile


# chown -R mysql.mysql /usr/local/mysql/
# mkdir -p /var/log/mysql

# chown -R mysql.mysql /var/log/mysql

 

2. mysqld_multi 설정

- my.cnf 파일 설정

기존 my.cnf 파일을 백업한 다음, mysqld_multi --example 명령어를 통해서, 예시 my.cnf 파일을 가져옵니다.

# mysqld_multi --example

# vi /etc/my.cnf
[mysqld]
log-error=/var/log/mysql/mysql.log
user=mysql

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
# 여기 USER, PASSWORD는 아래 여러개의 mysql을 실행하는 mysql 계정정보입니다.
user = multi_admin
password = my_password

# 여러개의 MYSQL을 생성할때에는 [mysqld숫자] 로 시작하여야 하며,
# socket, port, pid, datadir 경로가 모두 달라야 합니다.
[mysqld3306]
socket = /tmp/mysql.sock3306
port = 3306
pid-file = /usr/local/mysql/data_3306/hostname.pid3306
datadir = /usr/local/mysql/data_3306
#language = /usr/local/mysql/share/mysql/english
user = multi_admin

[mysqld3307]
socket = /tmp/mysql.sock3307
port = 3307
pid-file = /usr/local/mysql/data_3307/hostname.pid3307
datadir = /usr/local/mysql/data_3307
#language = /usr/local/mysql/share/mysql/swedish
user = multi_admin

[mysqld3308]
socket = /tmp/mysql.sock3308
port = 3308
pid-file = /usr/local/mysql/data_3308/hostname.pid3308
datadir = /usr/local/mysql/data_3308
#language = /usr/local/mysql/share/mysql/estonia
user = multi_admin

 

- 각 mysql 별 권한 설정

# mkdir -p /usr/local/mysql/data_3306
# mkdir -p /usr/local/mysql/data_3307
# mkdir -p /usr/local/mysql/data_3308
# chown -R mysql.mysql /usr/local/mysql/data*

 

- mysql 시작 후, mysql_multi 계정 생성 및 권한 설정

mysql> create user 'multi_admin'@'localhost' identified by 'my_password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

 

- mysqld_multi 명령어 사용법

1) 현재 상태 확인

# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is not running
MySQL server from group: mysqld3307 is not running
MySQL server from group: mysqld3308 is not running

 

2) 모든 서버 시작/중지/재시작/리로드

# mysqld_multi start
# mysqld_multi stop
# mysqld_multi restart
# mysqld_multi reload

 

3) 특정 서버만 시작/중지/재시작/리로드

- 뒤에 /etc/my.cnf에서 지정한 숫자넘버 지정

# mysqld_multi start 3306
# mysqld_multi stop 3306
# mysqld_multi restart 3306
# mysqld_multi reload 3306

 

- /etc/init.d/mysqld_multi 파일 생성

# cp -arp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi

 

- 서비스 확인 및 접속

# netstat -nltp | grep mysql
tcp6 0 0 :::3306 :::* LISTEN 22936/mysqld
tcp6 0 0 :::3307 :::* LISTEN 22934/mysqld
tcp6 0 0 :::3308 :::* LISTEN 22962/mysqld

# mysql 접속
# mysql -u root -p -S /tmp/mysql.sock3306
# mysql -u root -p -S /tmp/mysql.sock3307
# mysql -u root -p -S /tmp/mysql.sock3308

 

 

 

3. 이슈사항 정리

1) mysqld_multi 실행은 되나, 중지가 안되는경우

mysqld_multi 명령어는 mysqladmin 명령어를 통해서 start, shutdown을 진행합니다.

명령어를 사용할때 socket이 지정이 안되서, 중지가 안되고 있었으며, 아래 파일을 수정해주면 됩니다.

# vi /usr/local/mysql/bin/mysqld_multi
빨간색 부분 추가

...
216 sub defaults_for_group
217 {
218 my ($group) = @_;
219
220 return () unless $my_print_defaults_exists;
221
222 my $com= join ' ', 'my_print_defaults -s', @defaults_options, $group;
223 my @defaults = `$com`;
224 chomp @defaults;
225 return @defaults;
226 }

 

 

반응형
profile

YUMSERV

@lena04301

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!