Physicist, Programmer. What you eat, how you think, and most importantly what you have done become who you are. Who are you? and who will you be?
[IT/Programming]/Algorithm/Database
MySQL SQLException in Ubuntu, Linux
kipid2025. 4. 9. 07:12
반응형
# MySQL SQLException in Ubuntu, Linux
우분투, 리눅스에서 MySQL 을 써서 서버를 돌릴일이 생겼는데, 문제가 생긴걸 공유하려고 글 작성.
윈도우즈나 맥에서는 MySQL 의 Table name (테이블 이름) 이 대소문자를 구분 안했는데, 우분투/리눅스에서는 대소문자를 기본적으로 구분한다고 함.
그래서 초기에 설치할때부터 대소문자를 무시하도록 설정되도록 설치해야 함.
이거 때문에 MySQL DB Server 에 접속은 됐는데, 특정 Table 을 찾을 수 없다는 등의 SQLException 이 계속 났음.
## PH
2025-04-04 : First posting.
## TOC
## MySQL의 Global Variables 중에는 lower_case_table_names 라는 속성이 있음.
해당 변수는 0~2의 세가지 옵션이 있다.
```[.linenums]
0 (Linux/Unix 환경에서 default) : 데이터베이스 및 테이블 생성/조회시 대소문자 구분
1 (Windows 환경에서 default) : 대소문자 구분 안함 (전부 소문자로 변환)
2 (MacOS 환경에서 default) : 데이터베이스 및 테이블 생성 시 대소문자 구분, 조회 시 소문자로 변환
```/
MySQL install 후 lower_case_table_names = 1 로는 에러가 자꾸나서 어려운거 같고 lower_case_table_names = 2 로 설정해 줍시다.
```[.linenums]
sudo mysqld --initialize --lower_case_table_names=2
# mysql이 /etc 하위에 설치되었다고 가정할 때
sudo vi /etc/mysql/my.cnf
#아래 텍스트를 추가한다.
# 2로 변경한다고 가정할 때
[mysqld]
lower_case_table_names = 2
default-time-zone = '+00:00'
# /etc/mysql/mysql.conf.d/mysqld.cnf 파일도 수정
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
# 2로 변경한다고 가정할 때
[mysqld]
lower_case_table_names = 2
default-time-zone = '+00:00'
```/
이후 mysql을 재시작한다.
```[.linenums]
sudo systemctl restart mysqld
sudo mysql -u root -p # 초기 패스워드는 empty 일테니 그냥 enter 치면 접속 됨.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
FLUSH PRIVILEGES;
CREATE DATABASE `Recoeve01`;
USE `Recoeve01`;
CREATE USER 'eve'@'localhost' IDENTIFIED BY '{--password--}';
GRANT ALL ON `Recoeve01`.* TO 'eve'@'localhost';
FLUSH PRIVILEGES;
SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
exit;
```/
## Backup 된 database 불러오기
```[.linenums]
mysqldump --extended-insert=true -u root -p recoeve01 > mydump.sql
mysql -u root -p recoeve01 < mydump.sql
```/
## RRA