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
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 }
'LINUX > DB' 카테고리의 다른 글
[MSSQL] (Backup, Restore) Database 진행률 확인 쿼리 (0) | 2022.08.30 |
---|---|
[MSSQL] 제일 많은 빈도수 쿼리 조회 스크립트 (0) | 2022.07.19 |
[MSSQL] 복구상태일때 퍼센트와 남는 시간 확인하는 방법 (0) | 2021.12.06 |
[MSSQL] 원격지 백업하는 방법 (0) | 2021.12.06 |
[MSSQL] Shrink (0) | 2021.10.29 |