Quali tabelle sono sicure da cancellare?


40

Ho ereditato un sito client che ha un database estremamente grande senza motivo. C'è una moderata quantità di contenuto e pochissimi moduli abilitati. Tuttavia, il database è troppo grande per spostarsi facilmente e voglio ripulirlo.

Ho cancellato le tabelle cache standard, syslog e accesslog.

Ci sono altri tavoli che posso troncare in modo sicuro in un sito Drupal standard?


1
È possibile ordinare le tabelle in base alla loro dimensione in phpmyadmin. Provalo e guarda quali sono le tabelle più grandi e segnalalo qui. Ad esempio, ho visto enormi tabelle di sessione che non sono state ripulite per qualche motivo. È qualcosa che potresti chiarire se riesci a convivere con gli utenti che devono accedere nuovamente (e possibilmente perdere i dati dei moduli inseriti se si trovano sul sito, quindi potresti voler coordinare questi con gli utenti)
Berdir

Solo una nota a margine lì, che tutte le risposte sotto che menzionano il troncamento {cache_form}non sono davvero corrette. Questa non è una vera tabella cache. Contiene invii di moduli in corso. Se si eliminano tutti i dati in questa tabella, l'utente potrebbe perdere i dati. La cosa corretta da fare con questa tabella è far scadere le voci.
mpdonadio

Risposte:


21

Utilizza il modulo backup e migrazione , viene fornito con buone impostazioni predefinite per saltare i dati non necessari . Per impostazione predefinita, genera un backup del DB senza cache, watchdog e alcune altre tabelle.

Se questo non aiuta, dai un'occhiata a phpMyAdmin e dicci quali tabelle contengono molte voci.


1
Questo è il primo posto in cui sono andato. Tuttavia, il database ha superato un concerto e non eseguirà il backup con questo metodo. La mia intenzione è di cancellare il database in modo da poter utilizzare il backup e migrare su base regolare. In sostanza mi chiedo se ci sono altre tabelle che posso cancellare (che non sono ignorate di default da BAM).
Nigel Waters,

Se si dispone dell'accesso alla riga di comando, è possibile utilizzare drush per avviare il backup e migrare. Oppure accedi a mysql dalla riga di comando (esempio: mysqldump --host = your.host.com --user = db_user --compress --password your_pw> dump.sql) In questo modo non ti imbatterai in timeout. In generale, cancellare senza un backup non è molto salvativo. Puoi facilmente finire con una pagina spezzata e non c'è modo di tornare indietro.
BetaRide,

Il problema non riguarda i timeout. So di poter eseguire facilmente i backup tramite ssh / drush. Vorrei ripulire il database poiché ha visto una o più mani negli ultimi anni e c'è un sacco di roba inutile lì dentro. Devo solo sapere quali tabelle posso tranquillamente cancellare (non so come fare il backup o spostare il mio sito).
Nigel Waters,

@BetaRide è corretto, quelli predefiniti che BAM esclude sono quelli sicuri. Gli altri potrebbero avere o meno dati reali.
mpdonadio

22

Drupal 7 tabelle che possono essere escluse

Ecco un elenco di tabelle in Drupal 7 che puoi cancellare (per ridurre le dimensioni del database) o escludere in modo sicuro per eseguire una migrazione (come nella domanda su Come ridurre le dimensioni del database esportato localmente per aggirare il mio limite di importazione del server? ):

  • AccessLog
  • partita
  • tutte le tabelle relative alla cache, come:
    • Cache *
    • cache_block
    • cache_content
    • cache_filter *
    • cache_form
    • cache_calendar_ical
    • cache_menu *
    • cache_page *
    • cache_views
    • * _cache, come features_cache o views_data_object_export_cache
  • ctools_views_cache
  • ctools_object_cache
  • devel_queries
  • devel_times
  • alluvione
  • storia
  • coda
  • varie tabelle search_ *, come:
    • search_dataset
    • search_index
    • search_keywords_log
    • search_total
  • semaforo
  • sessioni
  • cane da guardia
  • webform_submitted_data

Di solito tabelle come search_indexe watchdogusano molto spazio nel database, quindi eliminare queste 2 tabelle può già fare una grande differenza.

Altre tabelle che potrebbero essere escluse

Controlla le dimensioni delle tabelle rimanenti e identifica quali sono le più grandi.

In genere è possibile trovare tabelle di sessioni per le quali non è in atto alcuna procedura di pulizia. Probabilmente puoi anche escludere tali tabelle.

Modulo di backup e migrazione

Per ridurre ulteriormente la sfida, come spiegato in " Come ridurre le dimensioni del database esportato localmente per aggirare il limite di importazione del mio server? ", Guarda anche il modulo Backup e migrazione . Ecco una citazione dalla sua pagina del progetto (marcatura in grassetto aggiunta qui):

Eseguire il backup e il ripristino del database, del codice e dei file Drupal MySQL o migrare un sito tra ambienti. Backup e migrazione supporta la compressione gzip, bzip e zip, nonché i backup automatici pianificati.

Con Backup e migrazione è possibile scaricare alcune o tutte le tabelle del database in un file scaricato o salvarlo in un file sul server o fuori sede e ripristinare da un dump del database caricato o salvato in precedenza. È possibile scegliere quali tabelle e quali dati eseguire il backup e memorizzare nella cache i dati per impostazione predefinita .

