728x90

다운로드 방법

최신 버전이 아닌 구 버전은 이딜리버리 홈페이지 https://edelivery.oracle.com/ 에서 다운

 

로그인 하여 다운로드 할 프로그램 검색(ex. oracle database 11로 검색 시 자동완성 나옴)

 

다운로드 받을 프로그램 선택(ex. 11g 11.2.0.2.0)

 

다운로드를 위해 우측 상단 View Items을 선택하여 Continue 클릭

 

버전 선택, 필자는 Orange tool을 사용하기 위해 Microsoft 32bit를 선택(운영체제는 x64이나 Orange는 x64 지원 불가)

선택 후 우측 하단 Continue 클릭

 

라이선스 동의 및 Continue

라이

버전에 맞는 클라이언트 선택 및 Download

 

Oracle_SSN_DLM_~.exe 파일이 다운로드 됨, 경로 선택 후 Next 

 

728x90

준비물

OS 3대(Centos 설치 서버 1대, replication 구성 1식)
replication 설치 방법 : https://peryh.tistory.com/64?category=976917

 

[설치 파일(/root/mha디렉터리 내부로 업로드)]

mha_install.zip
9.48MB

dependency : mha 의존성 해결을 위한 패키지 파일

master_ip_failover : 실제 서비스 시 사용하는 프로그램, mha가 동작하여 failover 되면 해당 프로세스는 사라짐(crontab으로 재기동 필요)

master_ip_online_change : 수동으로 master와 slave를 전환하는 프로그램

mysql 5.7버전 실행파일(mysql, mysqlbinlog) : MySQL 8.x 버전의 경우 MHA에서 mysql/mysqlbinlog 호출 시 OS 7 버전의 openssql-1.0 버전과 호환되지 않아 명령어가 존재함에도 실행할 수 없다는 에러가 발생됨, openssl을 1.1 버전으로 업데이트는 8버전부터 제공되며, 8버전 설치파일을 7버전에 설치하는 부분도 권장되지 않음

 

mha 0.57 설치파일

 

 

구성도

각 OS를 편의상 manager(192.168.8.70), master(192.168.8.74), slave(192.168.8.75)로 통칭

master가 되는 mysql 서버에 Virtual Interface(192.168.8.80)가 up 상태로 존재

 

 

설치방법

mha OS 유저 생성(master/slave 모두 작업)

useradd -g mysql -G wheel mha
passwd mha
mha

 

mha OS 유저 생성(manager 작업, manager 서버의 mysql 그룹 및 wheel 그룹포함은 필수가 아니나, 빠른 설치 시 명령어 복사의 편리성을 위해서 아래처럼 수행)

groupadd mysql
useradd -g mysql -G wheel mha
passwd mha
mha

 

mha profile 설정(manager/master/slave 모두 작업)

vi /home/mha/.bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin:/mysql_engine/mysql/bin

export PATH

alias mm='mysql -u root -p'

 

hosts 파일 설정(manager/master/slave 모두 작업), ip와 host 이름을 매핑한 파일

vi /etc/hosts
192.168.8.70    c70m                         #각 OS 별 ip
192.168.8.74    c741
192.168.8.75    c742
192.168.8.80    mha-master-vip         #가상 인터페이스 ip

 

디렉터리 생성 및 권한 변경(manager/master/slave 모두 작업)

mkdir -p /mysql_mha/scripts
mkdir -p /mysql_mha/log
mkdir -p /mysql_mha/manager
mkdir -p /mysql_mha/remote
chown  -R mha:mysql /mysql_mha
chmod -R 770 /mysql_mha

 

패키지 설치(manager/master/slave 모두 작업)

yum -y install perl*
혹은 원격지 repository에서 skip-broken 옵션 에러날 시,
yum -y install perl* --skip-broken

 

추가 dependency 설치(manager/master/slave 모두 작업)

vi /root/mha/dependency/install.sh 쉘 작성

