当サイトはプロモーションが含まれています。

「mysqldump: Got error: 1016: “Can’t open file: ‘./taro/taro.frm’ (errno: 24)” when using LOCK TABLES」エラー対策

MariaDB

週次バックアップのCronで、次のようなエラーが発生していました。

mysqldump: Got error: 1016: "Can't open file: './***/***.frm' (errno: 24)" when using LOCK TABLES

エラーメッセージを調べてみると、テーブル数が多すぎると今回のようなエラーになるようです。

推奨対策:open_files_limitの値を増やす

MariaDB [(none)]> SHOW VARIABLES LIKE 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 962   |
+------------------+-------+

現在の設定値を確認してみると「962」、テーブル数は520ぐらいなので大丈夫なはずなんですが…、とりあえず倍近くにしてみたところ、エラーは発生しなくなりました。

[taro@server ~]$ sudo vi /etc/my.cnf.d/server.cnf

[mysqld]
open_files_limit=2048
MariaDB [(none)]> SHOW VARIABLES LIKE 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 2048  |
+------------------+-------+

非推奨対策:–skip-lock-tablesオプションを使う

もう一つの対策ですが、mysqldump実行時に、–skip-lock-tablesオプションを付与する方法です。

ただし、この方法だとmysqldump実行時にロックしなくなるので、実行中にもデータが更新できてしまうため、整合性が取れなくなる恐れがあります。

mysqldump実行時に、絶対にデータ更新されないという場合のみの対策です。