본문 바로가기

리눅스

MySQL 엔진 및 MySQL MHA를 설치하고 구성하는 방법

728x90

MySQL 엔진 및 MySQL MHA를 설치하고 구성하는 방법

Ubuntu 서버 3대

  • mhauser 계정 생성
  • SSH 키 교환(SSH를 통해 서로 연결된 서버)

MySQL 엔진 설치

MySQL 초기화

mysqld --defaults-file=/usr/local/mysql/my.cnf --initialize --user=mysql

MySQL root 계정 패스워드 초기화

cat /usr/local/mysql/data/error.log | egrep "A temporary password is generated for root@localhost"
mysqld_safe --defaults-file=/usr/local/mysql/my.cnf &
mysql -uroot -p
alter user 'root'@'localhost' identified by 'mysql_root_password1!';
FLUSH PRIVILEGES;

MySQL 엔진 재시작

  • shutdown
mysqladmin -u root -p'mysql_root_password1!' shutdown
  • start
mysqld_safe --defaults-file=/usr/local/mysql/my.cnf &

MySQL 계정 생성

mysql -u root -p'mysql_root_password1!'

MySQL에서 mhauser 계정 생성(mhauser 계정 생성(mhauser/mysql_mhauser_password1!))

use mysql;
CREATE USER 'mhauser'@'192.168.56.%' IDENTIFIED WITH 'mysql_native_password' BY 'mysql_mhauser_password1!';
GRANT ALL ON *.* TO 'mhauser'@'192.168.56.%';
FLUSH PRIVILEGES;
SELECT Host,User,plugin,authentication_string FROM mysql.user WHERE user = 'mhauser';

MySQL에서 repluser 계정 생성(repluser 계정 생성(repluser/mysql_repluser_password1!))

use mysql;
CREATE USER 'repluser'@'192.168.56.%' IDENTIFIED WITH 'mysql_native_password' BY 'mysql_repluser_password1!';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.56.%';
FLUSH PRIVILEGES;
SELECT Host,User,plugin,authentication_string FROM mysql.user WHERE user = 'repluser';
728x90

MySQL 복제

마스터 서버에서 마스터 상태 확인

mysql -h localhost -uroot -p'mysql_root_password1!' -e "SHOW MASTER STATUS\G;"

마스터 서버에서 테이블 잠금

mysql -h localhost -uroot -p'mysql_root_password1!' -e "FLUSH TABLES WITH READ LOCK;"

MySQL 덤프 생성

mysqldump -uroot -p'mysql_root_password1!' --all-databases > alldatabases-backup.sql

scp 명령어를 사용하여 덤프 파일을 슬레이브 서버로 복사

scp alldatabases-backup.sql [email protected]:~
scp alldatabases-backup.sql [email protected]:~

마스터 서버에서 테이블 잠금 해제

mysql -h localhost -uroot -p'mysql_root_password1!' -e "UNLOCK TABLES;"

슬레이브 서버에서 덤프 파일을 복원(192.168.56.212, 192.168.56.213)

mysql -uroot -p'mysql_root_password1!' < alldatabases-backup.sql

mysql shutdown

mysqladmin -uroot -p'mysql_root_password1!' shutdown

mysql start

mysqld_safe --defaults-file=/usr/local/mysql/my.cnf &

마스터 서버에서 File 및 Position 확인

mysql -h localhost -uroot -p'mysql_root_password1!' -e "SHOW MASTER STATUS\G" | egrep 'File|Position'

슬레이브 서버에서 복제 설정 구성

mysql -h localhost -uroot -p'mysql_root_password1!' -e "stop slave"
mysql -h localhost -uroot -p'mysql_root_password1!' -e "reset slave"
mysql -h localhost -uroot -p'mysql_root_password1!' -e "
CHANGE MASTER TO
MASTER_HOST='192.168.56.211',
MASTER_USER='repluser',
MASTER_PASSWORD='mysql_repluser_password1!',
MASTER_LOG_FILE='mysql-bin.000006',
MASTER_LOG_POS=34977;
"
mysql -hlocalhost -uroot -p'mysql_root_password1!' -e "start slave"
mysql -hlocalhost -uroot -p'mysql_root_password1!' -e "SHOW REPLICA STATUS \G"

MySQL MHA 설치

MySQL 테스트 계정 생성

testuser 계정 생성(testuser/testpassword1!)

mysql -u root -p'mysql_root_password1!'
use mysql;
CREATE USER 'testuser'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'mysql_test_password1!';
GRANT ALL ON *.* TO 'testuser'@'%';
FLUSH PRIVILEGES;
SELECT Host,User,plugin,authentication_string FROM mysql.user WHERE user = 'testuser';

MySQL Query 테스트

데이터베이스 확인

mysql -hlocalhost -utestuser -p'mysql_test_password1!' -e "show databases;"

users_db 데이터베이스 생성

mysql -h192.168.56.200 -utestuser -p'mysql_test_password1!' -e "CREATE DATABASE users_db;"

users 테이블 생성

mysql -h192.168.56.200 -utestuser -p'mysql_test_password1!' --database=users_db -e "
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
"

users 테이블 구조 확인

mysql -h192.168.56.200 -utestuser -p'mysql_test_password1!' --database=users_db -e "DESCRIBE users;"

INSERT Query 실행

mysql -h192.168.56.200 -utestuser -p'mysql_test_password1!' --database=users_db -e "INSERT INTO users (username, email) VALUES ('user1', '[email protected]');"

SELECT Query 실행

mysql -h192.168.56.200 -utestuser -p'mysql_test_password1!' --database=users_db -e "SELECT * FROM users ORDER BY id DESC LIMIT 5;"

 

참고URL

- 우분투에서 MySQL 바이너리 파일로 설치하는 방법 : https://scbyun.com/1630

- MySQL에서 신규 데이터베이스를 생성하고 데이터를 추가하고 조회하는 방법 : https://scbyun.com/1660

- SSH 키를 생성하고 배포하여 원격 서버에 SSH 접속하는 방법 : https://scbyun.com/554

 

728x90