rpm -Uvh perl-Class-Load-0.20-3.el7.noarch.rpm
rpm -Uvh perl-Compress-Raw-Bzip2-2.061-3.el7.x86_64.rpm
rpm -Uvh perl-Compress-Raw-Zlib-2.061-4.el7.x86_64.rpm
rpm -Uvh perl-Config-Tiny-2.14-7.el7.noarch.rpm
rpm -Uvh perl-Data-Dumper-2.145-3.el7.x86_64.rpm
rpm -Uvh perl-Data-OptList-0.107-9.el7.noarch.rpm
rpm -Uvh perl-DBD-MySQL-4.023-6.el7.x86_64.rpm
rpm -Uvh perl-DBI-1.627-4.el7.x86_64.rpm
rpm -Uvh perl-Email-Date-Format-1.002-15.el7.noarch.rpm
rpm -Uvh perl-IO-Compress-2.061-2.el7.noarch.rpm
rpm -Uvh perl-IO-Socket-IP-0.21-5.el7.noarch.rpm
rpm -Uvh perl-IO-Socket-SSL-1.94-7.el7.noarch.rpm
rpm -Uvh perl-List-MoreUtils-0.33-9.el7.x86_64.rpm
rpm -Uvh perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm
rpm -Uvh perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
rpm -Uvh perl-Mail-Sendmail-0.79-21.el7.noarch.rpm
rpm -Uvh perl-MailTools-2.12-2.el7.noarch.rpm
rpm -Uvh perl-MIME-Lite-3.030-1.el7.noarch.rpm
rpm -Uvh perl-MIME-Types-1.38-2.el7.noarch.rpm
rpm -Uvh perl-Module-Implementation-0.06-6.el7.noarch.rpm
rpm -Uvh perl-Module-Runtime-0.013-4.el7.noarch.rpm
rpm -Uvh perl-Mozilla-CA-20130114-5.el7.noarch.rpm
rpm -Uvh perl-Net-Daemon-0.48-5.el7.noarch.rpm
rpm -Uvh perl-Net-LibIDN-0.12-15.el7.x86_64.rpm
rpm -Uvh perl-Net-SMTP-SSL-1.01-13.el7.noarch.rpm
rpm -Uvh perl-Net-SSLeay-1.55-6.el7.x86_64.rpm
rpm -Uvh perl-Net-Telnet-3.03-19.el7.noarch.rpm
rpm -Uvh perl-Package-DeprecationManager-0.13-7.el7.noarch.rpm
rpm -Uvh perl-Package-Stash-0.34-2.el7.noarch.rpm
rpm -Uvh perl-Package-Stash-XS-0.26-3.el7.x86_64.rpm
rpm -Uvh perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
rpm -Uvh perl-Params-Util-1.07-6.el7.x86_64.rpm
rpm -Uvh perl-Params-Validate-1.08-4.el7.x86_64.rpm
rpm -Uvh perl-PlRPC-0.2020-14.el7.noarch.rpm
rpm -Uvh perl-Sub-Install-0.926-6.el7.noarch.rpm
rpm -Uvh perl-Sys-Syslog-0.33-3.el7.x86_64.rpm
rpm -Uvh perl-TimeDate-2.30-2.el7.noarch.rpm
rpm -Uvh perl-Try-Tiny-0.12-2.el7.noarch.rpm

 

쉘 수행(manager/master/slave 모두 작업)

sh /root/mha/dependency/install.sh

 

의존성으로 인해 에러 발생, 쉘 다시 수행(manager/master/slave 모두 작업)

sh /root/mha/dependency/install.sh

 

쉘 다시 수행 시, perl-Log-Dispatch에서 에러 발생

 

수동으로 패키지 설치(manager/master/slave 모두 작업)

rpm -Uvh perl-MIME-Lite-3.030-1.el7.noarch.rpm
rpm -Uvh perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm

 

mha node 및 manager 설치(manager부터 설치 시, 의존성 에러 발생, master/slave는 node만 설치)

rpm -Uvh /root/mha/mha4mysql-node-0.57-0.el7.noarch.rpm
rpm -Uvh /root/mha/mha4mysql-manager-0.57-0.el7.noarch.rpm                        #master, slave는 수행하지 않음

manager 설정, node와 manager 설치
master 설정, node만 설치
slave 설정, node만 설치

 

인터페이스 설정(master/slave 작업)

master가 되는 DB에 vip 인터페이스를 기동시키기 위한 사전 작업

