ฉันจะล้างแคชโดยใช้แบบสอบถาม SQL ได้อย่างไร


21

หลังจากอัปเดตโมดูลเว็บไซต์ของฉันไม่สามารถใช้งานได้และแสดงข้อความข้อผิดพลาด php เท่านั้น ฉันพยายามหลีกเลี่ยงปัญหาด้วยdrush ccแต่ก็ไม่ได้ช่วย

ลองด้วยสคริปต์ php ที่กำหนดเอง แต่มีปัญหาในการค้นหาของฉัน DRUPAL_ROOT

ฉันต้องการล้างแคชตารางจาก Drupal 7 โดยตรงบนเซิร์ฟเวอร์ mysql แต่ฉันไม่แน่ใจว่าควรล้างตารางใดและโดยเฉพาะอย่างยิ่งที่ฉันไม่ควรล้าง

ฉันต้องล้าง[SITE-PREFIX_]cache*ตารางทั้งหมดหรือไม่


คุณช่วยเพิ่มแบบสอบถามที่คุณใช้ได้ไหม
ipwa

จริงๆแล้วฉันกำลังมองหา Query ที่จะใช้กับสิ่งที่ชอบ: `ว่างที่ไหน 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
นอกจากนี้ยังง่ายต่อการเพิ่มข้อความค้นหา TRUNCATE พิเศษสำหรับตาราง cache_ เพิ่มเติมใด ๆ ที่อาจมีอยู่ในเว็บไซต์ของคุณ
millionleaves

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
งานนี้ทดสอบและทั้งหมดเป็นศูนย์
Marko Blazekovic

1
สิ่งนี้ช่วยให้ฉันเรียกใช้ไซต์อีกครั้งเมื่อมีข้อผิดพลาด "ไม่พบชั้นเรียน" ที่ไม่ชัดเจน
user18099

1
ขอบคุณโมฮัมหมัดฉันชอบวิธีแก้ปัญหาหนึ่งซับของคุณดีกว่าคำตอบที่ยอมรับเพราะมันมีความยืดหยุ่นมากขึ้น: รูปแบบจับตารางแคชแบบกำหนดเอง / contrib เช่นกันไม่ใช่เฉพาะรายการที่เข้ารหัสยาก
Balu Ertl

3

คุณสามารถตัดทอน / ลบแต่ละตารางแยกจากกันโดยเริ่มจากcache_:

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

หรือคุณสามารถนำเข้าการถ่ายโอนข้อมูล 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;

0

เจเอฟอาร์ในบทความนี้มีรูปแบบการแก้ปัญหาแบบยืดหยุ่นอื่น ๆ ที่นำเสนอในรูปแบบของแบบสอบถาม SQL ดิบ แต่ไม่ทำงานสำหรับฉันและโมฮัมหมัดของ: https://thebarton.org/clear-drupal-cache-sql-query /

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.