どのテーブルをクリアしても安全ですか?


40

理由もなく、非常に大きなデータベースを持つクライアントサイトを継承しました。中程度の量のコンテンツがあり、有効なモジュールはほとんどありません。ただし、データベースは大きすぎて簡単に移動できないため、クリーンアップする必要があります。

標準キャッシュテーブル、syslog、およびaccesslogを消去しました。

標準のDrupalサイトで安全に切り捨てることができる他のテーブルはありますか?


1
phpmyadminでサイズに基づいてテーブルをソートできます。それを試してから、どのテーブルが最大かを調べて、ここで報告してください。たとえば、何らかの理由でクリーンアップされない巨大なセッションテーブルを見てきました。ユーザーが再度ログインしなければならない場合(そしてサイトにいる場合は入力されたフォームデータを失う可能性があるため、ユーザーと調整する必要があるかもしれません)
-Berdir

補足説明として、切り捨てに言及している以下の回答はすべて{cache_form}正しいとは限りません。これは真のキャッシュテーブルではありません。進行中のフォーム送信が含まれています。このテーブルのすべてのデータを削除すると、ユーザーデータを失う可能性があります。このテーブルで適切なことは、エントリを期限切れにすることです。
mpdonadio

回答:


21

バックアップと移行モジュールを使用すると、不要なデータをスキップするための適切なデフォルトが付属しています。デフォルトでは、キャッシュ、ウォッチドッグ、その他のテーブルなしでDBバックアップを生成します。

これが役に立たない場合は、phpMyAdminを見て、どのテーブルに多くのエントリがあるかを教えてください。


1
これは私が行った最初の場所です。ただし、データベースはギグを超えているため、この方法ではバックアップしません。私の意図は、定期的にバックアップと移行を使用できるようにデータベースをクリアすることです。基本的に、消去できるテーブルが他にあるかどうか疑問に思っています(デフォルトではBAMによってスキップされません)。
ナイジェルウォーターズ

コマンドラインにアクセスできる場合は、drushを使用してバックアップと移行を開始できます。または、コマンドラインでmysqlにアクセスします(例:mysqldump --host = your.host.com --user = db_user --compress --password your_pw> dump.sql)この方法では、タイムアウトになりません。一般に、バックアップを持たずにクリアすることはあまり保存されません。あなたは簡単に壊れたページになってしまい、戻る方法はありません。
BetaRide

問題はタイムアウトにありません。ssh / drushを使用して簡単にバックアップを実行できることを知っています。過去数年間に1対多の手を見てきたので、データベースをクリーンアップしたいと思います。安全に消去できるテーブルを知る必要があるだけです(サイトをバックアップまたは移動する方法がわかりません)。
ナイジェルウォーターズ

@BetaRideは正しいです。BAMが除外するデフォルトのものは安全なものです。他のものには実際のデータがある場合とない場合があります。
mpdonadio

22

除外できるDrupal 7テーブル

Drupal 7のテーブルのリストは、データベースのサイズを減らすためにクリアするか、移行を安全に除外することができます(サーバーのインポート制限を回避するためにローカルにエクスポートされたデータベースのサイズを減らす方法に関する質問のように?)):

  • アクセスログ
  • バッチ
  • 次のようなすべてのキャッシュ関連テーブル
    • キャッシュ*
    • 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_indexwatchdog使用するため、これらの2つのテーブルを削除するだけで、すでに大きな違いを生むことができます。

除外される可能性のある他のテーブル

残りのテーブルのサイズを確認し、サイズが最も大きいテーブルを特定します。

通常、クリーンアップ手順が設定されていないセッションテーブルを見つけることがあります。このようなテーブルもおそらく除外できます。

モジュールのバックアップと移行

ローカルにエクスポートされたデータベースのサイズを小さくして、サーバーのインポート制限を回避する方法」で詳しく説明されているように、課題をさらに減らすには、バックアップおよび移行モジュールも参照してください。プロジェクトページからの引用です(太字のマークアップはここに追加されています)。

Drupal MySQLデータベース、コード、およびファイルをバックアップおよび復元するか、環境間でサイトを移行します。バックアップと移行は、gzip、bzip、zip圧縮、およびスケジュールされた自動バックアップをサポートしています。

