ตารางใดปลอดภัยที่จะล้าง


40

ฉันได้รับมรดกเว็บไซต์ลูกค้าที่มีฐานข้อมูลขนาดใหญ่มากโดยไม่มีเหตุผล มีเนื้อหาในระดับปานกลางและโมดูลที่เปิดใช้งานน้อยมาก อย่างไรก็ตามฐานข้อมูลมีขนาดใหญ่เกินไปสำหรับเคลื่อนย้ายไปมาได้ง่ายและฉันต้องการทำความสะอาดออก

ฉันได้ล้างตารางแคชมาตรฐาน syslog และ accesslog แล้ว

มีตารางอื่น ๆ ที่ฉันสามารถตัดทอนในเว็บไซต์ Drupal มาตรฐานได้อย่างปลอดภัยหรือไม่?


1
คุณสามารถจัดเรียงตารางตามขนาดใน phpmyadmin ลองแล้วดูว่าตารางใดที่ใหญ่ที่สุดและรายงานที่นี่ ฉันเคยเห็นตารางเซสชั่นขนาดใหญ่ที่ไม่ได้รับการทำความสะอาดด้วยเหตุผลบางอย่าง นั่นคือสิ่งที่คุณสามารถล้างได้หากคุณสามารถใช้ชีวิตกับผู้ใช้ที่ต้องลงชื่อเข้าใช้อีกครั้ง (และอาจสูญเสียข้อมูลแบบฟอร์มที่ป้อนหากพวกเขาอยู่บนไซต์ดังนั้นคุณอาจต้องการประสานงานกับผู้ใช้)
Berdir

เพียงแค่มีข้อความด้านข้างนั่นคำตอบทั้งหมดด้านล่างที่กล่าวถึงการตัดทอน{cache_form}นั้นไม่ถูกต้องจริงๆ นี่ไม่ใช่ตารางแคชที่แท้จริง มันมีอยู่ในการส่งแบบฟอร์มความคืบหน้า หากคุณลบข้อมูลทั้งหมดในตารางนี้ผู้ใช้ของคุณอาจสูญเสียข้อมูล สิ่งที่เหมาะสมที่จะทำกับตารางนี้คือการหมดอายุรายการ
mpdonadio

คำตอบ:


21

ใช้สำรองข้อมูลและโมดูลโยกย้ายจะมาพร้อมกับค่าเริ่มต้นที่ดีสำหรับการกระโดดข้ามข้อมูลที่ไม่จำเป็น โดยค่าเริ่มต้นจะสร้างการสำรองฐานข้อมูลโดยไม่แคช, จ้องจับผิดและตารางอื่น ๆ

ถ้าสิ่งนี้ไม่ช่วยให้ดูด้วย phpMyAdmin และบอกเราว่าตารางใดมีรายการจำนวนมาก


1
นี่เป็นที่แรกที่ฉันไป อย่างไรก็ตามฐานข้อมูลอยู่เหนือกิ๊กและจะไม่สำรองข้อมูลผ่านวิธีนี้ ความตั้งใจของฉันคือการล้างฐานข้อมูลเพื่อให้ฉันสามารถใช้การสำรองข้อมูลและโยกย้ายเป็นประจำ เป็นหลักฉันสงสัยว่ามีตารางอีกต่อไปที่ฉันสามารถล้างออก (นั่นไม่ใช่โดยค่าเริ่มต้นข้ามโดย BAM)
ไนเจลวอเตอร์ส

หากคุณมีการเข้าถึงบรรทัดคำสั่งคุณสามารถใช้ drush เพื่อเริ่มการสำรองข้อมูลและย้ายข้อมูล หรือเข้าถึง mysql ในบรรทัดคำสั่ง (ตัวอย่าง: mysqldump --host = your.host.com --user = db_user --compress - รหัสผ่าน your_pw> dump.sql) ด้วยวิธีนี้คุณจะไม่หมดเวลา โดยทั่วไปการล้างออกโดยไม่ต้องมีการสำรองข้อมูลไม่ได้ประหยัดมาก คุณสามารถลงเอยด้วยหน้ากระดาษที่หักและไม่มีทางที่จะกลับไป
BetaRide

ปัญหาไม่ได้อยู่กับการหมดเวลา ฉันรู้ว่าฉันสามารถเรียกใช้การสำรองข้อมูลผ่าน ssh / drush ได้อย่างง่ายดาย ฉันต้องการล้างฐานข้อมูลเนื่องจากเห็นหนึ่งถึงหลายมือในช่วงไม่กี่ปีที่ผ่านมาและมีความไม่จำเป็นมากมายในนั้น ฉันแค่ต้องรู้ว่าตารางใดที่ฉันสามารถลบออกได้อย่างปลอดภัย (ไม่ทราบวิธีสำรองหรือย้ายเว็บไซต์ของฉัน)
ไนเจลวอเตอร์ส