visudo                                                                     #쉘 명령어로 진입

아래 내용 추가
mha     ALL=(ALL)       NOPASSWD: ALL              #mha 계정만 권한을 주거나
%wheel  ALL=(ALL)       NOPASSWD: ALL           #mha가 속한 그룹에 권한을 주거나

 

보안상 필요 계정만 등록하는 것을 권장(master/slave 작업)

 

정상적으로 권한을 받아 인터페이스 활성화가 되는지 테스트(master/slave 작업)

su - mha
ifconfig
sudo ifconfig ens33:0 192.168.8.80 up                   # ens33은 자신의 인터페이스 이름에 맞게 작성
ifconfig

 

해당 인터페이스 down(master/slave 작업)

sudo ifconfig ens33:0 down
ifconfig

 

서버의 네트워크 설정에 따라, 명령어가 달라질 수 있음, 이 경우 mha failover 파일에 서버에서 사용 가능한 명령어 작성(별도 예시)

cd /etc/sysconfig/network-scripts
ls -l
cp ifcfg-ens33 ifcfg-ens33:0

NAME, DEVICE, IPADDR 수정

인터페이스 파일을 미리 생성한 경우

 

네트워크 설정 파일이 존재하는 경우 아래 명령어로 인터페이스 활성화(별도 예시)

ifconfig
ifup ens33:0

 

아래 명령어로 인터페이스 내리기(별도 예시)

ifdown ens33:0
ifconfig

 

mha 계정의 암호 입력 없는 연결 위한 설정(manager/master/slave 모두 작업)

su - mha
ssh-keygen -t rsa -b 4096
enter-enter-enter

각 서버별로 ssh-key 생성 후 ssh-copy-id 수행할 것

[manager]
ssh-copy-id c741                                     #자기 이외의 다른 서버들 등록
ssh-copy-id c742
 
 
[master]
ssh-copy-id c742
ssh-copy-id c70m
 
 
[slave]
ssh-copy-id c741
ssh-copy-id c70m

각 서버 별 키 생성
키 생성 후 키 복사하는 내용

 

만들어진 ssh-key는 계정의 home 디렉터리 내부에 숨김파일로 존재(manager/master/slave 모두 작업)

 

암호없는 접속 연결 테스트(manager/master/slave 모두 작업)

[manager]
ssh mha@c741 hostname
ssh mha@c741
hostname
exit
ssh mha@c742 hostname

[master]
ssh mha@c742 hostname
ssh mha@c70m hostname
hostname

[slave]
ssh mha@c741 hostname
ssh mha@c70m hostname

 

계정 생성 전 my.cnf 암호 복잡도 설정 해제(master/slave 작업)

추후 mha로 master/slave 전환 시, 패스워드에 특수문자가 존재 시 정상적으로 전환이 안되는 문제가 발생

복잡도 해제 후 진행 필요

su - mysql
dbshutdown
ps -ef | grep mysql

 

vi /etc/my.cnf(master 작업)

[client]
port=3306
socket=/mysql_data/mysql.sock

[mysqld]
user=mysql
authentication_policy=mysql_native_password

datadir=/mysql_data/data
port=3306
socket=/mysql_data/mysql.sock
pid-file=/mysql_data/mysqld.pid

server-id=1
log_error=/mysql_dump/error/mysql.err
log_bin=/mysql_dump/binlog/mysql-bin
relay-log=/mysql_dump/relaylog/relay-log
relay-log-index=/mysql_dump/relaylog/relay-log.index
relay_log_purge=0
sync_binlog=1
binlog_cache_size=1M
max_binlog_size=1G
binlog_expire_logs_seconds=86400

# Character set Config
character-set-client-handshake=FALSE
character-set-server=utf8mb4
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8

##아래는 추후에 추가(mha 시에 특수문자를 추가할 수 없어서 적용)
# Password Policy
validate_password.policy=LOW   #LOW는 비밀번호가 8글자 이상이면 통과
validate_password.length=4         #0으로 설정해도 4가 최소값

 

vi /etc/my.cnf(slave 작업)

[client]
port=3306
socket=/mysql_data/mysql.sock

[mysqld]
user=mysql
authentication_policy=mysql_native_password

