Database 116

[MySQL] 명령줄에서 쿼리 실행하기

mysql-client를 사용하면 보통 접속할 서버와 사용자 정보를 지정하여, mysql 서버에 접속한 뒤 SQL Query 를 실행한다. 하지만 스크립트 등에서 활용하기 위해 MySQL 서버 접속 후에 쿼리를 실행하는 것이 아니라, 명령 실행 시 쿼리를 전달하여 그 결과를 받고 싶다면 -e, --execute 옵션을 사용하여 실행할 쿼리를 전달할 수 있다. mysql-cli는 옵션으로 전달된 쿼리를 실행하고 종료된다. mysql -e "QUERY" mysql -u -p -e "QUERY" # 예시 mysql -e 'SELECT VERSION();' mysql -u root -p PASSWD test_db -e "SELECT VERSION();" 실행할 쿼리는 따옴표나 큰따옴표로 묶어주어야 한다. 실행할..

Database 2022.04.08

[MySQL] mysql-client local-infile 활성화

2022.04.06 - [MySQL] ERROR 2068 (HY000) : LOAD DATA LOCAL INFILE file request rejected due to restrictions on access. 글에서 구글링을 통해 조치한 내용과 공식 문서에서 안내한 내용이 조금 달랐다. 차이점은 다음과 같다. 구글링 공식문서 Group mysql, mysqld client Variables name local-infile loose-local-infile 이전 글에서는 운영 서버에 조치하느라 테스트하지 못했기 때문에, 이 글에서 공식 문서대로 조치했을 때도 mysql-client가 local-infile을 활성화하는지 확인해보려고 한다. 테스트한 서버 OS와 MySQL 클라이언트 버전은 아래와 같다. ..

Database 2022.04.07

[MySQL] ERROR 2068 (HY000) : LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.

리눅스에서 mysql-client를 사용해 LOAD DATA LOCAL INFILE 문을 실행했더니, 아래와 같은 에러가 발생하면서 정상 동작하지 않았다. 실행한 명령어 mysql -u -p -P -h < /path/use.sql 에러 메세지 ERROR 2068 (HY000) at line 2: LOAD DATA LOCAL INFILE file request rejected due to restrictions on access. 공식 문서를 확인해보니 LOAD DATA LOCAL에 잠재적인 보안 문제가 있어 서버와 클라이언트 측에 보안 요구사항이 존재하며, 관련하여 MySQL 서버와 클라이언트 양측에서 local-infile을 활성화하지 않은 게 원인이었다. 관련하여 확인하고 조치해본다. 참고로 버전은 ..

Database 2022.04.06

[MySQL] 테이블 용량 확인

데이터베이스의 스토리지 용량이 계속 문제가 돼서 모든 테이블 용량을 확인하려고 한다. 테이블 용량은 테이블의 상태 정보를 통해 확인할 수 있다. 모든 테이블 용량의 합 모든 데이터베이스, 모든 테이블 용량의 합을 계산한다. SELECT SUM(DATA_LENGTH), SUM(INDEX_LENGTH), SUM((DATA_LENGTH + INDEX_LENGTH)) FROM information_schema.TABLES; # GB 단위로 출력 SELECT ROUND(SUM(DATA_LENGTH /(1024 * 1024 * 1024)), 2) AS 'DATA_SIZE(GB)', ROUND(SUM(INDEX_LENGTH /(1024 * 1024 * 1024)), 2) AS 'INDEX_SIZE(GB)', ROUN..

Database 2022.03.12

[MySQL] Connection 수 확인

최근 MySQL DB에서 Too many connections 에러가 발생하면서 정상적으로 기능하지 않았던 적이 있었다. 데이터베이스와 연결된 클라이언트의 수, 즉 접속 수가 너무 많아서 발생한 에러인데, 최대 접속 가능 수와 현재 접속 수를 확인하는 쿼리를 적어둔다. 최대 접속 가능한 수(max_connections) 확인 SHOW VARIABLES LIKE '%max_connection%'; 이 데이터베이스는 최대 1000개의 접속을 허용한다. 현재 접속 수(Threads_connected) 확인 MySQL에 접속되어 있다는 것은 각각에 대해 Thread가 실행되고 있는 것이다. 따라서 연결된 스레드 수가 바로 접속 수에 해당한다. SHOW STATUS LIKE 'Threads_connected'; ..

