1. MySQL, Workbench 설치

0. 학습 목표
→ 우분투에 MySQL 서버를 설치하고, root 계정에 비밀번호를 설정해 Workbench로 접속하는 상태까지 만듭니다.
0.1 이번 글에서 다룰 내용
이번 글은 실습 중심 강의입니다.
Ubuntu 24.04 LTS 기본 저장소(MySQL 8.0) 기준으로 진행합니다.
설치 자체보다 학생들이 실제로 막히는 지점 — 설치가 꼬였을 때의 완전 삭제, root 계정에 비밀번호로 접속이 안 되는 이유(auth_socket) — 를 함께 다룹니다.
| 구분 | 내용 |
| 이해할 것 | 완전 삭제가 필요한 이유, auth_socket과 비밀번호 인증의 차이, ERROR 1698의 원인 |
| 만들 것 | 비밀번호 인증으로 접속 가능한 MySQL 서버 + Workbench 접속 환경 |
강의 흐름은 다음과 같습니다.
MySQL 완전 삭제 → 문제 발생 시 초기화하는 방법 (반복 연습용)
MySQL 설치 → 패키지 최신화부터 서비스 상태 확인까지
보안 설정 → mysql_secure_installation 질문별 답변
root 계정 설정 → auth_socket을 비밀번호 인증으로 변경
Workbench 설치 → GUI 도구로 접속 확인
1. MySQL 완전 삭제
→ 설치가 꼬였을 때 초기 상태로 되돌리는 절차를 익힙니다. 처음 설치하는 경우 이 챕터는 건너뛰어도 됩니다.
1.1 설치된 MySQL 패키지 확인
MySQL은 설치가 한 번 꼬이면 그 위에 재설치해도 이전 설정이 남아 같은 오류가 반복됩니다.
그래서 패키지 + 설정 파일 + 데이터 디렉토리까지 지우는 완전 삭제 절차를 먼저 익혀둡니다.
환경설정을 반복 연습할 때도 이 절차로 초기화합니다.

▶ 지금 해보세요
- 실행 중인 MySQL 서비스를 정지합니다:
sudo systemctl stop mysql - 설치된 패키지를 확인합니다:
dpkg -l | grep mysql - 아래 명령으로 패키지를 완전 삭제합니다.
1.2 MySQL 제거 방법
# purge 옵션으로 패키지와 설정 파일까지 완전 삭제
sudo apt-get remove --purge 'mysql*' -y
# 더 이상 필요 없는 의존 패키지 정리
sudo apt autoremove -y
# 설정 파일, 데이터, 로그 디렉토리까지 청소
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql
# 불필요한 패키지와 캐시 정리 (인자 없이 실행)
sudo apt-get autoremove -y
sudo apt-get autoclean
💡 팁: 'mysql*'은 반드시 따옴표로 감쌉니다. 따옴표가 없으면 셸이 현재 폴더에서 mysql로 시작하는 파일 이름을 먼저 찾아 엉뚱한 값으로 바꿔버립니다. 예를 들어 홈 폴더에 mysql_backup.sql이 있으면 그 파일명이 패키지명으로 전달되어 오류가 납니다.
autoremove와 autoclean은 패키지명을 인자로 받지 않습니다. /var/lib/mysql을 지우면 저장한 데이터베이스가 모두 사라지므로, 남길 데이터가 있다면 먼저 백업합니다.
1.3 제거 확인

✔ 확인 기준: dpkg -l | grep mysql을 다시 실행했을 때 아무것도 출력되지 않으면 완전 삭제가 끝난 것입니다. 남은 패키지가 보이면 sudo apt-get remove --purge [패키지명]으로 개별 삭제합니다.
2. MySQL 설치
→ 패키지를 최신화하고 MySQL 서버를 설치한 뒤, 서비스가 정상 동작하는지 확인합니다.
2.1 패키지 최신화
# 패키지 목록 최신화
sudo apt-get update
# 설치된 패키지 업그레이드
sudo apt-get upgrade -y
# 불필요한 패키지 정리 및 캐시 삭제
sudo apt-get autoremove --purge -y
sudo apt-get clean
| 명령어 | 설명 |
| update | 패키지 목록 최신화 |
| upgrade | 설치된 패키지 업그레이드 |
| -y | 모든 확인을 자동으로 수락 (필요 시 생략) |
💡 팁: dist-upgrade는 커널까지 함께 올라가 실습용 VM이나 공용 PC에서 부팅 문제를 일으킬 수 있습니다. 수업 환경에서는 upgrade로 충분합니다.
2.2 MySQL 서버 설치와 상태 확인

▶ 지금 해보세요
- MySQL 서버를 설치합니다:
sudo apt install mysql-server -y - 서비스를 시작합니다:
sudo systemctl start mysql - 부팅 시 자동 실행을 설정합니다:
sudo systemctl enable mysql - 동작 상태를 확인합니다:
systemctl status mysql
💡 팁: systemctl status는 화면이 멈춘 것처럼 보이는 pager 모드로 열립니다. 초록색 active (running)을 확인했다면 q 키를 눌러 빠져나옵니다. 여기서 멈춰 있는 경우가 정말 많습니다.
설치 중 의존성 오류가 나면 sudo apt --fix-broken install로 해결한 뒤 다시 설치합니다. 정지가 필요할 때는 sudo systemctl stop mysql을 사용합니다.
3. MySQL 보안 설정
→ mysql_secure_installation을 실행하고 질문별로 학습 환경에 맞게 답합니다.