datadir=/mysql_data/data
port=3306
socket=/mysql_data/mysql.sock
pid-file=/mysql_data/mysqld.pid

server-id=2
log_error=/mysql_dump/error/mysql.err
log_bin=/mysql_dump/binlog/mysql-bin
relay-log=/mysql_dump/relaylog/relay-log
relay-log-index=/mysql_dump/relaylog/relay-log.index
relay_log_purge=0

read_only

# Character set Config
character-set-client-handshake=FALSE
character-set-server=utf8mb4
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8

# Password Policy
validate_password.policy=LOW
validate_password.length=4

 

DB 재기동(master/slave 작업)

dbstartup
ps -ef | grep mysql
cat /mysql_dump/error/mysql.err

 

replication 재설정(master/slave 작업)

[master]
reset master;
show master status\G;

[slave]
stop slave;
reset slave;
reset master;

CHANGE MASTER TO
MASTER_HOST='192.168.8.74',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='Password1!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=157;

start replica;

 

replication 상태 확인(master/slave 작업)

[master]
show slave hosts\G;

[slave]
show slave status\G;

 

mysql mha계정 생성(master 작업)

create user 'mha'@'%' identified by 'mham';
grant all privileges on *.* to 'mha'@'%';
flush privileges;
select user, host from mysql.user;

 

slave도 생성 되었는지 확인(slave 작업)

select user, host from mysql.user;

 

mha 매니저용 설정파일 작성(manager 작업)

su - mha

vi /mysql_mha/app1.cnf

[server default]
log_level=debug
user=mha                                               #mysql의 유저명
password=mham                                   #mysql user의 비밀번호
ssh_user=mha                                       #OS user의 유저명
 
repl_user=repl
repl_password=Password1!
 
# working directory on the manager
manager_workdir=/mysql_mha/manager
 
# manager log file
manager_log=/mysql_mha/log/mha.log
 
# working directory on MySQL servers
remote_workdir=/mysql_mha/remote
 
master_binlog_dir=/mysql_dump/binlog/
 
#ping interval, 3 times trial
ping_interval=5
 
#custom scripts for master ip failover
master_ip_failover_script=/mysql_mha/scripts/master_ip_failover
 
#custom scripts for manual master switch
master_ip_online_change_script=/mysql_mha/scripts/master_ip_online_change
 
[server1]
hostname=c741
port=3306
ignore_fail=1
candidate_master=1
[server2]
hostname=c742
port=3306
ignore_fail=1
candidate_master=1

 

 

설정파일로 check_ssh 수행, ssh 통신이 정상적으로 동작되는지 확인(manager 수행)

masterha_check_ssh --conf=/mysql_mha/app1.cnf

 

설정파일로 check_repl 수행, replication이 정상적으로 동작중인지 확인(manager 수행)

masterha_check_repl --conf=/mysql_mha/app1.cnf

 
에러 발생 이유는 상단 준비물 mysql 5.7버전 실행파일(mysql, mysqlbinlog)에 작성
실행파일 변경(master/slave 작업)
su - 
cd /root/mha
cp mysql /usr/bin/
cp mysqlbinlog /usr/bin/
chmod 775 /usr/bin/mysql
chmod 775 /usr/bin/mysqlbinlog
 
ls -l /usr/bin | grep mysql

 

check_repl 재수행(manager 수행)

masterha_check_repl --conf=/mysql_mha/app1.cnf

 

Can't exec "/mysql_mha/scripts/master_ip_failover": No such file or directory at /usr/share/perl5/vendor_perl/MHA/ManagerUtil.pm line 68. 에러 발생

다운받은 파일 복사하여 옮겨주기(manager 수행)

