일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- set persist
- my.cnf
- mysql_random_root_password
- user
- realmysql8.0
- swap
- mysql
- mysql_root_password
- validate_password
- 이중 비밀번호
- mysqld.log
- mysql_allow_empty_password
- 정적변수
- PASSWORD
- 설정파일
- 동적변수
- 사용자 생성
- MySQL8
- 8.0
- alter
- Docker
- 5.7
- authentication_policy
- account lock
- WSL2
- default_authentication_plugin
- var scppe
- root
- 인플레이스 업그레이드
- realmyssql8.0
- Today
- Total
먹고 살려고 공부
[Real MySQL 8.0]MySQL 8.0과 Docker - 설치 본문
mysqld.service 파일은 Docker 내부에서는 찾을 수 없다. 아마 Docker가 독립적으로 MySQL 컨테이너를 띄워서 그런 거 같다.
/usr/lib/systemd/system/mysqld.service
Docker에서는 systemd 또한 지원하고 있지 않기 때문에 mysqld 데몬 프로세스를 찾기 위해서는 ps aux를 이용해야 한다.
root@9d60e77808ad:/# ps aux | grep mysqld
mysql 1 0.5 3.9 2503164 638708 ? Ssl Jan12 4:33 mysqld
root 655 0.0 0.0 3324 1576 pts/1 S+ 02:25 0:00 grep mysqld
MySQL 기동 중지
Docker에서는 systemctl stop mysqld은 불가능하기 때문에 docker에서 mysql을 종료하려면 아래와 같이 프로세스를 죽이거나 혹은 Docker 자체를 종료하거나, MySQL 내부에서 SHUTDOWN을 하면 된다.
kill -9 <PROCESS ID>
root@9d60e77808ad:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.40 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql> shutdown;
Query OK, 0 rows affected (0.01 sec)
mysql> test@DESKTOP-test:~$
자동으로 MySQL Docker가 내려간 모습을 볼 수 있다.
여기서 한 가지 기억할 점은 MySQL 내부에서 SHUTDOWN을 하려면 USER가 SHUTDOWN 권한을 갖고 있어야 한다.
MySQL이 종료될 때 정상적으로 커밋 되어도 데이터 파일에 변경된 내용이 기록되지 않고 로그 파일에만 기록되는 경우가 있다. 물론 재기동되었을 시에도 이러한 현상이 일어날 수 있다. 문제가 있는 것은 아니고 사용량이 많은 MySQL 서버일 경우 해당 현상이 발생할 수 있다. 이때, innodb_fast_shutdown 변수를 0으로 설정할 경우 커밋된 내용을 데이터 파일에 기록할 수 있다.
mysql> SET GLOBAL innodb_fast_shutdown=0;
Query OK, 0 rows affected (0.00 sec)
이렇게 모든 커밋된 내용을 데이터 파일에 기록하고 종료하는 것을 클린 셧다운(Clean Shutdown)이라고 한다.
클린 셧다운으로 종료될 경우, MySQL가 재기동 될 때 별도의 트랜잭션 복구 과정을 진행하지 않기 때문에 빠르게 시작된다.
MySQL이 기동되거나 종료될 때
- InnoDB 스토리지 엔진인 경우 버퍼 풀 내용을 백업하고 복구하는 과정이 내부적으로 실행된다. 버퍼 풀에 적재돼 있던 데이터 파일의 데이터 페이지에 대한 메타 정보를 백업한다(현재 어떤 데이터가 버퍼 풀에 올라왔는지에 대한 정보). 용량이 크지도 않고, 백업 속도도 빠르게 진행된다.
- 하지만 MySQL의 서버가 실제로 시작될 때에는 메타 정보를 이용하여 디스크에서 데이터 파일들을 모두 읽어 버퍼 풀에 올려놔야 하므로 시간이 오래 소요될 수도 있다.
만약, MySQL 서버의 시작 시간이 오래 걸릴 경우 실제 서버가 버퍼 풀의 내용을 복구하고 있는 지 확인하는 것도 방법이다.
서버 연결
root@9d60e77808ad:/# mysql -u root -p --host=localhost
위와 같이 접속할 경우 MySQL 클라이언트 프로그램은 항상 소켓 파일을 통해 접속하게 된다.
Unix domain socket을 이용한 방식으로 TCP/IP를 사용하지 않기 때문에 네트워크 계층을 거치지 않아 속도가 빠르다. 로컬 시스템에서만 가능하다.
root@9d60e77808ad:/# mysql -u root -p --host=127.0.0.1
127.0.0.1을 사용하는 경우에는 자기 서버를 가리키는 루프백(loopback) IP지만 TCP/IP 통신이기에 네트워크 계층을 거치게 된다. 속도가 더 느릴 수 있지만, 원격 서버로 접속할 경우 필수적이다.
mysql -u root -p
별도로 호스트 주소와 포트를 명시하지 않을 경우 기본값으로 localhost가 되며 소켓 파일을 사용하게 된다.
소켓 파일의 위치는 MySQL 서버의 설정 파일에서 읽어서 사용한다.
Docker 기준:(/etc/mysql/my.cnf -> /var/run/mysqld/mysqld.sock)
MySQL 서버가 기동될 때 만들어지는 유닉스 소켓 파일은 MySQL 서버를 재시작하지 않으면 다시 만들어낼 수 없다.
유닉스 소켓 파일: 같은 시스템 내에서 실행 중인 프로세스 간에 데이터를 교환하기 위한 파일 기반의 통신 채널. 서버 - 프로세스 간의 통신을 의미한다.
MySQL의 통신 방식
클라이언트 > 소켓 파일 > 서버 (요청 전달)
서버 > 데이터 파일 > 소켓 파일 > 클라이언트 (결과 반환)
MySQL의 외부 접속
MySQL 서버의 접속 가능 여부만 확인해야하는 경우, telnet이나 nc(Netcat) 명령을 이용해 MySQL 서버와의 연결 여부를 확인할 수 있다.
test@DESKTOP:~$ telnet 127.0.0.0 3306
Trying 127.0.0.0...
Connected to 127.0.0.0.
Escape character is '^]'.
J
8.0.40XZ?HeMv *{9OO?temcaching_sha2_password
test@DESKTOP:~$ nc 127.0.0.0 3306
J
8.0.40>mcS<C RGE;[ST8y35caching_sha2_password
Docker의 경우 포트가 매핑되지 않았다면 외부에서 내부 접근이 불가하다.
2025.01.13 - [Database/MySQL] - Docker에서 MySQL 세팅하기
도커 컨테이너는 로컬 시스템 위에서 실행되지만, 컨테이너 내부는 도커 엔진에 의해 생성된 가상 네트워크에 속한다. 컨테이너는 고유한 IP 주소를 할당 받을 수 있지만, 이 IP 주소는 도커가 관리하는 가상 네트워크에서만 유효하다. 호스트에서는 컨테이너의 IP 주소로 직접 접근할 수 없으며, 포트 포워딩(포트 매핑) 같은 네트워크 설정을 통해 컨테이너에 접근해야한다.
출처: https://shout-to-my-mae.tistory.com/402
둘 다 8.0.4 버전인 것을 보여주고 있음을 알 수 있다.
root@8e3ce86d5d64:/realmysql8# mysql --version
mysql Ver 8.0.40 for Linux on x86_64 (MySQL Community Server - GPL)
'Database > MySQL' 카테고리의 다른 글
[Real MySQL 8.0]MySQL 8.0과 Docker - 사용자 생성 (1) | 2025.02.06 |
---|---|
[Real MySQL 8.0]MySQL 8.0과 Docker - 설정 파일 (0) | 2025.01.17 |
[Real MySQL 8.0]MySQL 8.0과 Docker - 업그레이드 (5.7에서 8.X으로) (1) | 2025.01.17 |
Docker에서 MySQL 세팅하기 (0) | 2025.01.13 |
MySQL 비밀번호 변경하기 (0) | 2024.07.11 |