MySQL Replication 트러블슈팅 – 인증 오류 (caching_sha2_password)
Trouble ShootingMySQLmasterslaveReplication
💥 문제 상황
서로 다른 EC2 서버에 구성한 MySQL Master-Slave Replication 환경에서,
Slave가 Master에 연결하지 못하며 다음과 같은 오류가 발생했습니다.
Last_IO_Errno: 2061
Last_IO_Error: Error connecting to source 'admin_ohy@10.0.2.6:3306'. This was attempt 1/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
Slave_IO_Running: Connecting 상태에서 멈추고, replication이 정상적으로 이루어지지 않음
🔍 원인 분석
MySQL 8.0부터 기본 인증 플러그인은
caching_sha2_password
해당 플러그인은 SSL을 사용하지 않으면 인증 자체를 거부
Slave가 Master에 암호화되지 않은 평문 연결을 시도했기 때문에 오류 발생
⚙ 해결 방법
✔ 방법 1: mysql_native_password
로 인증 방식 변경
my.cnf 수정
[mysqld]
# MySQL 사용자의 인증 플러그인을 mysql_native_password로 지정합니다.
authentication_policy=mysql_native_password
✔ 방법 2: SSL 인증서 기반 연결 설정
caching_sha2_password
를 유지하면서 SSL 인증서를 사용해 연결Master에 인증서 생성하고 Slave 복제 my.cnf 설정
Slave 실행 시 인증서 경로 마운트
인증서 생성
mkdir -p /etc/mysql/certs && cd /etc/mysql/certs
# 1. CA 생성
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem -subj "/CN=MySQL_CA"
# 2. Server 인증서
openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem -out server-req.pem -subj "/CN=MySQL_Server"
openssl x509 -req -in server-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
# 3. Client 인증서
openssl req -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem -out client-req.pem -subj "/CN=MySQL_Client"
openssl x509 -req -in client-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 02 -out client-cert.pem
# 4. 권한 설정
chmod 644 server-key.pem server-cert.pem ca.pem
Slave 서버로 인증서 복사
SSL 연결을 위해 Master에서 생성한 인증서를 Slave 쪽에도 복사해줍니다.
Slave에도 동일한 디렉터리 구조(
/etc/mysql/certs/
)가 있어야합니다.
scp /etc/mysql/certs/* root@{슬레이브 서버 IP}:/etc/mysql/certs/
Master my.cnf 수정
[mysqld]
# SSL 인증을 위한 CA, 서버 인증서, 서버 키 경로 설정
ssl-ca=/etc/mysql/certs/ca.pem
ssl-cert=/etc/mysql/certs/server-cert.pem
ssl-key=/etc/mysql/certs/server-key.pem
# 보안 연결(SSL)만 허용
require_secure_transport=ON
이제 docker run 시 인증서 경로를 마운트해주면 됩니다.
✅ 트러블슈팅 결과
기본 인증 플러그인
caching_sha2_password
사용으로 인해 SSL 미사용 시 인증 오류 발생Master에 인증서 생성 → Slave로 복사 → SSL 기반 연결 설정
Slave_IO_Running: Yes, SSL 적용 완료 상태로 복제 정상 작동 확인