su - 
pwd
ls -l
cp master_ip_* /mysql_mha/scripts/
chown mha. /mysql_mha/scripts/*
chmod 775 /mysql_mha/scripts/*                                     #권한이 644인 경우도 Can`t exec 에러 발생함
ls -l /mysql_mha/scripts/

 

check_repl 재수행(manager 수행), 정상동작

masterha_check_repl --conf=/mysql_mha/app1.cnf

 
master_ip_failover 파일 수정(가상 vip 인터페이스 상황에 맞게 수정)
vi /mysql_mha/scripts/master_ip_failover

sudo ifconfig ens33:0 192.168.8.80/24 up                #master/slave에서 동작하던 명령어 작성, ifup이라면 해당 형태로 작성 필요
sudo ifconfig ens33:$key $vip up                              #my $vip와 $key 변수에 넣은 값으로 치환            

 

mha 엔진 스크립트 수정(manager 수행)

MHA에서 권고하는 Custom Script 수정과 함께, MHA failover의 서버 프로세스 정리 부문의 서버 비정상 종료 버그를 피하기 위해, MHA 매니저 설치 서버의 다음 엔진 스크립트 수정

su -
vi /usr/share/perl5/vendor_perl/MHA/ManagerConst.pm

our $SSH_OPT_CHECK ="-o StrictHostKeyChecking=no -o PasswordAuthentication=no -o BatchMode=yes -o ConnectTimeout=5";

# modified VAR_CONNECT_TIMEOUT이 정의되어 있지 않아 오류 발생
# SSH 연결 세션의 connection timeout 값으로 기본값 5초로 변경
# 원본 내용
#our $SSH_OPT_CHECK ="-o StrictHostKeyChecking=no -o PasswordAuthentication=no -o BatchMode=yes -o ConnectTimeout=VAR_CONNECT_TIMEOUT";

 

mha 매니저 구동(manager 수행)

nohup masterha_manager --conf=/mysql_mha/app1.cnf &
ps -ef | grep master
masterha_check_status --conf=/mysql_mha/app1.cnf

 

mha 매니저 종료(manager 수행)

nohup masterha_stop --conf=/mysql_mha/app1.cnf &

 

수동 스크립트 수정(manager 수행)

vi /mysql_mha/scripts/master_ip_online_change

내용 추가
내용 추가
주석처리
내용 추가
주석 처리 및 내용 추가

 

 

mha 테스트

[수동전환]

masterha_master_switch를 수행하기 위해서는 mha 매니저 프로세스가 종료되어야 함

mha 매니저가 올라와 있지 않은 상태에서 아래 명령어 수행

--orig_master_is_new_slave 옵션을 주게 되면 이전 마스터가 신규 마스터의 슬레이브로 설정되며, 이 옵션을 주지 않게 되면 이전 마스터는 신규 마스터의 슬레이브로 설정되지 않는다. --interactive=0 옵션을 주면 아래 실행 중 YES/NO를 묻지 않고 수행됨

masterha_master_switch --master_state=alive --conf=/mysql_mha/app1.cnf --orig_master_is_new_slave --interactive=0

 

수행 전 확인(manager 수행)

ps -ef | grep master
masterha_check_status --conf=/mysql_mha/app1.cnf

 

master인지 slave인지 확인(master/slave 둘다 작업)

\! hostname
show slave status\G;
show slave hosts\G;

 

수동 failover 수행

masterha_master_switch --master_state=alive --conf=/mysql_mha/app1.cnf --orig_master_is_new_slave --interactive=0

 

master인지 slave인지 확인(master/slave 둘다 작업)

기존 slave(192.168.8.75)가 master로 전환되며 가상 인터페이스가 올라온 것을 확인할 수 있음

다시 변경하려면 수동 failover를 재실행하여 변경

\! hostname
\! ifconfig
show slave hosts\G;

 
 
[자동전환]

mha 매니저 구동(manager 수행)

nohup masterha_manager --conf=/mysql_mha/app1.cnf &
ps -ef | grep master
masterha_check_status --conf=/mysql_mha/app1.cnf

 

master인지 slave인지 확인(master/slave 둘다 작업)

\! hostname
show slave status\G;
show slave hosts\G;

 

새 접속창 띄워놓고 mha 로그 띄워두기(manager 수행)

tail -f /mysql_mha/log/mha.log

 

master 강제 종료(master 수행)

ps -ef | grep mysql
kill -9 
혹은
dbshutdown

 

tail 걸어둔 로그 확인 시, 아래와 같은 에러 발생 한다면

[error][/usr/share/perl5/vendor_perl/MHA/MasterFailover.pm, ln309] Last failover was done at 2022/07/19 00:06:40. Current time is too early to do failover again. If you want to do failover, manually remove /mysql_mha/manager/app1.failover.complete and run this script again.

 

app1.failover.complete 파일 삭제(manager 수행)

rm -rf /mysql_mha/manager/app1.failover.complete

 

정상적인 로그

 

매니저 서버 프로세스 및 파일 확인(manager 수행)

 master 관련 프로세스가 사라지고, failover가 성공한 파일만 존재

ps -ef | grep master
ls -l /mysql_mha/manager/

728x90

준비물

OS 2대(각각 mysql 설치 필요)

설치 방법 : https://peryh.tistory.com/63

 

 

구성도

각 OS를 편의상 master(192.168.8.74), slave(192.168.8.75)로 통칭

 

 

설치 방법

켜진 DB 종료(master/slave 둘다 작업)

dbshutdown
혹은 alias 설정 없을 시
/mysql_engine/mysql/bin/mysqladmin shutdown -u root -p
ps -ef | grep mysql

 

동일한 /etc/my.cnf 설정 변경(실제 파일에 적용 시, #로 되어있는 주석은 모두 삭제 후 적용)

vi /etc/my.cnf

[master]

[client]
port=3306
socket=/mysql_data/mysql.sock
 
[mysqld]
user=mysql
authentication_policy=mysql_native_password
 
datadir=/mysql_data/data
port=3306
socket=/mysql_data/mysql.sock
pid-file=/mysql_data/mysqld.pid
 
server-id=1
log_error=/mysql_dump/error/mysql.err
log_bin=/mysql_dump/binlog/mysql-bin
relay-log=/mysql_dump/relaylog/relay-log
relay-log-index=/mysql_dump/relaylog/relay-log.index
relay_log_purge=0
sync_binlog=1
binlog_cache_size=1M
max_binlog_size=1G
binlog_expire_logs_seconds=86400
 
# Character set Config
character-set-client-handshake=FALSE
character-set-server=utf8mb4
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8

 

[slave]

[client]
port=3306
socket=/mysql_data/mysql.sock
 
[mysqld]
user=mysql
authentication_policy=mysql_native_password
 
datadir=/mysql_data/data
port=3306
socket=/mysql_data/mysql.sock
pid-file=/mysql_data/mysqld.pid
 
server-id=2                                                     ## 서버id는 고유값이므로 master와 달라야 함
log_error=/mysql_dump/error/mysql.err
log_bin=/mysql_dump/binlog/mysql-bin
relay-log=/mysql_dump/relaylog/relay-log
relay-log-index=/mysql_dump/relaylog/relay-log.index
relay_log_purge=0
 
read_only                                                      ## slave에서 읽기만 가능하게 하는 설정
 
# Character set Config
character-set-client-handshake=FALSE
character-set-server=utf8mb4
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8

 

변경 후 재기동(master/slave 둘다 작업)

dbstartup
혹은
/mysql_engine/mysql/bin/mysqld_safe --user=mysql &
ps -ef | grep mysql

 

에러 없는지 확인(master/slave 둘다 작업)

tail -10 /mysql_dump/error/mysql.err

 

mysql DB 접속 및 repl 계정 생성(master/slave 둘다 작업)

mysql -u root -p
password1!

create user 'repl'@'%' identified with mysql_native_password by 'Password1!';
grant all privileges on *.* to 'repl'@'%';
flush privileges;
select user, host from mysql.user;

 

master reset 및 정보 확인(master에서 수행)

show master status\G;
reset master;
show master status\G;

 

slave 정보 reset(slave에서 수행)

reset master;
stop slave;
reset slave;

 

master 정보 기입(slave에서 수행, relaylog 디렉터리 생성 안한 경우 에러 발생, 참고한 설치글에는 미리 생성함)

CHANGE MASTER TO
MASTER_HOST='192.168.8.74',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='Password1!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=157;

 

slave에 디렉터리 생성 및 권한 변경(slave에서 수행)

\! mkdir -p /mysql_dump/relaylog
\! chmod -R 770 /mysql_dump
\! ls -l /mysql_dump

 

다시 수행(slave에서 수행)

CHANGE MASTER TO
MASTER_HOST='192.168.8.74',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='Password1!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=157;

 

replication 수행 및 확인(slave에서 수행, 초록색 Yes 두개가 보여야 정상)

start replica;
show slave status\G;

 

 

확인(master에서 수행)

show slave hosts\G;

 

테스트(master에서 수행)

show databases;
create database test;
show databases;

 

테스트 확인(slave에서 수행)

show databases;

 

생성한 Database 삭제(master에서 수행)

drop database test;
show databases;

 

테스트 확인(slave에서 수행)

show databases;

728x90

준비물

mysql 설치 rpm 파일
Centos7버전 OS

root 유저 필요

 

 

설치방법

mysql 설치 다운로드 링크

https://www.mysql.com/products/community/

 

Download MySQL Community Edition 클릭

 

MySQL Community Server 클릭

 

OS glibc 및 bit에 맞는 바이너리 다운로드

 

리눅스 glibc 버전 확인

getconf -a | grep glibc

 

리눅스 비트 확인

 

22.06.13 기준 glibc는 테스트 밖에 존재하지 않아 2.12파일 다운로드하여 설치 함


유저 생성

useradd mysql
passwd mysql
mysql

 

디렉터리 생성

mkdir /mysql_engine
mkdir -p /mysql_dump/error
mkdir /mysql_data
mkdir /mysql_export
mkdir -p /mysql_data/mysql
mkdir -p /mysql_dump/binlog
mkdir -p /mysql_dump/relaylog

 

생성한 디렉터리 권한 변경

chown -R mysql. /mysql_engine
chown -R mysql. /mysql_dump
chown -R mysql. /mysql_data
chown -R mysql. /mysql_export

chmod -R 770 /mysql_engine
chmod -R 770 /mysql_dump
chmod -R 770 /mysql_data
chmod -R 770 /mysql_export

 

다운로드 파일 /mysql_engine에 옮긴 후 압축 해제

cd /mysql_engine
tar -Jxvf mysql-8.0.29-linux-glibc2.12-x86_64.tar.xz

 

vi /etc/my.cnf 설정파일 변경(실제 파일에 적용 시, #로 되어있는 주석은 모두 삭제 후 적용)

[client]                                                                            #mysql 8 버전에서는 client 소켓도 지정 필요
port=3306
socket=/mysql_data/mysql.sock

[mysqld]
user=mysql
authentication_policy=mysql_native_password

datadir=/mysql_data/data
port=3306
socket=/mysql_data/mysql.sock
pid-file=/mysql_data/mysqld.pid

server-id=1
log_error=/mysql_dump/error/mysql.err                              #에러 로그 위치
log_bin=/mysql_dump/binlog/mysql-bin                              #바이너리 로그 위치, replication 시 필수
relay-log=/mysql_dump/relaylog/relay-log
relay-log-index=/mysql_dump/relaylog/relay-log.index
relay_log_purge=0                                                               #MHA 구성 시 필수
sync_binlog=1
binlog_cache_size=1M                                                        #로그 캐시 사이즈, 필수 사항 아님
max_binlog_size=1G
binlog_expire_logs_seconds=86400

# Character set Config
character-set-client-handshake=FALSE
character-set-server=utf8mb4
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8

 

설정한 파일 권한 변경 및 디렉터리 명 변경

chown -R mysql. /mysql_engine
chmod -R 775 /mysql_engine

chown mysql. /etc/my.cnf
chmod 644 /etc/my.cnf

mv mysql-8.0.29-linux-glibc2.12-x86_64 mysql

 

계정 변경 및 mysql 초기화

su - mysql
/mysql_engine/mysql/bin/mysqld --initialize --user=mysql

 

초기화 에러 확인

cat /mysql_dump/error/mysql.err

 

프로파일 설정(빨간색 부분만 추가)

vi ~/.bash_profile

PATH=$PATH:$HOME/.local/bin:$HOME/bin:/mysql_engine/mysql/bin

export PATH

alias mm='mysql -u root -p'

 

프로파일 적용

sh ~/.bash_profile

 

mysql 실행 및 서비스 확인

/mysql_engine/mysql/bin/mysqld_safe --user=mysql &
ps -ef | grep mysql

 

로그인, 로그인 시 비밀번호는 초기화 에러 확인 시 나왔던 정보 입력

/mysql_engine/mysql/bin/mysql -u root -p
혹은 mm(alias 설정한 이름)

 

root 비밀번호 변경

alter user 'root'@'localhost' identified by 'password1!';

 

설정 정보 확인

\s

 

mysql 보안 설치

exit
/mysql_engine/mysql/bin/mysql_secure_installation

 

추후 mha 설정을 고려한다면 LOW 설정을 권장함(mha시 비밀번호에 특수문자 있으면 정상 동작이 안됨)

 

보안 설정은 말 그대로 '보안'에 관한 설정이므로 본인 사항에 맞게 설정

 

DB 시작 및 종료 스크립트 생성, 필수는 아니나 편의성 측면에서 생성

vi /mysql_engine/mysql/bin/dbstartup
#/!/bin/bash
/mysql_engine/mysql/bin/mysqld_safe --user=mysql &
 
vi /mysql_engine/mysql/bin/dbshutdown
#!/bin/sh
/mysql_engine/mysql/bin/mysqladmin shutdown -u root -p
 
chmod 770 /mysql_engine/mysql/bin/dbstartup
chmod 770 /mysql_engine/mysql/bin/dbshutdown

 

기동 및 정지 테스트

dbshutdown
ps -ef | grep mysql
dbstartup
ps -ef | grep mysql

 

728x90

준비물

mysql 설치 rpm 파일

Centos7버전 OS

유저 생성

useradd mysql
passwd mysql
mysql

 

 

설치방법

mysql 설치 다운로드 링크

https://www.mysql.com/products/community/

 

Download MySQL Community Edition 클릭

 

Yum Repository 클릭

 

OS 버전에 맞는 rpm Download 선택

 

다운받은 rpm을 설치된 리눅스로 옮기기

 

MySQL 설치 레포지토리 설치하기

rpm -ivh mysql80-community-release-el7-6.noarch.rpm

 

MySQL 레포지토리 목록 확인

yum repolist enabled | grep "mysql.*"

 

yum 레포지토리 확인(centos 7.4 설치 후 default 설정된 repository)

cd /etc/yum.repos.d
ls -l

 

MySQL 설치

yum -y install mysql-server

 

GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022" 에러 발생하여 정상 다운되지 않은 경우, 아래 명령어 수행 및 다운로드 재시도

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum -y install mysql-server

 

설치 완료 확인

mysql -V

 

MySQL 서버 자동 시작 && 서버 시작 && 서버 상태 조회

systemctl enable mysqld && systemctl start mysqld && systemctl status mysqld

 

MySQL 8 버전은 서버 설치 과정에서 임시 비밀번호가 생성되며, 이 비밀번호로 접속이 가능

grep 'temporary password' /var/log/mysqld.log

 

MySQL 접속 및 비밀번호 입력

mysql -u root -p
BQ;e2:?uiKxt

 

데이터 베이스 조회 시 에러 발생, ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

root 비밀번호 변경 필요, 비밀번호 조건이 까다롭기 때문에 단순하게 변경 시 변경 안됨

show databases;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Mycentos74!@';

 

현재 설정 되어 있는 profile 확인

show variables like 'validate_password%';

 

설정된 profile을 변경 후 비밀번호 변경

SET GLOBAL validate_password.check_user_name=OFF;
SET GLOBAL validate_password.policy=LOW; 
SET GLOBAL validate_password.length=0;
show variables like 'validate_password%';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql';

 

해당 설정은 DB가 재기동 되면 초기화 되는 단점 존재

systemctl stop mysqld && systemctl start mysqld
mysql -u root -p
mysql
show variables like 'validate_password%';

 

설정 파일 맨 아래에 값 추가

vi /etc/my.cnf

##### Password Policy #####
validate_password.policy=LOW
validate_password.length=0

 

DB 재기동 후 접속하여 확인

systemctl stop mysqld && systemctl start mysqld
mysql -u root -p
show variables like 'validate_password%';

 

쉽게 변경되는 것 확인 가능

ALTER USER 'root'@'localhost' IDENTIFIED BY 'test';

+ Recent posts