SQL 쿼리를 사용하여 캐시를 지우려면 어떻게합니까?


21

모듈 업데이트 후 내 사이트를 사용할 수 없게되고 PHP 오류 메시지 만 표시됩니다. 로 문제를 피하려고 시도했지만 drush cc도움이되지 않았습니다.

또한 사용자 정의 PHP 스크립트로 시도했지만 그 문제를 찾는 데 문제가 있습니다. DRUPAL_ROOT

MySQL 서버에서 Drupal 7의 캐시 테이블을 직접 지우고 싶지만 어떤 테이블을 지 울지, 특히 어떤 테이블을 지 울지 확실하지 않습니다.

모든 [SITE-PREFIX_]cache*테이블 을 지워야 합니까?


사용한 검색어를 추가해 주시겠습니까?
ipwa

실제로 나는 'EMPTY WHERE tablename이'prefix_chache % '와 같은 쿼리를 찾고 있었지만 결국에는 그런 쿼리를 찾을 수 없으므로 phpmyadmin을 사용하여 테이블을 삭제했습니다.
FLY

참고로, drush updb관리 인터페이스를 통해 또는 관리 인터페이스를 통해 또는 /update.php모듈 / 코어 업데이트 를 수행 한 후 데이터베이스 업데이트를 실행했는지 확인하십시오 .
Beebee

답변:


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를 사용하는 경우 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
이것은 작동하고 테스트했으며 모두 0입니다.
Marko Blazekovic

1
이렇게하면 "클래스를 찾을 수 없음"오류가 명확하지 않은 사이트를 다시 실행할 수있었습니다.
user18099

1
고마워 Mohammad, 나는 유연성이 뛰어 나기 때문에 허용 된 답변보다 더 나은 단일 라이너 솔루션을 좋아합니다. 패턴은 하드 코딩 된 목록뿐만 아니라 사용자 정의 / contrib 캐시 테이블도 포착합니다.
Balu Ertl

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.