it-swarm.asia

كيف أقوم بمسح ذاكرة التخزين المؤقت باستخدام استعلام SQL؟

بعد تحديث الوحدة النمطية ، أصبح موقعي غير قابل للاستخدام ، ولا يعرض سوى رسالة خطأ php. حاولت التحايل على المشكلة بـ drush cc ، لكن ذلك لم يساعد.

جربت أيضًا باستخدام برنامج نصي php مخصص ولكن به مشكلات في العثور على DRUPAL_ROOT

أريد فقط مسح جداول ذاكرة التخزين المؤقت من Drupal 7 مباشرة على خادم mysql ، لكنني غير متأكد من الجداول التي يجب محوها لذلك وعلى وجه الخصوص التي لا ينبغي أن أزالها.

هل أنا بحاجة فقط لمسح كل [SITE-PREFIX_]cache* الجداول؟

23
FLY

أي وحدة مكتوبة جيدًا تحتوي على ذاكرة تخزين مؤقت ، يجب أن تسبقها بذاكرة تخزين مؤقت ، مما يعني أن الإجابة على سؤالك هي "نعم".

في الحالة الغريبة التي تخزن فيها الوحدة بيانات في مكان آخر ، يمكنك التحقق من الوحدات النمطية الخاصة بك لتنفيذ hook_flush_caches ، ومعرفة ما تقوم بإزالته.

6
Letharion

نعم ، يمكنك ببساطة مسح (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 لمسح البقية.

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

سيؤدي هذا إلى تكرار كل جداول ذاكرة التخزين المؤقت واقتطاعها في أمر واحد.

11
Mohammad AlQanneh

يمكنك إما 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

إذا كنت تستخدم memcached ، فستحتاج أيضًا إلى مسح ذاكرة التخزين المؤقت هناك ، على سبيل المثال (صيغة باش):

echo flush_all > /dev/tcp/127.0.0.1/11211
3
kenorb

أو يمكنك استيراد ملف تفريغ mysql الخاص بك مع اقتطاع بالفعل cache* الجداول:

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

JFR في هذه المقالة يتم تقديم حل مرن آخر قائم على النمط في شكل استعلام SQL الخام ، لكنه لم يكن يعمل بالنسبة لي مثل محمد: 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
Vagelis Prokopiou