データベースがすでに2回停止していて、原因を探そうとしました。
show processlist
Waiting for global read lock | INSERT INTO {myisam_table} ...
ここではディスク領域がいっぱいだったので、それをもう少し与えると問題は終わったと思いましたが、翌日の正午に再びハングしました。
show processlist
Waiting for table level lock | UPDATE {myisam_table} ...
何が原因ですか?
Mysqlデフォルトエンジン:InnoDB。
データベースには、MyISAMエンジンとInnoDBエンジンの両方を備えたテーブルが混在しています。
ここに投稿されたログ:
http://arturito.net/2013/08/28/mysql-waiting-for-table-level-lock-errors/
JOIN
、GROUP BY
、またはORDER BY
が関係していると思いますあなたが私に与えたプロセスリストでディスクスペースが足りなくなった場合、MyISAMストレージエンジンのせいにすることができます。どうして?
あなたの特定のケースでは、それはあなたのテーブルの1つではありません。 JOIN
、GROUP BY
、またはORDER BY
が実行されていて、一時テーブルがディスクに書き込まれていた場合(ディスクの一時テーブルではMyISAMストレージエンジンを使用)、MySQLは単にアウト時にフリーズします。スペースの。どうやってそれを知るのですか?
MySQL 5.0 Certification Study Guide によると==
ページ408,409セクション29.2 Bulletpoint 11によると、
MyISAMテーブルに行を追加しているときにディスク領域が不足しても、エラーは発生しません。サーバーは、スペースが使用可能になるまで操作を中断し、操作を完了します。
私は以前この状況について話しました
Apr 05, 2013
: "サイトオフライン" MySQLサーバーが起動および停止に失敗しましたDec 17, 2012
: Amazon RDSでMySQLの「テーブルがいっぱいです」エラー1114を解決する方法?Apr 25, 2012
: 非常に大きなログファイルMar 15, 2012
: なぜMySQLテーブルがクラッシュするのですか?どのようにしてそれを防ぐのですか?あなたはこれら2つの状況の1つを持っていると何かが教えてくれます
/tmp
に着陸している場合は、スペースが不足しています[mysqld]
tmpdir = /another/disk/besides/root/partition
このコードを実行して、Linuxの再起動時に使用できるRAMディスクをインストールします。
RAMDISK_SIZE=32g
service mysql stop
mkdir /var/tmpfs
echo "none /var/tmpfs tmpfs defaults,size=${RAMDISK_SIZE} 1 2" >> /etc/fstab
mount -t tmpfs -o size=${RAMDISK_SIZE} none /var/tmpfs
cp -R /var/lib/mysql/* /var/tmpfs
mv /var/lib/mysql /var/lib/mysql_old
ln -s /var/tmpfs /var/lib/mysql
chown -R mysql:mysql /var/tmpfs
chown -R mysql:mysql /var/lib/mysql
service mysql start
次に、 tmpdir を/var/tmpfs
にマッピングします