Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Lấy thời gian truy cập/ghi cuối cùng của database MySQL?

Xem thời gian cập nhật cuối (last update time) của bảng MySQL

Sử dụng INFORMATION_SCHEMA.TABLES cột UPDATE_TIME để biết lần cuối bảng bị sửa đổi. Chỉ hoạt động chính xác với engine MyISAM.

Cú pháp

SELECT UPDATE_TIME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'yourDatabase' AND TABLE_NAME = 'yourTable';

Ví dụ với database 'business'

Trường hợp 1: Bảng MyISAM có dữ liệu

mysql> SELECT UPDATE_TIME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'business' AND TABLE_NAME = 'twoprimarykeytabledemo';
+---------------------+
| UPDATE_TIME         |
+---------------------+
| 2018-11-21 16:51:50 |
+---------------------+

Trường hợp 2: Bảng MyISAM khác

mysql> SELECT UPDATE_TIME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'business' AND TABLE_NAME = 'currenttimezone';
+---------------------+
| UPDATE_TIME         |
+---------------------+
| 2018-10-29 17:20:18 |
+---------------------+

Trường hợp 3: Bảng InnoDB → NULL

mysql> SELECT UPDATE_TIME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'business' AND TABLE_NAME = 'zerofilldemo';
+-------------+
| UPDATE_TIME |
+-------------+
| NULL        |
+-------------+

Giải thích

  • MyISAM: Cập nhật UPDATE_TIME real-time khi INSERT/UPDATE/DELETE
  • InnoDB: Không cập nhật UPDATE_TIME (luôn NULL) do kiến trúc transactional, buffer pool
  • CREATE_TIME: Thời gian tạo bảng (cả 2 engine đều có)
  • CHECK_TIME: Lần cuối chạy CHECK TABLE / REPAIR TABLE

Giải pháp cho InnoDB

  1. Trigger + bảng log: Tạo trigger AFTER INSERT/UPDATE/DELETE ghi vào bảng audit
  2. innodb_table_stats (MySQL 5.6+): persistent stats, có last_update nhưng không real-time
  3. Application-level: Ghi log thời gian trong ứng dụng
  4. Binary log: Phân tích binlog để biết thời gian thay đổi

Truy vấn nhiều bảng cùng lúc

SELECT TABLE_NAME, UPDATE_TIME, CREATE_TIME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'business'
ORDER BY UPDATE_TIME DESC;