Database 2022.03.10

[MySQL/MariaDB] 예약어가 포함된 컬럼/DB 사용

SQL는 다른 프로그래밍 언어와 마찬가지로 예약어가 존재하며, 버전이 업그레이드되면서 새로운 예약어가 추가되곤 한다. 때문에 MySQL/MariaDB 등을 업그레이드할 때에는 업그레이드되는 버전에 추가되는 예약어가 기존의 선언된 데이터베이스명, 테이블명, 컬럼명 등으로 사용되고 있지는 않은지 확인 및 조치해야 한다. 업그레이드 후 쿼리 수행 시 컬럼명이 아닌 예약어로 인식되어 아래와 같은 syntax 에러가 발생하기 때문이다. order는 데이터를 오름차순, 또는 내림차순으로 정렬하여 출력하기 위한 예약어이다. 해결 방법은 어렵지 않다. 방법 1. 문제가 되는 데이터베이스명, 테이블명, 컬럼명 등을 수정한다. 방법 2. 쿼리 수행 시 문제가 되는 데이터베이스명, 테이블명, 컬럼명 등을 `(grave ac..

Database 2022.01.29

[MySQL/MariaDB] 테이블 목록 확인

이 글에서는 데이터베이스의 테이블 목록 확인 방법을 정리해둔다. 방법 1. 현재 데이터베이스의 테이블 목록 확인 SHOW TABLES; 2. 테이블 이름으로 현재 데이터베이스의 테이블 목록 필터링 SHOW TABLES LIKE 'KEYWORD'; # 예시 SHOW TABLES LIKE 'P%'; SHOW TABLES LIKE 'p%'; 3. 다른 데이터베이스의 테이블 목록 확인 SHOW TABLES FROM ; # 예시 SHOW TABLES FROM information_schema; # 테이블명 필터링 예시 SHOW TABLES FROM information_schema LIKE 'TABLE%'; 4. 데이터베이스의 테이블 상태 정보 확인 SHOW TABLE STATUS; # 특정 데이터베이스의 테이블..

Database 2022.01.09

[MySQL/MariaDB] 프로세스 목록 확인

현재 실행 중인 작업을 확인하는 방법에 대해 적어둔다. Query SHOW PROCESSLIST; SHOW FULL PROCESSLIST; FULL 키워드 없이 사용하면, Info 필드 값이 100자로 제한된다. 또는 아래 쿼리로도 검색할 수 있다. SELECT * FROM information_schema.processlist ORDER BY id; # Command = Sleep 인 경우 제외 SELECT * FROM information_schema.processlist WHERE command != 'Sleep'; 실행 결과 필드 의미 필드 의미 Id Connection Identifier. 연결 아이디. User 명령을 실행한 MySQL 사용자 Host 명령을 실행한 클라이언트의 호스트 이름. ..

Database 2021.11.08

[MySQL/MariaDB] DELETE / TRUNCATE

DELETE, TRUNCATE는 두 개 모두 테이블 내용을 삭제하는 쿼리이다. 하지만 둘이 완전히 같은 기능을 하는 것은 아니다. 두 쿼리의 특징을 적어둔다. DELETE DML(Data Manipulation Language, 데이터 조작 언어) 중 하나 [ WITH [ ,...n ] ] DELETE [ TOP ( expression ) [ PERCENT ] ] [ FROM ] { | rowset_function_limited [ WITH ( [ ...n ] ) ] } [ ] [ FROM [ ,...n ] ] [ WHERE { | { [ CURRENT OF { [ GLOBAL ] cursor_name } | cursor_variable_name } ] } } ] [ OPTION ( [ ,...n ] )..

Database 2021.10.15