19887


たとえば、ファイルであれば、編集した日付がメタデータとして存在するので、  
最終更新日時がわかります。

[![画像の説明をここに入力](https://i.stack.imgur.com/2oli7.png)](https://i.stack.imgur.com/2oli7.png)

このような感じで、MySQLの例えば、`hoge_db`が更新されたかどうか。  
つまり`hoge_db`が持つ複数テーブルのデータどれかに何かしらの変更があった最終日時を確認する方法はないでしょうか？

* * *

各テーブルが、updateのようなカラムを持って編集があれば自動で更新されupdateの一番今に近いやつというようなもの **ではなく** 、MySQLの
**メタデータ的なものを想定** しています。


CC BY-SA 3.0
2015-12-11T10:15:25.723
19878
2015-12-12T08:33:19.410
2015-12-11T10:31:59.403
9008
9008
question
mysql
MySQLのDB自体の最終更新日時はわかりますか？


MySQLの統計情報を利用してわかりませんか？

<https://dev.mysql.com/doc/refman/5.6/ja/show-table-status.html>  
です。

実際にずばりその事を調べた事はないので、本当にできるかどうかは分かりませんが、説明上はできるはずです。  
ただ、記述にもあるようにMySQLはDBエンジンを変えられるので、DBエンジンによってはわからないケースがあります。  
また、DBエンジンによっては、ファイルをみれば分かるかもしれません。  
（これも未確認です。）


CC BY-SA 3.0
2015-12-11T11:00:01.250
19881
2015-12-11T11:00:01.250
9983
19878
answer


本家SOにも同じ質問は見つけましたが、MySQL5.6まででの検証結果でした。  
コメントにもありますように、MySQL5.7では取得できると補足していただきましたので、MySQL5.7.10ならびにMySQL5.5.37、MySQL5.6の3環境で動作検証いたしました。

<https://stackoverflow.com/questions/307438/how-can-i-tell-when-a-mysql-table-
was-last-updated>

具体的には以下のクエリを投げると取得できます。

[code]

    SHOW TABLE STATUS FROM [データベース名]
    
[/code]

これで取得できる Update_timeの値が最終更新の時間です。  
MySQL 5.7.10では取得可能ですので判別が可能です。

MySQL5.6までですとcoltware様の回答にもありますとおり、テーブルのエンジンによっては最終更新の時間は取得できません。  
具体的にはInnoDBでは取得できず、MyIsamは取得できます。理由については
<https://dev.mysql.com/doc/refman/5.6/ja/show-table-status.html>
のUpdate_timeの説明にもあり、

> InnoDB stores multiple tables in its system tablespace and the data file
> timestamp does not apply.

InnoDBの場合は、複数のシステムテーブル領域に、複数のテーブルを格納しているので表示できない

が理由のようです。さらに、MySQLデータベースがWindowsの場合は

> however, on Windows the timestamp is not updated by updates so the value is
> inaccurate.

と、ファイルのタイムスタンプも更新されません。

MySQL5.6までの場合の対策としては、回答にある <https://stackoverflow.com/a/307488/3146328>
のように、最終更新日時のカラムを追加するしか手がないのでは、のようです。


CC BY-SA 3.0
2015-12-11T13:19:57.720
19887
2015-12-12T08:33:19.410
2017-05-23T12:38:56.467
-1
5778
19878
answer