E c'è ancora di più: se l'ambiente locale (ad esempio Win o Mac) differisce dal sistema operativo in esecuzione sul server del sito Web ospitato (come Linux), queste differenze tra i sistemi operativi implicano potenziali sfide extra. Ho avuto buone esperienze con il modulo Backup e migrazione tra diversi sistemi operativi, il che non ha causato problemi (ha funzionato bene) in situazioni in cui l'esportazione / importazione tipica di MySql non è riuscita prima.


È bene aggiungere che qualsiasi tavolo con cache_anteposto o _cacheaggiunto può essere troncato in modo sicuro, come features_cacheo views_data_object_export_cacheecc.
Beebee,

1
Un avvertimento, i dati della tabella di ricerca possono essere esclusi, ma può richiedere molto, molto tempo per ricostruire gli indici su grandi siti. Giudicare questo caso per base.
mpdonadio

2
Inoltre, l'estratto di B&M sui dati memorizzati nella cache è leggermente errato. Se abilitato su un sito, esclude le tabelle della cache. Tuttavia, se si aggiunge un modulo dopo aver impostato B&M, è possibile che le tabelle della cache non vengano aggiunte all'elenco dei dati di esclusione. Ho visto che ciò accade molte, molte volte, in genere quando eseguo l'override delle impostazioni sul profilo predefinito.
mpdonadio

@MPD: grazie per questo interessante feedback (non lo sapevo ancora!). Informazioni sulla tabella di ricerca: punto valido. Ma personalmente preferirei sempre l'approccio di ricostruzione: aiuta a aggirare la limitazione e assicura che l'indice corrisponda al contenuto effettivo nel target. A proposito del tuo secondo commento: l'estratto è un taglio della pagina del progetto, quindi forse vuoi archiviare un problema al riguardo nella sua coda di problemi (Drupal.SE non è il posto giusto per segnalare bug, ecc., Giusto?) .
Pierre.Vriens,

@ Pierre.Vriens La corrispondenza del contenuto non dovrebbe importare, supponendo che tu abbia cron in esecuzione e assicurati che avvenga l'indicizzazione. B&M, abbastanza sicuro che sia un problema noto. Inoltre, la sezione relativa ai dati della sessione non è corretta al 100%. Quella tabella diventa grande perché il tempo di sessione predefinito è di circa tre settimane; _drupal_session_garbage_collectionmanterrà la tabella in ordine, in base alle impostazioni di sistema.
mpdonadio

19

Nella mia esperienza, elimino tutte le tabelle "cache_ *".

  • più "cane da guardia" se non mi importa dei registri Drupal precedenti
  • più "accesslog" se non mi interessano gli utenti che hanno effettuato l'accesso
  • più "cerca" se non mi interessa il contenuto dei nodi indicizzati

1
Lo stesso qui, farei anche sessioni.
Alex Weber,

2
Una nota per chiunque tenti di farlo: crea prima un backup. E non lasciare cadere le tabelle, piuttosto Svuota o Tronca.
timofey.com,

9

A volte eseguo questo SQL per tenere d'occhio la crescita delle tabelle principali:

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

Quale colonna devo verificare per la crescita? Intendi TABLE_ROWS
Bala

8

Il watchdog e le sessioni possono anche essere cancellati, tenere presente che tutti gli utenti verranno disconnessi.


6

Con mySQL puoi fare cose divertenti con il programma mysqldump per esportare il database nella sua interezza o in parti. Ad esempio, questo esporta solo la struttura:

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

È quindi possibile utilizzare l'opzione 'ignora tabella' per esportare ulteriormente i dati, ad es

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

Ciò posiziona i dati alla fine del file precedente ignorando alcune tabelle di massa.

Se poi hai bisogno delle enormi tabelle, puoi esportarle in un altro file usando l'approccio sopra, puoi quindi importarle in blocchi (anche se potrebbe essere necessario spuntare fk).

Hai decompresso il tuo file prima del caricamento o è una domanda stupida?



2

Non il super esperto su questo, ma condividere la mia esperienza ... se non si sta utilizzando il backup e il modulo di migrazione e manualmente esportarli alcune delle tabelle si può svuotare / troncare sarebbe watchdog, cache, cache_menu, cache_block, cache_content, cache_formin quanto potrebbe contenere un grande quantità di operazioni di memorizzazione nella cache che suppongo non farebbero male ... ma di nuovo questa è la mia esperienza e non ho riscontrato problemi o perdita di dati a causa di ciò.


2

Qualche idea:

  • Un approccio completamente diverso sarebbe quello di creare feed RSS utilizzando le visualizzazioni dei dati che si desidera conservare. Quindi crea una nuova installazione di Drupal e importa questi dati con l' API Feed .
  • E solo un altro approccio: assumere uno studente e lasciarlo trasferire manualmente i dati nella nuova installazione.
  • O questo: dicci di più su quali tabelle sono molto grandi e qual è il motivo (se lo sai).

2

Controlla example.drushrc.phpquale elenco questi:

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

È sicuro cancellarli in termini di spostamento del database tra ambienti diversi (specialmente quando si lavora con database di grandi dimensioni ). Tuttavia, devi ancora capire cosa stai cancellando.


1

Tabelle aggiuntive che possono essere cancellate:

  • partita
  • webform_submitted_data

Altre cose che potrebbero occupare un po 'di spazio: - versioni precedenti dei tuoi contenuti (non è possibile pulire con un semplice troncato). - locales_source e locales_target. Se hai lingue che non vengono più utilizzate o traduzioni di stringhe per moduli che non usi più. Queste tabelle sembrano non essere mai pulite.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.