# MySQL 보안 설정 실행
sudo mysql_secure_installation
실행하면 아래 질문이 순서대로 나옵니다. 학습 환경 기준 답변입니다.
| 순서 | 질문 | 입력 | 결과 |
| 1 | setup VALIDATE PASSWORD component? (비밀번호 검증 플러그인 설치?) |
n | 복잡도 검사 플러그인 설치 안 함 |
| 2 | Remove anonymous users? (익명 사용자 삭제?) |
n | 로컬 테스트용으로 익명 사용자 유지 |
| 3 | Disallow root login remotely? (root 원격 로그인 금지?) |
n | 원격 root 접속 허용 |
| 4 | Remove test database and access to it? (test DB 삭제?) |
n | 학습/개발용으로 test DB 유지 |
| 5 | Reload privilege tables now? (설정 즉시 반영?) |
y | 권한 테이블 즉시 재적용 |
💡 팁: 환경에 따라 실행 시 root 비밀번호 설정을 먼저 요구하거나 질문 순서가 표와 다르게 나올 수 있습니다. 화면의 영문 문구를 읽고 어떤 질문인지 판단하세요.
위 답변은 학습용 기준입니다. 실무 서버라면 2·3·4번은 반드시 y로 답해 익명 계정 삭제, root 원격 접속 차단, test DB 삭제를 해야 합니다.
4. root 계정 설정
→ root에 비밀번호로 접속이 안 되는 이유를 이해하고, 인증 방식을 바꿔 비밀번호(1234) 접속을 만듭니다.
4.1 root에 비밀번호로 접속하지 못하는 이유

설치 직후 mysql -u root -p를 실행하면 이 오류가 납니다.
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Debian/Ubuntu 계열에서는 root@localhost 계정이 비밀번호 대신 OS 사용자 인증(auth_socket) 으로만 로그인하도록 기
본 설정되어 있기 때문입니다.

그래서 처음에는 sudo mysql로만 접속할 수 있습니다. sudo로 리눅스 root 권한을 얻으면 MySQL이 OS 계정을 신뢰해 비밀번호 없이 로그인시켜 주는 구조입니다.
4.2 사용자 인증 방식 확인하기

SELECT User, Host, plugin FROM mysql.user;
| 인증 방식 | 설명 |
| auth_socket | 리눅스 OS 계정 기반 인증. 리눅스 로그인 사용자와 동일한 이름의 MySQL 계정으로 인증하며 비밀번호가 필요 없습니다. sudo로만 접속 가능 |
| caching_sha2_password | MySQL 8.0의 기본 비밀번호 인증. 보안성이 높고 최신 커넥터·Workbench와 호환 |
| mysql_native_password | 구형 비밀번호 인증. 오래된 DB 관리 도구, 구버전 커넥터와의 호환 목적일 때만 사용 |
4.3 인증 방식 변경과 비밀번호 설정

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '1234';
EXIT;

auth_socket이 caching_sha2_password로 바뀌면서 비밀번호가 1234로 설정됩니다.
이제부터 sudo 없이 mysql -u root -p로 접속할 수 있습니다.
💡 팁: 예전 자료에는 mysql_native_password로 바꾸는 예제가 많지만, 이 방식은 MySQL 8.4부터 기본 비활성화, 9.x에서 제거되었습니다. 이후 강의에서 사용할 mysql-connector-python 최신 버전과 Workbench는 모두 caching_sha2_password를 지원하므로 이 방식으로 통일합니다.
FLUSH PRIVILEGES;는 여기서 불필요합니다. 권한 테이블을 파일에서 직접 수정했을 때 다시 읽어오는 명령이며, ALTER USER 같은 SQL 명령은 즉시 반영됩니다.
그리고 비밀번호 1234는 실습용입니다. 실무에서는 절대 사용하지 않습니다.
▶ 지금 해보세요
sudo mysql로 접속합니다.SELECT User, Host, plugin FROM mysql.user;로 root의 plugin이 auth_socket인지 확인합니다.- 위
ALTER USER명령을 실행하고EXIT;로 나옵니다. mysql -u root -p를 실행하고 비밀번호 1234를 입력합니다.
4.4 MySQL 접속 확인

✔ 확인 기준: mysql -u root -p 입력 후 비밀번호 1234로 mysql> 프롬프트가 뜨면 성공입니다. 비밀번호 입력 시 화면에 아무것도 표시되지 않는 것이 정상입니다. 키보드가 안 눌리는 것이 아닙니다.
5. MySQL Workbench 설치와 접속 확인
→ GUI 도구를 설치하고, 4강에서 만든 계정으로 접속해 설치 전체를 마무리합니다.
5.1 MySQL Workbench 설치

# snap으로 Workbench 설치
sudo snap install mysql-workbench-community
# 키링 접근 권한 연결 (비밀번호 저장 오류 예방)
sudo snap connect mysql-workbench-community:password-manager-service
💡 팁: snap 버전은 격리(confinement) 정책 때문에 비밀번호 저장 시 Could not store password: The name org.freedesktop.secrets was not provided 오류가 자주 발생합니다. 두 번째 명령을 설치 직후 한 번 실행해 두면 예방됩니다.
5.2 MySQL Workbench 에서 MySQL DB 접속

▶ 지금 해보세요
- Workbench를 실행하고 새 연결(+)을 누릅니다.
- Hostname
127.0.0.1, Port3306, Usernameroot를 입력합니다. - Test Connection을 누르고 비밀번호 1234를 입력합니다.
0.1 MySQL Workbench 설치

✔ 확인 기준: "Successfully made the MySQL connection" 팝업이 뜨면 이번 강의의 목표가 모두 완료된 것입니다.
→ 다음 강의 (2강): 이번에 접속한 Workbench 화면에서 데이터베이스와 테이블을 직접 만들고, 이후 PySide6 앱에서 사용할 스키마의 뼈대를 잡습니다.