Làm cách nào để xóa bộ nhớ cache bằng truy vấn SQL?


21

Sau khi cập nhật mô-đun, trang web của tôi đã trở nên không sử dụng được và chỉ hiển thị thông báo lỗi php. Tôi đã cố gắng khắc phục vấn đề với drush cc, nhưng điều đó không có ích.

Cũng đã thử với một tập lệnh php tùy chỉnh nhưng điều đó có vấn đề khi tìm tôi DRUPAL_ROOT

Tôi chỉ muốn xóa các bảng bộ đệm từ Drupal 7 trực tiếp trên máy chủ mysql, nhưng tôi không chắc chắn bảng nào sẽ bị xóa cho điều đó và đặc biệt là tôi không nên xóa.

Tôi chỉ cần xóa tất cả các [SITE-PREFIX_]cache*bảng?


Bạn có thể vui lòng thêm truy vấn bạn đã sử dụng?
ipwa

thực sự tôi đang tìm kiếm một Truy vấn để sử dụng với một cái gì đó như: 'EMPTY WHERE tablename LÀ THÍCH' prefix_chache% 'nhưng cuối cùng tôi chỉ sử dụng phpmyadmin để bỏ các bảng vì tôi không thể tìm thấy truy vấn như vậy.
FLY

Cũng như một ghi chú, đảm bảo bạn đã chạy các bản cập nhật cơ sở dữ liệu thông qua drush updbhoặc từ giao diện quản trị viên, hoặc đơn giản là đi đến /update.phpsau khi cập nhật mô-đun / lõi.
Beebee

Câu trả lời:


6

Bất kỳ mô-đun được viết tốt nào có bộ đệm, nên đặt tiền tố cho bộ đệm, có nghĩa là câu trả lời cho câu hỏi của bạn là "Có".

Trong trường hợp kỳ lạ là một mô-đun lưu trữ dữ liệu ở một nơi khác, bạn có thể kiểm tra các mô-đun của mình để triển khai hook_flush_caches và xem những gì chúng xóa.


29

Có, bạn có thể chỉ cần xóa ( TRUNCATE) tất cả cache*các bảng.

Điều này làm việc tốt cho tôi:

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;

Nếu bạn sử dụng drush, hãy chạy drush sql-clivà dán phần trên vào đó.

Các lệnh này có thể không xóa tất cả các bảng bộ đệm của trang web cụ thể của bạn nhưng nó có thể giúp khắc phục một số lỗi. Sau đó, bạn có thể cố gắng drush cc allđể xóa phần còn lại.


1
Bạn cũng dễ dàng thêm các truy vấn TRUNCATE bổ sung cho bất kỳ bảng cache_ bổ sung nào có thể có trên trang web của bạn.
millionleaves

11

Để xóa tất cả các bảng bộ đệm chạy lệnh này trong thiết bị đầu cuối máy chủ của bạn.

# 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

điều này sẽ lặp qua tất cả các bảng bộ đệm và cắt bớt chúng trong một lệnh.


1
Điều này hoạt động, đã thử nghiệm nó và tất cả là bằng không.
Marko Blazekovic

1
Điều này giúp tôi có được một trang web chạy lại khi nó không rõ lỗi "Không tìm thấy lớp".
user18099

1
Cảm ơn Mohammad, tôi thích giải pháp một lớp của bạn tốt hơn câu trả lời được chấp nhận, bởi vì nó linh hoạt hơn: mẫu cũng bắt được các bảng bộ đệm tùy chỉnh / đóng góp, không chỉ các danh sách được mã hóa cứng.
Balu Ertl

3

Bạn có thể TRUNCATE / XÓA mỗi bảng riêng biệt bắt đầu từ cache_như:

DELETE FROM cache;
DELETE FROM cache_block;

và như vậy (kiểm tra thông qua drush sqlq "SHOW TABLES LIKE 'cache_%'").

Hoặc tạo truy vấn với danh sách các bảng và chuyển vào drush để cắt bớt chúng, ví dụ:

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

hoặc là:

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

Nếu bạn đang sử dụng memcached, bạn cũng cần xóa bộ đệm ở đó, ví dụ (cú pháp Bash):

echo flush_all > /dev/tcp/127.0.0.1/11211

0

Hoặc, bạn có thể nhập kết xuất mysql của bạn với cache*các bảng đã bị cắt ngắn :

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

0

drush crvà / hoặc drush cc allđược cho là để xóa tất cả bộ nhớ cache, nhưng thực sự một số bảng bộ đệm không bị xóa. Lệnh (đơn giản hóa) sau đây sẽ cắt bớt tất cả các bộ đệm:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.