Hangi masaları temizlemek güvenlidir?


40

Sebepsiz yere son derece geniş bir veritabanına sahip bir müşteri sitesini devraldım. Orta düzeyde içerik ve çok az etkin modüller var. Ancak, veritabanı kolayca dolaşmak için çok büyük ve onu temizlemek istiyorum.

Standart önbellek tablolarını, sistem günlüğünü ve erişim günlüğünü temizledim.

Standart bir Drupal sitesinde güvenle kesebileceğim başka masalar var mı?


1
Tabloları, büyüklüklerine göre phpmyadmin cinsinden sıralayabilirsiniz. Bunu dene ve sonra hangi tabloların en büyük olduğuna bak ve bunu rapor et. Örneğin, bir nedenden dolayı temizlenemeyen devasa oturum masaları gördüm. Yani kullanıcılar (onlar sitede olup olmadığını kullanıcılarla bu koordine etmek isteyebilirsiniz, böylece girilen form verilerini kaybetmeden muhtemelen ve) tekrar giriş yapmak zorunda ile yaşayabilir Temizlemek bir şey var
Berdir

Sadece bir not var, aşağıdaki tüm cevapların kesilmeden söz etmesinin {cache_form}doğru olmadığı. Bu gerçek bir önbellek tablosu değil. Devam eden form gönderimleri içeriyor. Bu tablodaki tüm verileri silerseniz, kullanıcı olabilir verilerinizi kaybedebilirsiniz. Bu tablo ile yapılacak en doğru şey, girişlerin sona ermesidir.
mpdonadio

Yanıtlar:


21

Yedekleme ve taşıma modülünü kullanın, gerekli olmayan verileri atlamak için iyi varsayılan ayarlarla birlikte gelir . Varsayılan olarak önbellek, bekçi köpeği ve diğer bazı tabloların olmadığı bir DB yedeklemesi oluşturur.

Bu phpMyAdmin ile bir göz atmanıza yardımcı olmaz ve hangi tabloların çok sayıda girişi olduğunu bize bildirin.


1
Burası ilk gittiğim yer. Ancak, veritabanı bir konser bitti ve bu yöntemle yedeklemeyecek. Niyetim, veri tabanını temizlemektir, böylece düzenli aralıklarla yedekleme yapabilir ve geçirebilirim. Temelde temizleyebileceğim başka masalar olup olmadığını merak ediyorum (varsayılan olarak BAM tarafından atlanmadı).
Nigel Waters,

Komut satırı erişiminiz varsa, yedekleme başlatmak ve geçiş yapmak için sarhoş kullanabilirsiniz. Veya komut satırından mysql'e erişin (örnek: mysqldump --host = your.host.com - kullanıcı = db_user --compress --password your_pw> dump.sql) Bu şekilde zaman aşımına uğramazsınız. Genel olarak, bir yedeğe sahip olmadan temizleme yapmak çok fazla bir tasarruf sağlamaz. Kırık bir sayfa ile kolayca bitebilir ve geri dönmenin bir yolu yoktur.
BetaRide

Sorun zaman aşımına uğradı değil. Kolayca ssh / drush ile yedekleme yapabileceğimi biliyorum. Veritabanını, son birkaç yılda bir çok el ile görüldüğü gibi temizlemek istiyorum ve orada çok fazla gereksiz kabuk var. Yalnızca hangi tabloları güvenle temizleyebileceğimi bilmem gerekiyor (sitemi nasıl yedekleyeceğimi veya taşıyacağımı bilmiyorum).
Nigel Waters,

@BetaRide doğrudur, BAM'ın dışladığı varsayılanlar güvenlidir. Diğerleri gerçek verilere sahip olabilir veya olmayabilir.
mpdonadio

22

Hariç tutulabilen drupal 7 tablolar

Drupal 7’de, temizleyebileceğiniz (veritabanı boyutunu küçültmek için) veya güvenli bir şekilde dışlamak için (örneğin , yerel olarak dışa aktarılan veritabanı boyutunu nasıl sınırlandırabilirim? ):

  • accesslog
  • grup, yığın, parça, bir defada alınan miktar
  • önbellekle ilgili tüm tablolar, örneğin:
    • önbellek *
    • cache_block
    • cache_content
    • cache_filter *
    • cache_form
    • cache_calendar_ical
    • cache_menu *
    • cache_page *
    • cache_views
    • * features_cache veya views_data_object_export_cache gibi _cache
  • ctools_views_cache
  • ctools_object_cache
  • devel_queries
  • devel_times
  • sel
  • Tarih
  • kuyruk
  • çeşitli arama_ * tabloları, örneğin:
    • search_dataset
    • search_index
    • search_keywords_log
    • search_total
  • semafor
  • oturumları
  • bekçi köpeği
  • webform_submitted_data

