내가 필요해서 내가 적는 블로그

JAVA 백엔드 개발자의 기록들

반응형

DB 8

MySQL cascade / on delete cascade EaSY!! (연관 데이터 삭제 처리)

casCade 에 대해서 알아보자. 영어사전은 찾아보니, 작은폭포, 폭포처럼 물이 흐르다로 나온다. 모르는 단어가 있을 때 뜻먼저 찾아보는 것도 이해하는데 큰 도움이 주는 것 같다. casCade 기능자체가 foreign key가 걸린 '연관 데이터'를 삭제할 수 있게 하는 기능이다. 쉽게 말해 다른 두 테이블의 데이터가 A ← B 이런식으로 B가 A를 참조하고 있을 때, A를 삭제하면 폭포마냥 B까지 콸콸콸 삭제 해 버리는 기능이다. 직접 한번 테이블을 만들어 구현해보자. TEST 준비 위 사진처럼 테이블을 3개 준비했다. 최상위 company 테이블의 첫번째 행 '구글' 이라는 데이터를 삭제 예정이다. '구글' 이라는 행 삭제시 하위 테이블의 org1 / org2 데이터가 삭제 되야 되며, org1 ..

DB 2022.01.15

Deadlock found when trying to get lock; try restarting transaction

데드락이 발생했다. 결론부터 말하자면, 데드락을 유발하는 INSERT+SELECT 와 같은 쿼리를 분리하길 바란다. ### Error updating database. Cause: java.sql.SQLTransactionRollbackException: (conn=551) Deadlock found when trying to get lock; try restarting transaction ### The error occurred while setting parameters ### SQL: INSERT INTO TableA ( ID , name , phone) SELECT ?, ?, ? IFNULL(MAX(id_sequence), 0) + 1 FROM TableA WHERE name = ? ### Ca..

DB 2022.01.07

Cause: java.sql.SQLException: Disk full

### Cause: java.sql.SQLException: Disk full (/tmp/#sql_xxxx_0.MAI); waiting for someone to free some space... (errno: 28 "No space left on device") 어플리케이션 단에서 위와 같은 로그 발견시, Mysql/MariaDB 이 생성하는 Temp file 이 위치한 곳의 Disk 용량이 full 상태가 되었다. TMP? (Oracle PGA와 동일) tmp_table ▶ DB 내부에 위치한 임시 메모리 테이블. 쿼리 실행중 session 혹은 connection이 종료되면 자동으로 삭제가 됨. tmp_file ▶ tmp_table 메모리 설정값을 초과하는 경우 file 로 만들어져서 Disk 로 ..

DB 2021.11.30

MySQL error 1040 "Too many connections" & Increase max connections 에러 해결

DB에 연결된 클라이언트의 컨넥션이 초과되어 나타나는 메세지이다. 보통 localtest 기준으로 프로그램을 사용할 때는 상관 없지만, 운영서버에서는 DB서버에 연결되는 컨넥션수의 증가로 인해 기본 151의 값이면 무조건 발생하는 에러이다. 설정하고 가자! ★ 현재 컨넥션 설정 보기 SHOW VARIABLES LIKE "max_connections"; ★ connections value 늘려주기 SET GLOBAL max_connections = 500; * windows 사용자는 접속 툴에서 위의 쿼리 Go Go~ ! * linux 계열 사용자는 my.cnf 파일에 적용 ( 일반적으로 /etc/my.cnf 경로에 위치 함. ) 끄읏! 본문 내용이 도움이 되셨다면, 아래의 공감버튼을 눌러주세요. 정보 공..

DB 2021.09.30

MySQL , MariaDB 쿼리 로그 보기

DB에 root 로 접속을 한뒤, 아래의 명령어로 로그 설정을 확인하자! SHOW VARIABLES LIKE 'general%; SHOW VARIABLES LIKE 'log_output%'; 로그 설정 OFF / 생성되는 로그파일의 위치가 보일 것이다. 아래의 명령어로 셋팅을 해보자. SET GLOBAL general_log = 'ON'; SET GLOBAL general_log_file = 'D:\general.log'; * 참고로 windows 사용자의 경우 C 드라이브에는 권한 이슈로 파일이 생성되지 않을수도 있다. * DB 재시작을 하지 않아도 바로 적용이 된다. 생성된 파일을 열어보자! 끄읏. 본문 내용이 도움이 되셨다면, 아래의 공감버튼을 눌러주세요. 정보 공유를 위한 포스팅에 큰 힘이 됩니다..

DB 2021.09.30

MySQL 접속 원리에 관한 고찰(feat. 프로젝트)

어우 솔루션에 VIEW 테이블을 가지고 있어서 이놈 저놈 오픈해 달라는 요청이 많다. 어쨋든, DB에 접근하는 방법은 다양하다. - 접속 Tool 의 활용 (PLSQL, Toad, Orange, dbeaver, HeidiSQL, SQL Developer 등등...) - 커멘더 활용 등 과연 특정 서버에 있는 DB에 접속이 이루어 질 때, 어떻게 접근을 할까? 그 답은 내부서버에서 DB에 접근을 하던지 외부에서 DB에 접근을 하던지 mysql.sock 이라는 파일을 통해 DB로 접근하게 된다. (Windows 계열은 my.ini 파일로 관리 / Linux 계열은 my.cnf 설정파일에 mysql.sock 파일 경로를 박제하여 관리) DB 접속툴을 사용해서 특정 서버에 있는 MySQL 에 접속한다고 가정을 ..

DB 2021.09.29

cmd MySQL 접속하기 !!

오랜만에 SQL Dump 파일을 밀어 넣을려고 CMD를 켜고 습관성 mysql -uroot -p..... 어라? 노트북 교체를 했더니 mysql 명령어를 못알아 먹었다. ㅠㅠ 자! 이제 mysql 명령어를 windows 가 알아먹도록 설정하여 보자! 내컴퓨터 우클릭 → 속성 → 고급 시스템 설정 → 시스템 속성 → 고급탭 → 환경변수 환경변수 설정하는 부분은 JAVA_HOME 이 있는 부분이기도 하다. 시스템 변수에 Path를 누르고 편집을 클릭! 위의 사진과 같이 데이터베이스의 설치경로(/bin) 를 새로 만들어 주도록 하자! 이제 테스트를 해보면~ windows키 + R로 CMD창을 열고, mysql -uroot -p Enter password : 패스워드 입력을 하면~ show databases; ..

DB 2021.09.29

MariaDB 계정 생성, 조회, 비밀번호 변경, 권한 조회, 권한 변경

DB 사용자 계정을 만들어 보자 ★ 계정 생성 CREATE USER 'iniw'@'%' IDENTIFIED BY 'password'; CREATE USER 'iniw'@'localhost' IDENTIFIED BY 'password'; CREATE USER 'iniw'@'192.168.0.1' IDENTIFIED BY 'password'; * 계정은 'ID'@'Host' 의 형식으로 ID+접속자의 Host 정보로 이루어 진다. * % → 모든접속허용 / localhost → DB가 설치된 서버에서만 접속 가능 / '192.168.0.1' → 특정IP에서 접속 가능 * 위의 사진은 1개의 동일 ID 이지만, DB에 접속하는 곳의 Host에 따라 3개의 유니크한 계정으로 볼 수 있다. ★ 계정 조회 SELE..

DB 2021.09.28
반응형