@BetaRide ถูกต้องค่าเริ่มต้นที่ BAM ยกเว้นนั้นเป็นค่าที่ปลอดภัย ผู้อื่นอาจมีหรือไม่มีข้อมูลจริง
mpdonadio

22

Drupal 7 ตารางที่สามารถแยกออกได้

นี่คือรายการของตารางใน Drupal 7 ที่คุณสามารถล้างได้ (เพื่อลดขนาดฐานข้อมูล) หรือแยกออกจากการย้ายข้อมูลอย่างปลอดภัย (ดังเช่นในคำถามเกี่ยวกับวิธีลดขนาดฐานข้อมูลที่ส่งออกภายในเครื่องเพื่อรับข้อ จำกัด การนำเข้าเซิร์ฟเวอร์ ):

  • accesslog
  • ชุด
  • ตารางที่เกี่ยวข้องกับแคชทั้งหมดเช่น:
    • แคช *
    • cache_block
    • cache_content
    • cache_filter *
    • cache_form
    • cache_calendar_ical
    • cache_menu *
    • cache_page *
    • cache_views
    • * _cache เช่น features_cache หรือ views_data_object_export_cache
  • ctools_views_cache
  • ctools_object_cache
  • devel_queries
  • devel_times
  • น้ำท่วม
  • ประวัติศาสตร์
  • คิว
  • ตาราง search_ * ต่างๆเช่น:
    • search_dataset
    • search_index
    • search_keywords_log
    • search_total
  • สัญญาณ
  • การประชุม
  • สุนัขเฝ้าบ้าน
  • webform_submitted_data

โดยปกติตารางเช่นsearch_indexและwatchdogใช้พื้นที่ฐานข้อมูลจำนวนมากดังนั้นการกำจัดตารางทั้งสองนั้นสามารถสร้างความแตกต่างได้อย่างมาก

ตารางอื่น ๆ ที่อาจถูกยกเว้น

ตรวจสอบขนาดของตารางที่เหลือและระบุว่าตารางใดมีขนาดใหญ่ที่สุด

โดยทั่วไปแล้วคุณอาจพบตารางเซสชันที่ไม่มีขั้นตอนการล้างข้อมูล ตารางดังกล่าวคุณอาจยกเว้นได้เช่นกัน

โมดูลสำรองและโอนย้าย

หากต้องการลดความท้าทายตามรายละเอียดใน " วิธีลดขนาดฐานข้อมูลที่ส่งออกในเครื่องเพื่อให้ได้ข้อ จำกัด การนำเข้าเซิร์ฟเวอร์ของฉัน " ให้ดูที่โมดูลสำรองข้อมูลและย้ายข้อมูลด้วย นี่คือคำพูดจากหน้าโครงการ (เพิ่มมาร์กอัปตัวหนาที่นี่):

สำรองและคืนค่าฐานข้อมูลรหัสและไฟล์ของ Drupal MySQL หรือโอนย้ายไซต์ระหว่างสภาพแวดล้อม การสำรองและย้ายข้อมูลรองรับการบีบอัด gzip, bzip และ zip รวมถึงการสำรองข้อมูลตามกำหนดเวลาโดยอัตโนมัติ

ด้วย Backup and Migration คุณสามารถดัมพ์ตารางฐานข้อมูลบางส่วนหรือทั้งหมดของคุณไปยังไฟล์ดาวน์โหลดหรือบันทึกลงในไฟล์บนเซิร์ฟเวอร์หรือนอกสถานที่และเพื่อกู้คืนจากดัมพ์ฐานข้อมูลที่อัพโหลดหรือบันทึกไว้ก่อนหน้า คุณสามารถเลือกตารางและข้อมูลที่จะสำรองข้อมูลและการแคชข้อมูลได้รับการยกเว้นตามค่าเริ่มต้น

และยังมีอีกมาก: หากสภาพแวดล้อมในพื้นที่ของคุณ (เช่น Win หรือ Mac) แตกต่างจากระบบปฏิบัติการที่เซิร์ฟเวอร์ของเว็บไซต์โฮสต์ของคุณกำลังทำงาน (เช่น Linux) ความแตกต่างเหล่านี้ระหว่างระบบปฏิบัติการอาจบ่งบอกถึงความท้าทายที่อาจเกิดขึ้น ฉันมีประสบการณ์ที่ดีกับโมดูลสำรองข้อมูลและย้ายข้อมูลระหว่างระบบปฏิบัติการที่แตกต่างกันซึ่งไม่ได้ทำให้เกิดปัญหาใด ๆ (ทำงานได้ดี) ในสถานการณ์ที่การส่งออก / นำเข้า MySql ทั่วไปล้มเหลวมาก่อน


