मैं SQL क्वेरी का उपयोग करके कैश को कैसे साफ़ करूँ?


21

मॉड्यूल अपडेट के बाद, मेरी साइट अनुपयोगी हो गई है, और केवल एक php त्रुटि संदेश दिखाता है। मैंने समस्या को दरकिनार करने की कोशिश की drush cc, लेकिन इससे कोई फायदा नहीं हुआ।

इसके अलावा एक कस्टम php स्क्रिप्ट के साथ की कोशिश की, लेकिन मुद्दों है कि मेरी खोज DRUPAL_ROOT

मैं सिर्फ ड्रुपल 7 से कैश टेबल को सीधे mysql सर्वर पर क्लियर करना चाहता हूं, लेकिन मैं अनिश्चित हूं कि इसके लिए कौन सी टेबल क्लियर की जानी चाहिए और खासकर जो मुझे क्लियर नहीं करनी चाहिए।

क्या मुझे केवल सभी [SITE-PREFIX_]cache*तालिकाओं को साफ़ करने की आवश्यकता है ?


क्या आप कृपया आपके द्वारा उपयोग की गई क्वेरी जोड़ सकते हैं?
ipwa

वास्तव में मैं कुछ इस तरह का उपयोग करने के लिए एक क्वेरी की तलाश कर रहा था: `EMPTY जहां टैबलेन का नाम 'उपसर्ग_चै%' है, लेकिन अंत में मैंने टेबल को गिराने के लिए phpmyadmin का उपयोग किया क्योंकि मुझे ऐसी कोई क्वेरी नहीं मिली।
FLY

एक नोट के रूप में, सुनिश्चित करें कि आपने डेटाबेस अपडेट drush updbको व्यवस्थापक इंटरफ़ेस से या उसके माध्यम से चलाया है, या बस /update.phpएक मॉड्यूल / कोर अपडेट के बाद जा रहा है ।
बीबी

जवाबों:


6

किसी भी अच्छी तरह से लिखे गए मॉड्यूल में कैश है, इसे कैश के साथ उपसर्ग करना चाहिए, जिसका अर्थ है कि आपके प्रश्न का उत्तर "हां" है।

एक विषम घटना जिसमें एक मॉड्यूल कहीं और डेटा को कैश करता है, आप हुक_फ्लश_कैश के कार्यान्वयन के लिए अपने मॉड्यूल की जांच कर सकते हैं और देख सकते हैं कि वे क्या हटाते हैं।


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 क्वेरी जोड़ना आसान है।
मिलियन'

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
धन्यवाद मोहम्मद, मुझे आपका वन-लाइनर समाधान स्वीकार किए गए उत्तर से बेहतर लगता है, क्योंकि यह अधिक लचीला है: पैटर्न कस्टम / कंट्रिब कैश टेबल के साथ-साथ न केवल हार्ड-कोडित सूचियों को पकड़ता है।
बालू एर्टल

3

आप प्रत्येक तालिका को अलग कर सकते हैं / हटा सकते हैं जो इस 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

मेम्कैश

यदि आप मेमकाटेड का उपयोग कर रहे हैं, तो आपको वहां कैश को फ्लश करने की भी आवश्यकता है, जैसे (बैश सिंटैक्स):

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;

0

इस लेख में JFR एक अन्य लचीला पैटर्न-आधारित समाधान कच्चे SQL-क्वेरी के रूप में पेश किया गया है, लेकिन मेरे लिए उतना अच्छा काम नहीं कर रहा था जितना कि मोहम्मद का: https://thebarton.org/clear-drupal-cache-sql-query /

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.