환경
- Window 11 Pro
설치 프로그램
- MySQL 5.7.43 Windows (X86, 64-bit)
0. 상황
MySQL이 my.ini 파일의 변경 사항을 제대로 반영하지 않았다.
그 이유는 MySQL 서비스가 총 2개였는데,
MySQL 서비스는 실행 되었지만 MySQL57 서비스는 실행되지 않았기 때문이다.
MySQL57이 아래 경로의 my.ini 파일의 변동사항을 먹는 서비스인데,
MySQL57 서비스를 실행하려고 하면 알 수 없는 이유로 중단이 되어버렸다.
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
MySQL 서비스는 실행이 되지만 위 경로의 my.ini 파일이 반영되지 않았고,
MySQL 실행 파일이 있는 위치는 아래 경로에 my.ini 파일을 임의로 만들어 생성하였을 때는 서비스가 실행되지 않았다.
C:\Program Files\MySQL\MySQL Server 5.7
그래서 MySQL57 서비스와 MySQL 서비스의 포트가 3306으로 겹쳐서 실행되지 않는 것이 이유인가 싶어서
아래와 같은 액션을 취했다.
- MySQL 서비스 중단 후 MySQL57 서비스 실행 : 실패
- MySQL57 서버 임의 삭제 후 MySQL 서비스 실행 및 my.ini 파일 변경 후 반영 여부 확인 : 실패
결국 MySQL 서비스들을 모두 삭제하고 재설치하기로 마음먹었다.
이전에 한 번 MySQL 삭제 후 재설치하는 과정에서 난항을 겪었기 때문에 긴장했지만, 결론적으로는 성공했다.
1. 기존 MySQL 5.7 서비스 삭제
1-1. 제어판
제어판에 있는 MySQL 관련 프로그램들을 모두 삭제한다.
- MySQL Documents 5.7
- MySQL Examples and Samples 5.7
- MySQL Installer - Community
- MySQL Router 8.0
- MySQL Server 5.7
- MySQL Shell 8.0.34
- MySQL Workbench 8.0 CE
1-2. 파일 (Documents)
아래 경로에 위치한 MySQL과 관련된 파일들을 모두 삭제한다.
( * 백업본이나 이름만 MySQL이 들어갈 뿐, MySQL 서비스에 영향을 끼치는 파일이 아닌지 확인 필수)
//설치 파일 경로
C:\Program Files\MySQL
C:\Program Files(x86)\MySQL
//데이터 파일 경로
C:\ProgramData\MySQL
//숨김 파일 해제 후 삭제할 것
C:\Users\(User명)\AppData\Roaming\MySQL
1-3. 환경 변수
Window + R을 누른 후 'sysdm.cpl' 명령어를 입력하여 시스템 속성을 실행한다.
이후 고급 > 환경 변수(N)을 클릭하여 환경 변수 창을 실행한다.
기존에 MySQL을 설치하면서 설정했던 시스템 변수와 값들을 모두 삭제해줘야한다.
시스템 변수(S)에 아래의 변수를 클릭하여 MySQL과 관련한 값들을 찾아 삭제한다.
- MYSQL_HOME
- Path
나의 경우, MYSQL_HOME은 따로 설정하지 않아서 삭제할 필요가 없었다.
대신 Path 변수에서 MySQL과 관련된 값이 남아 있어 아래와 같이 삭제하였다.
MySQL과 관련된 변수 값을 찾아 삭제 > 확인 버튼 눌러주면 된다.
1-4. 레지스트리 편집기
Window의 경우, Window + R 누른 후 'regedit' 명령어를 입력하여 레지스트리 편집기를 실행한다.
regedit
그리고 Ctrl + F를 누른 후 'MySQL'을 입력하여 mysql과 관련한 모든 파일을 찾아 제거한다.
2. MySQL 재설치
2-1. MySQL 5.7 프로그램 다운받아 설치하는 법
아래의 링크를 참고하여 MySQL 5.7 프로그램을 다운받아 설치하자.
https://soheepark.tistory.com/157
▶ MySQL 5.7 설치 중 Apply Configuration > Initializing database (may take a long time) 에러
에러 메시지
MySQL 설치 도중 'Initializing database'에서 에러가 났다.
에러 메시지는 아래 이미지에 표시한 Log 탭을 클릭하면 확인할 수 있다.
2024-07-25T06:04:30.093805Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
2024-07-25T06:04:30.094419Z 0 [ERROR] Fatal error: Failed to initialize ACL/grant/time zones structures or failed to remove temporary table files.
2024-07-25T06:04:30.094974Z 0 [ERROR] Aborting
에러 원인
데이터베이스를 초기화하는 단계에서 오류가 생긴 것은,
보통 구글링을 하면 PC 이름이 '한글'이어서 생긴 오류라지만 나 같은 경우는 달랐다.
Log 탭에서 메시지를 보니 MySQL 서버가 mysql.user 테이블을 찾을 수 없어 발생한 오류였다.
해결
- 아래 경로의 모든 파일 삭제
// 아래 경로의 모든 파일 삭제
C:\Program Files\MySQL\MySQL Server 5.7\bin\Data
C:\ProgramData\MySQL\MySQL Server 5.7\Data
- MySQL 설정 파일 내 'datadir' 항목 확인
MySQL 설정 파일은 my.ini 또는 my.cnf인데, 나는 my.ini 파일이 아래의 경로에 위치해있다.
C:\ProgramData\MySQL\MySQL Server 5.7\Data
my.ini에서 [mysqld] 섹션에서 datadir 항목을 찾아 데이터 디렉터리 위치를 확인한다.
[mysqld]
datadir=C:\ProgramData\MySQL\MySQL Server 5.7\Data
- MySQL 서버 실행 중인지의 여부 확인
만약 MySQL 서버가 실행 중이라면 cmd를 관리자 권한으로 실행한 후, 아래 명령어를 입력하여
MySQL 서버를 중단한다.
net stop MySQL
나는 MySQL 서버가 실행되지 않았던 시점이었다.
- cmd 관리자 권한 실행 후, 명령어에 데이터 디렉터리 명시
초기화 명령어에 데이터 디렉터리를 명시적으로 지정하는 명령어를 입력한다.
mysqld --initialize-insecure --console --datadir="C:\ProgramData\MySQL\MySQL Server 5.7\Data"
- MySQL 서비스 시작
관리자 권한으로 실행한 cmd에서 MySQL 서비스를 시작하는 명령어를 입력한다.
net start MySQL
이제 서비스 실행이 잘 될 것이다.
- MySQL 루트 비밀번호 설정
아래 명령어를 입력해서 MySQL에 접속한다.
mysql -u root
다음 SQL 명령어를 실행하여 비밀번호를 설정한다.
ALTER USER 'root'@'localhost' IDENTIFIED BY '새로운비밀번호';
root 비밀번호는 1234 국룰인거 알쥬?
무조건 기억하기 쉬운 것으로 설정해놓는 것이 좋을 것이다.
3. 환경 변수 설정
Window + R을 누른 후 'sysdm.cpl' 명령어를 입력하여 시스템 속성을 실행한다.
이후 고급 > 환경 변수(N)을 클릭하여 환경 변수 창을 실행한다.
MySQL을 설치하고 난 이후 시스템 변수와 값들을 설정해줘야한다.
시스템 변수(S)에 아래의 변수를 클릭하여 MySQL 값을 입력하여 설정해주자.
- Path
나의 경우, MYSQL_HOME은 따로 설정하지 않았다.
대신 Path 변수에서 아래의 MySQL 값을 입력하여 설정을 완료하였다.
C:\Program Files\MySQL\MySQL Server 5.7\bin
4. Character, Collation을 utf8로 수정
MySQL 5.7을 설치하면 기본 Character, Collation이 latin1, latin1_swedish_ci로 설정되어 있을 것이다.
나중에 큰 에러가 생길 수도 있기 때문에 (난 지금 났다) 각각 utf8, utf8_general_ci로 설정해주자.
4-1. 국가 또는 지역 > 시스템 로캘 변경(C)
설정 > 시간 및 언어 > 언어 및 지역 > 관련 설정 > 기본 언어 설정
국가 또는 지역 > 시스템 로캘 변경(C)
지역 설정 > UTF-8 사용 체크박스 클릭
확인 후 PC 재부팅하면 된다.
4-2. MySQL 설정 파일 수정
MySQL 설정 파일인 my.ini 파일의 character, collation을 utf-8로 수정해야 한다.
MySQL 서버 중단
MySQL 서비스를 중단하고 시작하는 방법은 아래와 같은 방법들이 있는데, 이 중 하나를 골라 실행하면 된다.
- 관리자 권한으로 cmd 창 실행 후 아래 명령어 입력
net stop mysql
- 또는 window + R 누른 후 'services.msc' 입력 > 서비스 창 실행 > MySQL 서비스 찾아 중단 클릭
my.ini 파일 수정 후 저장
C:\ProgramData\MySQL\MySQL Server 5.7
위 경로 접속 후 my.ini 파일 찾아 실행시키고 아래 영역에 값 수정 및 추가 후 저장
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
skip-character-set-client-handshake
# mysqlx_port=0.0
[mysqldump]
default-character-set=utf8
참고로 mysqlx_port=0.0으로 설정되어 있다면, 올바른 값을 넣어주거나 주석 처리해주면 된다.
MySQL 서버 시작
MySQL 서비스를 시작한다.
- 관리자 권한으로 실행시킨 cmd에 아래 명령어 입력
net start mysql
- 또는 서비스 창에서 MySQL을 찾아 시작을 누르면 된다.
5. MySQL Character, Collation 확인
5-1. MySQL root 접속
cmd에 아래 명령어 입력 후 설정한 비밀번호 입력
mysql -uroot -p
5-2. Character, Collation 변경 상태 확인
아래 명령어를 입력하여 Server, DB, Client, Conn.의 변경 된 characterset 상태를 확인한다.
status
utf-8로 변경했으니 모두 'utf8'로 결과가 나와야 정상이다.
mysql> status
--------------
mysql Ver 14.14 Distrib 5.7.43, for Win64 (x86_64)
Connection id: 23
Current database:
Current user: root@localhost
SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
Using delimiter: ;
Server version: 5.7.43-log MySQL Community Server (GPL)
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 1 hour 6 min 19 sec
Threads: 8 Questions: 2156 Slow queries: 0 Opens: 1561 Flush tables: 1 Open tables: 397 Queries per second avg: 0.541
정상적으로 잘 변경된 것을 확인할 수 있다.
그러나 dump 파일을 import한 스키마, 테이블, 컬럼들은 utf8로 설정되지 않는 경우가 있다.
그런 경우엔 따로 스키마, 테이블, 컬럼 별로 SQL 명령어를 입력하여 utf8로 변경해줘야한다.
해당 상황은 아래의 링크를 참고하길 바란다.
▶ MySQL dump 파일 import 하는 방법
https://soheepark.tistory.com/197
▶ MySQL 특정 스키마 내 테이블, 컬럼 character, collation UTF8로 변경하는 방법 (SQL문 입력)
https://soheepark.tistory.com/199
'[Etc]' 카테고리의 다른 글
[Window/CMD] C 드라이브에서 D 드라이브로 경로 변경하는 방법 (0) | 2024.08.13 |
---|---|
[Window/PuTTY] no supported authentication methods available (server sent publickey gssapi-keyex gssapi-with-mic) (0) | 2024.08.02 |
[Window/DBeaver] MySQL Dump 파일 가져오는 방법 (1) | 2024.07.23 |
[Eclipse] 'Send Classpath Notifications' has encountered a problem (0) | 2024.07.11 |
hELLO Tistory 블로그 스킨 적용하기 (1) | 2024.06.25 |