Як очистити кеш-пам'ять за допомогою SQL-запиту?


21

Після оновлення модуля мій сайт став непридатним і показує лише повідомлення про помилку php. Я намагався обійти проблему drush cc, але це не допомогло.

Також спробував користувальницький скрипт php, але це проблеми з пошуку мого DRUPAL_ROOT

Я просто хочу очистити кеш-таблиці з Drupal 7 безпосередньо на сервері mysql, але я не впевнений, які таблиці слід очистити для цього, а особливо, які я не повинен очистити.

Мені просто потрібно очистити всі [SITE-PREFIX_]cache*таблиці?


Не могли б ви додати використаний запит?
ipwa

насправді я шукав Запит, який потрібно використовувати з чимось на зразок: `EMPTY WHERE IME Table LIKE 'prefix_chache%', але врешті-решт я просто використав phpmyadmin, щоб скинути таблиці, тому що я не міг знайти такий запит.
ЛІТИ

Як примітка, переконайтеся, що ви запускаєте оновлення бази даних через drush updbабо через інтерфейс адміністратора, або просто перейшовши на /update.phpоновлення модуля / ядра.
Beebee

Відповіді:


6

Будь-який добре написаний модуль, який має кеш, повинен мати префікс кеша, тобто відповідь на ваше запитання - «Так».

У випадковому випадку, якщо модуль кешує дані десь в іншому місці, ви можете перевірити ваші модулі на реалізацію куки_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
Також легко додавати додаткові запити TRUNCATE для будь-яких додаткових таблиць cache_, які можуть бути присутніми на вашому сайті.
мільйони

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
Це допомогло мені знову запустити сайт, коли у нього були незрозумілі помилки "Клас не знайдено".
user18099

1
Дякую, Мохаммеде, мені подобається ваше однолінійне рішення краще, ніж прийнята відповідь, тому що воно гнучкіше: шаблон також вловлює таблиці кеш-файлів, призначені для користувача / contrib, а не лише твердо кодовані списки.
Balu Ertl

3

Ви можете TRUNCATE / DELETE кожну таблицю окремо, яка починається з cache_:

DELETE FROM cache;
DELETE FROM cache_block;

тощо (перевірити через drush sqlq "SHOW TABLES LIKE 'cache_%'").

Або генерувати запит із переліком таблиць і переходити до друку для обрізання їх, наприклад:

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

Якщо ви користуєтеся запам’ятованими, вам також потрібно промити кеші там, наприклад (синтаксис Bash):

echo flush_all > /dev/tcp/127.0.0.1/11211

0

Або ви можете імпортувати ваш дамб-файл mysql з уже усіченими cache*таблицями:

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;

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.