MySQL

    [Mysql] 날짜 시간 더하기, 빼기 (DATE_ADD, DATE_SUB)

    [Mysql] 날짜 시간 더하기, 빼기 (DATE_ADD, DATE_SUB)

    특정 날짜, 시간에서 일정 초,분,시간을 더하거나 빼야하는 경우 더하기 DATE_ADD(날짜 시간, INTERVAL 숫자 단위) SELECT DATE_ADD(NOW(), INTERVAL 1 SECOND); # 1초 SELECT DATE_ADD(NOW(), INTERVAL 1 MINUTE); # 1분 SELECT DATE_ADD(NOW(), INTERVAL 1 HOUR); # 1시간 빼기 DATE_SUB(날짜 시간, INTERVAL 숫자 단위) SELECT DATE_SUB(NOW(), INTERVAL 1 SECOND); # 1초 SELECT DATE_SUB(NOW(), INTERVAL 1 MINUTE); # 1분 SELECT DATE_SUB(NOW(), INTERVAL 1 HOUR); # 1시간 NOW()..

    [Mysql] mysql에서 현재 연결된 connection 찾기

    Node.js와 Mysql사이에 발생한 Connection lost 문제를 알아보던 중 사용한 mysql 명령어들을 정리한다. 현재 연결된 Thread 개수 show status like 'Threads_connected'; 현재 실행중인 Thread 개수 show status like 'Threads_running'; 최대 가능한 connection 개수 show variables like 'max_connections'; 현재 연결된 connection 목록 show full processlist;

    [Docker] Mysql 여러개 관리하기

    [Docker] Mysql 여러개 관리하기

    현재 한 프로젝트에서 DB를 여러개 사용하고 있다. 한 Host의 한 Port만 사용하는게 아닌, 여러 DB를 병렬적으로 사용중이다. 이와 유사한 환경에서 connection 테스트를 하기 위해 여러 port의 mysql을 만들려고 했는데, 기존에는 homebrew를 이용하여 port:3306의 mysql 서버 1개만 사용했었기때문에 Docker를 사용했다. Docker를 사용하면 port를 달리해서, 여러 mysql 서버를 관리할 수 있다. docker run -d -p {PORT}:3306 --name {DB_NAME} -e MYSQL_ROOT_PASSWORD={DB_PASSWORD} -d mysql # docker run -d -p 3307:3306 --name testdb -e MYSQL_ROOT..

    [MySql] 숫자/문자 자리수 맞추기 (LPAD, RPAD)

    날짜의 경우, 주로 고정된 자리수로 표기하게 된다. 한자리 숫자인 경우 앞에 0이 붙어야한다. 예를 들어 2-28로 표기하지 않고, 02-28과 같이 표기하는 것을 sql을 이용해보면 LPAD('값', '2', '0') # 값, 자리수, 빈값에 넣을 문자 LPAD는 자리수를 맞추고, 남은자리에 3번째 파라미터의 값을 채워넣게된다. SELECT LPAD(2, '2', '0'); # result: '02' SELECT LPAD(1, '5', '0'); # result: '00001' LPAD는 왼쪽이라면, RPAD는 값의 오른쪽에 자리수를 맞춰서 문자를 넣는다. SELECT RPAD(1, '2', '0'); # result: '10' SELECT RPAD(100, '5', '0'); # result: '10..

    [MySql] GROUP BY 내부 정렬하기

    [MySql] GROUP BY 내부 정렬하기

    각 그룹내에서 랜덤한 행, 또는 특정조건으로 정렬을 해야하는 경우 나는 seedIdx컬럼으로 GROUP BY를 하고, 그룹내에서 stage를 랜덤하게 추출하고 싶다. SELECT * FROM PlantImg; 아주 단순하게 생각해서, 정렬(ORDER BY)과 그룹화(GROUP BY)를 동시에 해보면 SELECT idx, seedIdx, stage FROM PlantImg GROUP BY seedIdx ORDER BY RAND(); 이렇게 GROUP BY가 먼저 수행되기때문에 그루핑된 행들이 정렬되게 된다. 그래서 stage는 내부에서 정렬이 되지 않고 모두 각 그룹의 첫번째 행인 stage=1이 나오게 되었다. 해결방법 SELECT seedIdx, (SELECT stage FROM PlantImg WHE..

    [Spring Boot][Gradle] 실행 시 Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. 에러

    [Spring Boot][Gradle] 실행 시 Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. 에러

    문제 Spring Initializr을 이용하여 프로젝트 생성 후, 추가설정 없이 바로 실행했더니 Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2021-09-06 16:31:50.532 ERROR 20275 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Failed to configure a DataSource: 'url' att..

    [Datagrip] Test Connection 시, Server returns invalid timezone. Need to set 'serverTimezone' property. 에러

    [Datagrip] Test Connection 시, Server returns invalid timezone. Need to set 'serverTimezone' property. 에러

    문제 localhost에 mysql세팅한 뒤, Datagrip으로 접속하려니 Test Connection에서 Server returns invalid timezone. Need to set 'serverTimezone' property. 이런 에러가 발생했다. 처음보는 에러였는데, 나는 새로 구축한 mysql이 문제인 줄 알고 재설치까지 할...뻔! 했지만 다행히 mysql 문제는 아니었고, Datagrip timezone문제였다.. ^-^ 해결방법 Test Connection을 수행하던 화면에서 상단을 보면 Advanced가 있다. Advanced에서 serverTimezone을 Asia/Seoul로 설정해주면 해결! 바로 General로 돌아가서 Test Connection 해보면, 빠르게 반영되어 ..

    [Mysql] 현재 날짜 기준으로 특정기간만 가져오기

    최근본 물품 API 구현 중, 최근 6개월에 대해서만 조회를 해야했다. TIMESTAMPDIFF를 이용하면 두 날짜의 차이를 계산할 수 있다 TIMESTAMPDIFF(MONTH , now(), '컬럼')>-6; WHERE 절에 위 코드를 추가해주면 된다, '컬럼' 위치에는 특정 날짜 컬럼이나, 구체적인 날짜가 들어가면 된다 MONTH대신 YEAR, DAY, WEEK, HOUR 등 단위변경도 가능하다 날짜까지 아직 남은 경우는 양수로 출력되고, 해당날짜가 지난 경우는 음수로 출력된다 예제) TIMESTAMPDIFF(WEEK , now(), createdAt)>-10; TIMESTAMPDIFF(WEEK , now(), '2021-04-03')

    [Datagrip][RDS] Datagrip에서 DROP TABLE 안될 때(Connection refused)

    [Datagrip][RDS] Datagrip에서 DROP TABLE 안될 때(Connection refused)

    Datagrip에서 조회, 데이터 추가는 되는데 DROP TABLE은 수행되지 않을 때가 있다 Connection refused 해결방법 RDS endpoint를 이용하여 터미널에서 접속하여 DROP을 수행할 수 있다 mysql -u {username} -p -h {endpoint} use {DB_name}; //DB선택 SHOW TABLES; //table목록 확인 DROP TABLE {table_name}; //table 삭제 삭제 성공!

    [Datagrip]connection timed out

    [Datagrip]connection timed out

    에러 메세지(Datagrip) java.net.connectexception operation timed out (connection timed out). 에러 메세지(Node.js) unhandledpromiserejectionwarning: error: connect etimedout Express에서 디비 타임아웃이 떠서 Datagrip 들어가보니 Datagrip 에서 접속이 안되고 테이블 불러오는 것도 안되서 RDS 인스턴스 상태 확인도 다시 해봤는데 여전히 안되었다... 해결 와이파이 변경하니 됨 잠깐 다른 곳에 와서 하고 있었는데 방화벽 같은게 있었나보다 핫스팟으로 하는중