Genellikle tablolar gibi bir çok veritabanı alanı kullanır search_indexve watchdogkullanırız, bu yüzden bu 2 tabloyu ortadan kaldırmak zaten çok büyük bir fark yaratabilir.

Hariç tutulabilecek diğer tablolar

Kalan masalarınızın boyutunu kontrol edin ve hangisinin en büyük olduğunu seçin.

Genellikle, temizleme yordamı uygulanmayan oturum tabloları bulabilirsiniz. Bu tür tabloları muhtemelen dışlayabilirsiniz.

Modül Yedekleme ve Geçiş

" Sunucunun içe aktarma sınırını aşmak için yerel olarak dışa aktarılan veritabanı boyutunu nasıl küçültebilirim? " Bölümünde açıklanan sorunu daha da azaltmak için , Yedekleme ve Geçirme modülüne de bakın. Proje sayfasından bir alıntı (buraya kalın işaretleme eklendi):

Drupal MySQL veritabanınızı, kodunuzu ve dosyalarınızı yedekleyin ve geri yükleyin ya da ortamlar arasında bir siteyi geçirin. Yedekleme ve Geçiş, gzip, bzip ve zip sıkıştırmasının yanı sıra otomatik zamanlanmış yedeklemeleri de destekler.

Yedekle ve Taşı ile, veritabanı tablolarınızın bir kısmını veya tamamını bir dosya indirme işlemine veya sunucudaki veya dışındaki bir dosyaya kaydedebilir ve yüklenen veya önceden kaydedilmiş bir veritabanı dökümünden geri yükleyebilirsiniz. Hangi tabloları ve hangi verileri yedekleyip önbelleğe alacağınızı varsayılan olarak hariç tutabilirsiniz .

Üstelik dahası var: eğer yerel ortamınız (örneğin Win veya Mac) işletim sisteminden barındırılan web sitenizin sunucusunun (Linux gibi) çalıştığından, işletim sisteminden farklıysa, işletim sistemleri arasındaki bu fark potansiyel ekstra zorluklar anlamına gelir. Farklı işletim sistemleri arasında Backup and Migrate modülüyle ilgili iyi deneyimlerim oldu, bu tipik bir MySql ihracat / ithalat işleminin daha önce başarısız olduğu durumlarda herhangi bir soruna yol açmadı (iyi çalıştı).


İyi ile herhangi tablolar eklemek cache_başına veya _cachegüvenli eklenmiş gibi, hem de kesecek features_cacheya views_data_object_export_cachevs
BEEBEE

1
Waring kelimesi, arama tablosu verileri hariç tutulabilir, ancak büyük sitelerdeki endeksleri yeniden oluşturmak çok, çok uzun zaman alabilir. Buna baz bazında karar verin.
mpdonadio

2
Ayrıca, önbelleğe alınmış veriler hakkında B&M alıntı, biraz yanlıştır. Bir sitede etkinleştirildiğinde, önbellek tablolarını dışlar. Ancak, B&M kurulduktan sonra bir modül eklerseniz, önleme veri listesine önbellek tabloları eklenemeyebilir. Bunun, çoğu zaman, genellikle varsayılan profildeki ayarları geçersiz kıldığımda olduğunu gördüm.
mpdonadio

@MPD: Bu ilginç geri bildirim için teşekkür ederiz (henüz bunu bilmiyordum!). Arama tablosu hakkında: geçerli nokta. Fakat şahsen ben her zaman yeniden oluşturma yaklaşımını benimsemeliyim: bu sınırlamayı aşmaya yardımcı olur ve endeksin hedefdeki gerçek içerikle eşleşmesini sağlar. 2. yorumunuz hakkında: alıntı, proje sayfasından kesilmiş bir geçmişe dayanıyor, bu nedenle belki de konuyla ilgili bir konuda dosya yazmak istersiniz (Drupal.SE hatalar, vb. Hakkında raporların yeri değil mi?) .
Pierre.Vriens

