MySQL 8.x 계열을 기준으로 한 예제입니다. Aurora MySQL은 호환 버전과 관리 방식이 다르므로 엔진 버전을 먼저 확인합니다.
SELECT VERSION();
SHOW GLOBAL VARIABLES LIKE 'max_connections';
SHOW GLOBAL STATUS LIKE 'Threads_connected';
CREATE DATABASE app_db CHARACTER SET utf8mb4;
CREATE USER 'app_reader'@'localhost' IDENTIFIED BY '<SECRET>';
GRANT SELECT, SHOW VIEW ON app_db.* TO 'app_reader'@'localhost';
SHOW GRANTS FOR 'app_reader'@'localhost';
ALTER USER 'app_reader'@'localhost' IDENTIFIED BY '<NEW_SECRET>';
접속 host는 실제 앱 위치에 맞게 지정합니다. CREATE USER·GRANT·ALTER USER 이후 관행적으로 FLUSH PRIVILEGES를 붙일 필요는 없습니다.
ALTER DATABASE의 기본값 변경은 기존 테이블 내용을 변환하지 않습니다. 테이블 변환은 잠금·소요 시간·인덱스 길이·데이터 호환성을 검토한 뒤 별도 마이그레이션으로 수행합니다.
mysqldump -u <USER> -p --single-transaction --routines --triggers --events app_db > app_db.sql
mysql -u <USER> -p app_db < app_db.sql
single-transaction은 InnoDB 같은 트랜잭션 테이블에 해당하며 덤프 중 DDL 변경을 피합니다. 복구는 별도 검증 환경에서 먼저 수행합니다. 권한·GTID·tablespace 옵션은 원본과 대상 서버 조건에 맞춥니다.
SQL 파일의 모든 SET을 문자열 치환해 주석 처리하는 기존 예제는 제거했습니다.
조건에 키가 포함되는지와 영향 행 수를 먼저 확인합니다. 안전 업데이트 해제를 기본 해결책으로 사용하지 않습니다.
테이블 RENAME은 데이터베이스 전체 이름 변경과 다릅니다. 뷰·트리거·루틴·권한까지 포함한 이관 계획을 세웁니다.