ดีที่จะเพิ่มว่าตารางใด ๆ ที่มีการเติมcache_หรือ_cacheต่อท้ายมีความปลอดภัยในการตัดทอนเช่นfeatures_cacheหรือviews_data_object_export_cacheอื่น ๆ
Beebee

1
Word of waring ข้อมูลในตารางการค้นหาสามารถแยกออกได้ แต่อาจต้องใช้เวลานานมากในการสร้างดัชนีใหม่ในเว็บไซต์ขนาดใหญ่ ตัดสินสิ่งนี้เป็นกรณี ๆ ไป
mpdonadio

2
นอกจากนี้ข้อความที่ตัดตอนมาของ B&M เกี่ยวกับข้อมูลที่แคชนั้นไม่ถูกต้องเล็กน้อย เมื่อเปิดใช้งานในไซต์มันจะไม่รวมตารางแคช อย่างไรก็ตามหากคุณเพิ่มโมดูลหลังจากตั้งค่า B&M ตารางแคชอาจไม่ถูกเพิ่มไปยังรายการข้อมูลที่แยก ฉันได้เห็นสิ่งนี้เกิดขึ้นหลายครั้งโดยทั่วไปเมื่อฉันแทนที่การตั้งค่าในโปรไฟล์เริ่มต้น
mpdonadio

@MPD: ขอบคุณสำหรับคำติชมที่น่าสนใจ (ยังไม่รู้เกี่ยวกับเรื่องนี้!) เกี่ยวกับตารางค้นหา: จุดที่ถูกต้อง แต่โดยส่วนตัวฉันมักจะใช้วิธีการสร้างใหม่: มันช่วยให้ได้รับข้อ จำกัด และช่วยให้มั่นใจว่าดัชนีตรงกับเนื้อหาจริงในเป้าหมาย เกี่ยวกับความคิดเห็นที่ 2 ของคุณ: ข้อความที่ตัดตอนมาจากหน้าโครงการดังนั้นคุณอาจต้องการรายงานปัญหาเกี่ยวกับเรื่องนั้นในคิวปัญหา (Drupal.SE ไม่ใช่ที่สำหรับรายงานข้อผิดพลาด ฯลฯ ใช่ไหม) .
Pierre.Vriens

@ Pierre.Vriens การจับคู่เนื้อหาไม่สำคัญว่าสมมติว่าคุณมี cron ที่ทำงานอยู่และตรวจสอบให้แน่ใจว่ามีการทำดัชนีเกิดขึ้น B&M ค่อนข้างแน่ใจว่าเป็นปัญหาที่ทราบกันดี นอกจากนี้ส่วนเกี่ยวกับข้อมูลเซสชันไม่ถูกต้อง 100% ตารางนั้นมีขนาดใหญ่เนื่องจากเวลาเซสชันเริ่มต้นประมาณสามสัปดาห์ _drupal_session_garbage_collectionจะทำให้ตารางนั้นเป็นระเบียบขึ้นอยู่กับการตั้งค่าระบบ
mpdonadio

19

จากประสบการณ์ของฉันฉันล้างตาราง "cache_ *" ทั้งหมด

  • บวก "watchdog" ถ้าฉันไม่สนใจเกี่ยวกับบันทึกของ Drupal ที่ผ่านมา
  • บวก "accesslog" ถ้าฉันไม่สนใจผู้ใช้ที่เข้าสู่ระบบ
  • รวมทั้ง "ค้นหา" ถ้าฉันไม่สนใจเนื้อหาของโหนดที่ทำดัชนี

1
เหมือนกันที่นี่ฉันยังต้องการ
Alex Weber

2
หมายเหตุสำหรับทุกคนที่พยายามทำสิ่งนี้: สร้างสำเนาสำรองก่อน และอย่าวางตารางค่อนข้างจะว่างเปล่าหรือตัดทอน
timofey.com

9

บางครั้งฉันรัน SQL นี้เพื่อจับตาดูการเติบโตของตารางด้านบน:

SELECT * 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =  'yourdbnamehere'
ORDER BY table_rows DESC 

คอลัมน์ใดที่ฉันควรตรวจสอบการเติบโตคุณหมายถึง TABLE_ROWS
Bala

8

สามารถล้าง Watchdog และเซสชันได้โปรดจำไว้ว่าผู้ใช้ทั้งหมดจะถูกออกจากระบบ


6

ด้วย mySQL คุณสามารถทำสิ่งสนุก ๆ ด้วยโปรแกรม mysqldump เพื่อส่งออกฐานข้อมูลทั้งหมดหรือบางส่วน เช่นนี้เพียงส่งออกโครงสร้าง:

mysqldump -u root -pBatteryHorseStapleObviously -h some_host --no-data dbname > ~/dbname.sql

จากนั้นคุณสามารถใช้ตัวเลือก 'ละเว้นตาราง' เพื่อส่งออกข้อมูลเพิ่มเติมเช่น

mysqldump -u root -pBatteryHorseStapleObviously -h some_host --ignore-table=dbname.huge_table --ignore-table=dbname.massive_table --ignore-table=dbname.useless_table some_host >> ~/dbname.sql

ซึ่งจะวางข้อมูลที่จุดสิ้นสุดของไฟล์ก่อนหน้านี้โดยไม่สนใจบางตารางขนาดใหญ่

หากคุณต้องการตารางจำนวนมากจากนั้นคุณสามารถส่งออกไปยังไฟล์ที่แตกต่างกันโดยใช้วิธีการด้านบนคุณสามารถนำเข้าตารางเหล่านั้นเป็นชิ้น ๆ (แม้ว่าอาจจำเป็นต้องตรวจสอบ fk)

คุณได้ gzip ไฟล์ของคุณก่อนที่จะอัปโหลดหรือว่าเป็นคำถามที่โง่?


5

ใช้โมดูลOptimizeDBเพื่อทำความสะอาดตารางแคช การบริหารฐานข้อมูลก็มีประโยชน์เช่นกัน

อย่าลืมสำรองข้อมูลของฐานข้อมูล


ฐานข้อมูลอยู่ในขณะนี้ 14Mo ผมใช้ OptimizeDB, Thak คุณอีกครั้ง
มิทช์

@ Mitch you welcome
M ama D

2

ไม่ได้เป็นผู้เชี่ยวชาญซุปเปอร์เกี่ยวกับเรื่องนี้ แต่การแบ่งปันประสบการณ์ของฉัน ... ถ้าคุณไม่ได้ใช้การสำรองข้อมูลและโมดูลโยกย้ายด้วยตนเองและส่งออกบางส่วนของตารางที่คุณสามารถล้าง / ตัดจะเป็นwatchdog, cache, cache_menu, cache_block, cache_content, cache_formขณะที่พวกเขาอาจจะมีขนาดใหญ่ จำนวนการล้างสิ่งที่แคชซึ่งฉันคิดว่าจะไม่ทำร้าย ... แต่อีกครั้งนี่เป็นประสบการณ์ของฉันและฉันไม่พบปัญหาหรือการสูญเสียข้อมูลเนื่องจากสิ่งนี้


2

ความคิดบางอย่าง:

  • แนวทางที่แตกต่างอย่างสิ้นเชิงคือการสร้างฟีด RSS โดยใช้มุมมองของข้อมูลที่คุณต้องการเก็บไว้ แล้วสร้างการติดตั้ง Drupal สดและนำเข้าข้อมูลนี้กับฟีด API
  • และอีกวิธีหนึ่ง: จ้างนักเรียนและให้เขา / เธอถ่ายโอนข้อมูลด้วยตนเองไปยังการติดตั้งใหม่ของคุณ
  • หรืออันนี้: บอกเราเพิ่มเติมเกี่ยวกับสิ่งที่ตารางมีขนาดใหญ่มากและเหตุผลสำหรับสิ่งนี้ (ถ้าคุณรู้)

2

ตรวจสอบexample.drushrc.phpรายการเหล่านี้:

$options['structure-tables']['common'] = array('cache', 'cache_*', 'history', 'search_*', 'sessions', 'watchdog');
$options['skip-tables']['common'] = array('migration_*');

การล้างฐานข้อมูลให้ปลอดภัยในแง่ของการย้ายฐานข้อมูลระหว่างสภาพแวดล้อมที่แตกต่างกัน (โดยเฉพาะเมื่อคุณทำงานกับฐานข้อมูลขนาดใหญ่ ) อย่างไรก็ตามคุณยังต้องเข้าใจสิ่งที่คุณกำลังล้าง


1

ตารางเพิ่มเติมที่สามารถเคลียร์ได้:

  • ชุด
  • webform_submitted_data

สิ่งอื่น ๆ ที่อาจใช้พื้นที่ค่อนข้างมาก: - เนื้อหาของคุณเวอร์ชันเก่ากว่า (ไม่สามารถล้างได้ด้วยการตัดทอนอย่างง่าย) - locales_source และ locales_target หากคุณมีภาษาที่ไม่ได้ใช้อีกต่อไปหรือการแปลสตริงสำหรับโมดูลที่คุณไม่ได้ใช้อีกต่อไป ตารางเหล่านี้ดูเหมือนจะไม่เคยทำความสะอาดเลย

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