@ Pierre.Vriens İçeriğin eşleştirilmesi cronun çalıştığını ve indekslemenin yapıldığından emin olduğunuzu varsayarak farketmemelidir. B&M, bunun bilinen bir sorun olduğuna eminim. Ayrıca, oturum verileri ile ilgili bölüm% 100 doğru değildir. Bu tablo genişler çünkü varsayılan oturum süresi yaklaşık üç haftadır; _drupal_session_garbage_collectionsistem ayarlarına bağlı olarak bu tabloyu düzenli tutacak.
mpdonadio

19

Deneyimlerime göre, "cache_ *" tablolarının tümünü temizliyorum.

  • Artı "Bekçi köpeği" geçmiş Drupal günlüklerini umursamıyorsam
  • Ayrıca oturum açmış kullanıcıları umursamıyorsam "accesslog"
  • Ayrıca dizinlenmiş düğümlerin içeriğini umursamıyorsam "ara"

1
Burada da aynı, oturumları da yaparım.
Alex Weber,

2
Bunu deneyen herkese not: Önce bir yedekleme oluşturun. Ve masaları düşürmeyin, daha ziyade Boş veya Kesin.
timofey.com 25:12

9

Bazen en iyi tabloların büyümesine göz kulak olmak için bu SQL'i çalıştırıyorum:

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

Büyüme için hangi sütunu kontrol etmeliyim?, Demek istediğin TABLE_ROWS
Bala

8

Bekçi köpeği ve oturumlar da temizlenebilir, tüm kullanıcıların oturumdan çıkacağını unutmayın.


6

MySQL ile veritabanını tamamen veya bir kısmını dışa aktarmak için mysqldump programıyla eğlenceli şeyler yapabilirsiniz. Örneğin bu sadece yapıyı dışa aktarır:

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

Verileri daha da dışa aktarmak için 'tabloyu yoksay' seçeneğini kullanabilirsiniz.

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

Bu, bazı büyük tabloları yok sayarak verileri önceki dosyanın sonuna yerleştirir.

Daha sonra masif tablolara ihtiyacınız varsa, yukarıdaki yaklaşımı kullanarak bunları farklı bir dosyaya aktarabilirsiniz, daha sonra bunları topaklara aktarabilirsiniz (fk kontrolü gerekli olsa da).

Yüklemeden önce dosyanızı açtınız mı, yoksa bu aptalca bir soru mu?



2

Bu ancak sen yok eder bazı tabloların / trankulatı olacağını dışa elle yedekleme ve geçirmek modülü kullanarak ve yoksa ... benim deneyim paylaşımı değil süper uzman watchdog, cache, cache_menu, cache_block, cache_content, cache_formonlar büyük içerebilir olarak Sanırım temizlediğim önbellek miktarının zararı olmaz ... ama yine de bu benim deneyimim ve bundan dolayı sorun ya da veri kaybı ile karşılaşmadım.


2

Bazı fikirler:

  • Tamamen farklı bir yaklaşım, saklamak istediğiniz verilerin görünümlerini kullanarak RSS yayınları oluşturmak olacaktır . Ardından, yeni bir Drupal yüklemesi oluşturun ve bu verileri Feed API ile içe aktarın .
  • Ve sadece başka bir yaklaşım: Bir öğrenciyi işe alın ve verileri manuel olarak yeni kurulumunuza aktarmasına izin verin.
  • Veya bu: Bize hangi masaların çok büyük olduğu ve bunun nedeninin ne olduğunu (bilmeniz durumunda) anlatın.

2

Kontrol example.drushrc.phplisteleyin hangi:

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

Veritabanını farklı ortamlar arasında taşıma (özellikle büyük veritabanlarıyla çalışırken ) açısından bunları temizlemek güvenlidir . Ancak hala neyi temizlediğinizi anlamalısınız.


1

Temizlenebilecek ek tablolar:

  • grup, yığın, parça, bir defada alınan miktar
  • webform_submitted_data

Oldukça fazla yer kaplayacak diğer şeyler: - içeriğinizin eski sürümleri (basit bir kesmeyle temizlemek mümkün değildir). - locales_source ve locales_target. Artık kullanılmayan dilleriniz veya artık kullanmadığınız modüller için string çevirileriniz varsa. Bu masalar hiç temizlenmemiş gibi görünüyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.