バックアップと移行を使用すると、データベーステーブルの一部またはすべてをファイルのダウンロードにダンプしたり、サーバーまたはオフサイトのファイルに保存したり、アップロードまたは以前に保存したデータベースダンプから復元したりできます。デフォルトでは、どのテーブルとどのデータをバックアップおよびキャッシュするかを選択できます

さらに、ローカル環境(WinやMacなど)がホストされているWebサイトのサーバーが実行しているOS(Linuxなど)と異なる場合、OS間のこれらの違いは潜在的な余分な課題を意味します。異なるOS間でのバックアップおよび移行モジュールの使用経験が豊富で、これまでは典型的なMySqlエクスポート/インポートが失敗した状況で問題は発生しませんでした(正常に動作しました)。


任意のテーブルことを追加するには良いcache_前に付加または_cache追加を切り捨てる安全だけでなく、のようなあるfeatures_cacheviews_data_object_export_cacheなど
Beebee

1
警告として、検索テーブルのデータは除外できますが、大きなサイトでインデックスを再構築するには非常に長い時間がかかる場合があります。ケースバイベースでこれを判断してください。
mpdonadio

2
また、キャッシュされたデータに関するB&Mの抜粋は少し間違っています。サイトで有効にすると、キャッシュテーブルが除外されます。ただし、B&Mのセットアップ後にモジュールを追加すると、キャッシュテーブルが除外データリストに追加されない場合があります。私はこれを何度も何度も見ましたが、通常はデフォルトのプロファイルの設定を上書きします。
mpdonadio

@MPD:この興味深いフィードバックに感謝します(まだそれを知りませんでした!)。検索テーブルについて:有効なポイント。しかし、個人的には、常に再構築アプローチを採用します。制限を回避するのに役立ち、インデックスがターゲットの実際のコンテンツと一致することを保証します。2番目のコメントについて:抜粋はプロジェクトページからの切り取りと貼り付けです。そのため、問題に関する問題を問題キューに登録することをお勧めします(Drupal.SEはバグなどについて報告する場所ではありませんか?) 。
Pierre.Vriens

@ Pierre.Vriens cronが実行されており、インデックス作成が行われていることを確認している場合、コンテンツの一致は重要ではありません。B&M、これは既知の問題です。また、セッションデータに関するセクションは100%正確ではありません。デフォルトのセッション時間が約3週間であるため、このテーブルは大きくなります。_drupal_session_garbage_collectionシステム設定に基づいて、テーブルを整頓します。
mpdonadio

19

私の経験では、すべての「cache_ *」テーブルをパージします。

  • 過去のDrupalログを気にしない場合は「ウォッチドッグ」
  • ログインユーザーを気にしない場合は「accesslog」
  • インデックス付きノードの内容を気にしない場合は「検索」

1
ここでも同じ、セッションもしたい。
アレックスウェーバー

2
これを試みる人への注意:最初にバックアップを作成します。そして、テーブルをドロップせず、空または切り捨てます。
-timofey.com

9

私は時々、このSQLを実行して、上位テーブルの成長を監視しています。

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

?私は、あなたの平均TABLE_ROWS成長のために何列をチェックする必要があります
バラ

8

ウォッチドッグとセッションもクリアできます。すべてのユーザーがログアウトされることに注意してください。


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ようこそ
D

2

ないスーパーこれについて専門家が、私の経験を共有する...あなたは空にでき、テーブルの一部/ TRUNCATEは次のようになり、バックアップや移行モジュールを使用して、手動でそれらをエクスポートしていない場合はwatchdogcachecache_menucache_blockcache_contentcache_form彼らは大が含まれている可能性があるとして、キャッシュされたものをクリアすることは、私が傷つけないだろうと思います...しかし、これは私の経験であり、これによりトラブルやデータの損失に遭遇したことはありません。


2

いくつかのアイデア:

  • まったく異なるアプローチは、保持するデータのビューを使用してRSSフィードを作成することです。次に、新しいDrupalインストールを作成し、Feed APIでこのデータをインポートします
  • そしてもう1つのアプローチ:学生を雇い、新しいインストールに手動でデータを転送させます。
  • または、これ:どのテーブルが非常に巨大で、その理由は何ですか(ご存じの場合)。

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.