SELECT UPDATE_TIME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DB명'
AND TABLE_NAME = '테이블명';
+---------------------+
| UPDATE_TIME |
+---------------------+
| 2024-03-27 09:39:05 |
+---------------------+
테이블명으로 확인
SELECT UPDATE_TIME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME='테이블명';
+---------------------+
| UPDATE_TIME |
+---------------------+
| 2024-03-27 09:39:05 |
+---------------------+
방법3. 직접 업데이트 시간 관리하기
CREATE TABLE test (
id INT PRIMARY KEY,
name CHAR(4),
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
KEY (update_time)
);
테스트 테이블 test가 생성하겠습니다.
test에는 id와 name, 업데이트 시간을 관리하는 update_time 컬럼이 있습니다.
INSERT INTO test(id, update_time) VALUES (1, NOW());
SELECT * FROM test;
+----+------+---------------------+
| id | name | update_time |
+----+------+---------------------+
| 1 | NULL | 2024-03-28 09:47:24 |
+----+------+---------------------+
위와같이 데이터를 넣으며 update_time을 관리해줍니다.
UPDATE test SET name = 'test' WHERE id = 1;
SELECT * FROM test;
+----+------+---------------------+
| id | name | update_time |
+----+------+---------------------+
| 1 | test | 2024-03-28 09:50:22 |
+----+------+---------------------+
ERROR 1317 (70100): Query execution was interrupted
에러 환경
Client OS: Windows10
Server OS: Ubuntu 22.04.2 LTS
MySQL: 8.0.30
에러 원인
쿼리 처리시간이 너무 오래걸리거나 서버에 이상이 있어 쿼리를 정상적으로 실행을 할수없을 때 나타나는 에러입니다.
해결 방안
방법1.
MySQL 서버를 재시작합니다. 그리고 해결되었는지 확인합니다.
방법2.
SELECT 를 하거나 INSERT, UPDATE를 할 때 인덱스 사용유무에 따라 실행속도를 향상시킬수 있습니다.
# 인덱스 활성화
ALTER TABLE 테이블명 ENABLE KEYS;
# 인덱스 비활성화
ALTER TABLE 테이블명 DISABLE KEYS;
방법3.
max_allowed_packet는 서버와 클라이언트 사이에 주고받는 패킷의 사이즈를 설정하는 값으로 사이즈를 늘려 속도를 향상시킬 수 있습니다.
# max_allowed_packet 사이즈 확인
SHOW VARIABLES WHERE variable_name = 'max_allowed_packet';
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| max_allowed_packet | 67108864 |
+--------------------+----------+
# max_allowed_packet 사이즈 변경 ex)64Mb
SET GLOBAL max_allowed_packet = 64*1024*1024;
또는 my.ini 파일을 통해서도 변경할 수 있습니다.
마무리
공통적으로 해결할 수 있는 방법을 작성해보았습니다. 이외에도 연산시간이 오래걸리거나 루프가 너무 많아 오래걸리는 쿼리문같은 경우 적절한 수정을 통해 해결하면 좋을 것 같습니다.
ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server side
에러 환경
Client OS: Windows10
Server OS: Ubuntu 22.04.2 LTS
MySQL: 8.0.30
에러 원인
LOAD DATA LOCAL 명령어 사용시 서버측에서 권한이 없을때 발생합니다.
해결 방안
1. local_infile 권한이 있는지 확인합니다.
SHOW GLOBAL VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | OFF |
+---------------+-------+
1 row in set (0.00 sec)
2. local_infile 권한이 OFF이면 명령어를 사용하여 ON으로 변경합니다.
SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)
SHOW GLOBAL VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | ON |
+---------------+-------+
1 row in set (0.00 sec)
3. 테스트
LOAD DATA LOCAL
INFILE 'TEST_DATA.CSV'
INTO TABLE
`test_data_info`
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 0 LINES;
Query OK, 2964908 rows affected (20.86 sec)
LOAD DATA LOCAL
INFILE 'TEST_DATA.CSV'
INTO TABLE
`test_data_info`
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 0 LINES;
Query OK, 2964908 rows affected (20.86 sec)