SQLクエリを使用してキャッシュをクリアするにはどうすればよいですか?


21

モジュールの更新後、私のサイトは使用できなくなり、PHPエラーメッセージのみが表示されます。で問題を回避しようとしましたdrush ccが、それは役に立ちませんでした。

また、カスタムのPHPスクリプトを試してみましたが、それを見つけるのに問題があります DRUPAL_ROOT

mysqlサーバー上のDrupal 7からキャッシュテーブルを直接クリアしたいのですが、そのためにクリアする必要のあるテーブル、特にクリアしてはいけないテーブルは不明です。

すべての[SITE-PREFIX_]cache*テーブルをクリアするだけですか?


使用したクエリを追加してください。
ipwa

実際には、「EMPTY WHERE tablename IS LIKE 'prefix_chache%'」のようなもので使用するクエリを探していましたが、最終的にはphpmyadminを使用してテーブルを削除しました。そのようなクエリが見つからなかったためです。
フライ

念のためdrush updb、管理インターフェイスを介して、または管理インターフェイスからデータベースの更新を実行したことを確認してください。または、単に/update.phpモジュール/コアの更新後に行ってください。
ビービー

回答:


6

キャッシュを備えた適切に作成されたモジュールには、キャッシュをプレフィックスとして付ける必要があります。つまり、質問に対する答えは「はい」です。

モジュールが他の場所にデータをキャッシュするという奇妙なイベントでは、hook_flush_cachesの実装についてモジュールをチェックし、それらが削除するものを見ることができます。


29

はい、TRUNCATEすべてのcache*テーブルを単純にクリア()できます。

これは私にとってはうまくいきました:

TRUNCATE TABLE cache;
TRUNCATE TABLE cache_block;
TRUNCATE TABLE cache_bootstrap;
TRUNCATE TABLE cache_field;
TRUNCATE TABLE cache_filter;
TRUNCATE TABLE cache_form;
TRUNCATE TABLE cache_image;
TRUNCATE TABLE cache_menu;
TRUNCATE TABLE cache_page;
TRUNCATE TABLE cache_path;
TRUNCATE TABLE cache_token;
TRUNCATE TABLE cache_update;

ブラシを使用する場合はdrush sql-cli、上記を実行して貼り付けます。

これらのコマンドは、特定のサイトのすべてのキャッシュテーブルをクリアするわけではありませんが、いくつかのエラーを修正するのに役立ちます。その後drush cc all、残りをクリアしてみてください。


1
また、サイトに存在する可能性のある追加のcache_テーブルにTRUNCATEクエリを追加することも簡単です。
ミリオンリーブズ

11

すべてのキャッシュテーブルをクリアするには、サーバーターミナルでこのコマンドを実行します。

# Truncate cache tables in MySQL regardless of the active cache backend
echo "SHOW TABLES LIKE 'cache%'" | $(drush sql-connect) | tail -n +2 | xargs -L1 -I% echo "TRUNCATE TABLE %;" | $(drush sql-connect) -v

これにより、すべてのキャッシュテーブルをループし、1つのコマンドでそれらを切り捨てます。


1
これは機能し、テストされ、すべてゼロです。
マルコブラゼコビッチ

1
これにより、不明な「クラスが見つかりません」というエラーが発生したときに、サイトを再度実行できました。
user18099

1
Mohammadのおかげで、受け入れられた答えよりもワンライナーソリューションの方が好きです。柔軟性が高いためです。パターンは、ハードコーディングされたリストだけでなく、カスタム/ contribキャッシュテーブルもキャッチします。
バルエルトル

3

次のcache_ように始まる各テーブルを個別にTRUNCATE / DELETEできます。

DELETE FROM cache;
DELETE FROM cache_block;

など(を介して確認drush sqlq "SHOW TABLES LIKE 'cache_%'")。

または、テーブルのリストを使用してクエリを生成し、drushに渡してテーブルを切り捨てます。例:

echo "SHOW TABLES LIKE 'cache%'" | $(drush sql-connect) | tail -n +2 | xargs -L1 -I% echo "DELETE FROM %;" | $(drush sql-connect) -v

または:

echo "SELECT CONCAT('DELETE FROM ', GROUP_CONCAT(TABLE_NAME SEPARATOR ';DELETE FROM ') , ' cache;' ) AS statement FROM information_schema.TABLES WHERE TABLE_NAME LIKE 'cache_%'" | drush sqlc --extra=--skip-column-names | drush sqlc

Memcache

memcachedを使用している場合は、キャッシュもフラッシュする必要があります(例(Bash構文):

echo flush_all > /dev/tcp/127.0.0.1/11211

0

または、すでに切り捨てられたcache*テーブルを含むmysqlダンプをインポートできます。

gunzip -c ~/database.sql.gz | grep -v 'INSERT INTO `cache'| mysql --user=root drupal

0

drush crおよび/またはdrush cc allすべてのキャッシュをクリアすることになっていますが、実際にはいくつかのキャッシュテーブルがクリアされません。次の(簡略化された)コマンドは、すべてのキャッシュを切り捨てます。

drush sql-query "SHOW TABLES LIKE 'cache%'" | while read table; do drush sql-query "TRUNCATE $table"; done;

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.