Mysql

mysqldump,保留從 show table status 列出的 update_time 和 modify_time 屬性

  • February 27, 2022

是否mysqldump保留由 輸出的create_timeupdate_time屬性show table status from

如果沒有,是否有這樣做的選項?

從手冊看來,如果您導出到 XML,mysqldump 會保留此數據。

編輯:數據包含在導出中。我不確定它是否在另一端讀入。

有沒有辦法通過普通.sql轉儲來做到這一點?

無法手動重新載入 INFORMATION_SCHEMA。所有的表都是動態實體。例如,看INFORMATION_SCHEMA.TABLES

mysql> show create table INFORMATION_SCHEMA.TABLES\G
*************************** 1. row ***************************
      Table: TABLES
Create Table: CREATE TEMPORARY TABLE `TABLES` (
 `TABLE_CATALOG` varchar(512) DEFAULT NULL,
 `TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
 `TABLE_NAME` varchar(64) NOT NULL DEFAULT '',
 `TABLE_TYPE` varchar(64) NOT NULL DEFAULT '',
 `ENGINE` varchar(64) DEFAULT NULL,
 `VERSION` bigint(21) unsigned DEFAULT NULL,
 `ROW_FORMAT` varchar(10) DEFAULT NULL,
 `TABLE_ROWS` bigint(21) unsigned DEFAULT NULL,
 `AVG_ROW_LENGTH` bigint(21) unsigned DEFAULT NULL,
 `DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
 `MAX_DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
 `INDEX_LENGTH` bigint(21) unsigned DEFAULT NULL,
 `DATA_FREE` bigint(21) unsigned DEFAULT NULL,
 `AUTO_INCREMENT` bigint(21) unsigned DEFAULT NULL,
 `CREATE_TIME` datetime DEFAULT NULL,
 `UPDATE_TIME` datetime DEFAULT NULL,
 `CHECK_TIME` datetime DEFAULT NULL,
 `TABLE_COLLATION` varchar(32) DEFAULT NULL,
 `CHECKSUM` bigint(21) unsigned DEFAULT NULL,
 `CREATE_OPTIONS` varchar(255) DEFAULT NULL,
 `TABLE_COMMENT` varchar(80) NOT NULL DEFAULT ''
) ENGINE=MEMORY DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql>

這是一個臨時表。如果重新啟動mysql,它是如何填充的?顯然,它是在 mysql 啟動期間填充的。會包括什麼?檢索表的作業系統元數據。

讓我們看看作業系統中的 mysql.user

[root@*** ~]# ls -l /var/lib/mysql/mysql/user.*
-rw-rw---- 1 mysql mysql 10466 Jun  5  2012 /var/lib/mysql/mysql/user.frm
-rw-rw---- 1 mysql mysql  2144 Jul 15 23:29 /var/lib/mysql/mysql/user.MYD
-rw-rw---- 1 mysql mysql  2048 Dec 10 18:25 /var/lib/mysql/mysql/user.MYI

讓我們從 mysql 客戶端查看 mysql.user:

mysql> select * from information_schema.tables
   -> where table_schema='mysql' and table_name='user'\G
*************************** 1. row ***************************
 TABLE_CATALOG: NULL
  TABLE_SCHEMA: mysql
    TABLE_NAME: user
    TABLE_TYPE: BASE TABLE
        ENGINE: MyISAM
       VERSION: 10
    ROW_FORMAT: Dynamic
    TABLE_ROWS: 31
AVG_ROW_LENGTH: 69
   DATA_LENGTH: 2144
MAX_DATA_LENGTH: 281474976710655
  INDEX_LENGTH: 2048
     DATA_FREE: 0
AUTO_INCREMENT: NULL
   CREATE_TIME: 2012-06-05 23:45:23
   UPDATE_TIME: 2012-07-15 23:29:05
    CHECK_TIME: NULL
TABLE_COLLATION: utf8_bin
      CHECKSUM: NULL
CREATE_OPTIONS:
 TABLE_COMMENT: Users and global privileges
1 row in set (0.00 sec)

mysql>

請注意以下事項

  • 創作時間

    • 文件日期時間.frmJun 5 2012
    • CREATE_TIME: 2012-06-05 23:45:23
  • 更新時間

    • 文件日期時間.MYDJul 15 23:29
    • UPDATE_TIME: 2012-07-15 23:29:05

OS 元數據在 mysql 啟動時mysql.user載入INFORMATION_SCHEMA.TABLES,並通過 INSERT、UPDATE 和 DELETE 進行更新。

概括

雖然您可以 mysqldump INFORMATION_SCHEMA.TABLES,但無法手動重新載入它。理論上,你可以關閉 mysql,tweek 作業系統時鐘,tweek 每個文件,然後啟動 mysql。這不值得努力。

引用自:https://dba.stackexchange.com/questions/31542