web-dev-qa-db-ja.com

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

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

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

Mysqlサーバーで直接Drupal 7からキャッシュテーブルをクリアしたいのですが、そのためにどのテーブルをクリアする必要があるのか​​、特にクリアしてはいけないのかわかりません。

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

23
FLY

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

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

6
Letharion

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

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

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を使用する場合は、drush sql-cliを実行し、上記をそこに貼り付けます。

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

32
kqw

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

# 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つのコマンドで切り捨てられます。

11

次のように、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
3
kenorb

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

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

この記事のJFRには、他の柔軟なパターンベースのソリューションが生のSQLクエリの形式で提供されていますが、Mohammadのようにうまく機能しませんでした。 https://thebarton.org/clear-drupal-cache -sql-query /

0
Balu Ertl

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

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