{"id":230682,"date":"2022-11-28T19:52:00","date_gmt":"2022-11-28T16:52:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230682"},"modified":"2022-11-28T20:06:38","modified_gmt":"2022-11-28T17:06:38","slug":"la-guida-per-sviluppatori-di-wordpress-alla-ricostruzione-dei-dati-mysql","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/la-guida-per-sviluppatori-di-wordpress-alla-ricostruzione-dei-dati-mysql\/","title":{"rendered":"La Guida per sviluppatori di WordPress alla ricostruzione dei dati MySQL"},"content":{"rendered":"\n<p>Ad un certo punto nella carriera di ogni sviluppatore, ci sar\u00e0 un momento in cui farai qualcosa che accresce la produzione.<\/p>\n<ul>\n<li>Forse spingerai un codice che finisce per rompere una cache che fornisce dati a milioni di persone,<\/li>\n<li>Forse aggiornerai un&#8217;applicazione e finirai per spazzare via le informazioni di cui non \u00e8 stato eseguito il backup,<\/li>\n<li>O forse spingerai una modifica che &quot;funziona sulla tua macchina&quot; ma riempie completamente il repository di controllo del codice sorgente.<\/li>\n<\/ul>\n<p>E ci sono molti altri esempi. Sono sicuro che puoi nominarne rapidamente altri cinque tu stesso.<\/p>\n<p>Ho impegnato (gioco di parole, una specie di) la mia giusta quota di tutto quanto sopra, ma una delle cose che vedo dalle persone che lavorano nel nostro spazio.<\/p>\n<p>Cio\u00e8, coloro che lavorano con applicazioni Web supportate da database, \u00e8 la mancanza di comprensione dell&#8217;organizzazione del database a livello di file system e di come sia possibile ricostruire i dati anche quando non si dispone di un backup standard su cui lavorare.<\/p>\n<p>In questo post, approfondir\u00f2 l&#8217;organizzazione del database MySQL a livello di file system, come ripristinare le informazioni da quello rispetto a un file di backup se dovessi trovarti in quella situazione e fornire riferimenti (o segnalibri) dovrebbero ne hai bisogno.<\/p>\n<h2>Ricostruzione dati MySQL<\/h2>\n<p>Per essere chiari, parler\u00f2 di un database MySQL in esecuzione su una variante di un sistema operativo basato su *nix (quindi stai guardando una distribuzione di Linux o macOS).<\/p>\n<p>Le posizioni dei file (che tratter\u00f2 momentaneamente) varieranno su un sistema basato su Windows, ma dovrai fare riferimento al <strong><a href=\"https:\/\/dev.mysql.com\/doc\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">manuale MySQL<\/a><\/strong> o a una risorsa simile per trovarli.<\/p>\n<p>Il punto \u00e8: prima di approfondire questo articolo, scopri dove risiedono i file sul tuo sistema operativo. Ad esempio, se stai utilizzando macOS e probabilmente lo troverai in <strong>\/usr\/local\/mysql\/data.<\/strong><\/p>\n<p>Preferisco usare <strong><a href=\"https:\/\/wordpress.mediadoma.com\/it\/homebrew-node-e-gulp-per-lo-sviluppo-di-wordpress\/\" title=\"Homebrew\">Homebrew<\/a><\/strong> quindi i miei database MySQL sono in <strong>\/usr\/local\/var\/mysql<em><\/em><\/strong> .<em><\/em> E come puoi vedere sopra, noterai file che hanno lo stesso nome dei database che hai sul tuo sistema .<\/p>\n<h3>Come sono organizzati i database<\/h3>\n<p>A livello di superficie, sembra piuttosto semplice. Ma se devi aprire la directory come menzionato sopra, scoprirai che gran parte di ci\u00f2 che vedi sono directory &#8211; non file, di per s\u00e9 &#8211; che contengono pi\u00f9 informazioni.<\/p>\n<\/p>\n<p>Se approfondisci una delle directory, vedrai una variet\u00e0 di file:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163965-61e75bde646e7.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163965-61e75bde646e7.png\" alt=\"La Guida per sviluppatori di WordPress alla ricostruzione dei dati MySQL\"><\/a><\/p>\n<p>Questi includono file che includono i seguenti tipi:<\/p>\n<ul>\n<li>MONDO<\/li>\n<li>MIO<\/li>\n<li>FR<\/li>\n<li>IBD<\/li>\n<\/ul>\n<p>E ognuno di questi tipi di file esiste per ogni tabella nel database.<\/p>\n<p>Quindi diamo un&#8217;occhiata a questi pi\u00f9 in profondit\u00e0 per avere una maggiore comprensione di cosa sia esattamente costituito da un database.<\/p>\n<h4>1 Il database \u00e8 un insieme di file<\/h4>\n<p>In generale, la maggior parte di noi sa che MySQL \u00e8 un <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Relational_database\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">database relazionale<\/a><\/strong> e ogni database \u00e8 costituito da un insieme di tabelle che memorizzano tutti diversi tipi di informazioni (e molte tabelle sono correlate tra loro in qualche modo anche se \u00e8 solo un valore in un singola colonna).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163965-61e75be15f8cc.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163965-61e75be15f8cc.jpg\" alt=\"La Guida per sviluppatori di WordPress alla ricostruzione dei dati MySQL\"><\/a><\/p>\n<p>Ma questo post non riguarda l&#8217;aspetto relazionale del database n\u00e9 il modo in cui siamo in grado di eseguire query su di esso. (Se sei interessato, fallo: \u00e8 tutto basato sul <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Tuple_relational_calculus\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">calcolo delle tuple<\/a><\/strong> .)<\/p>\n<p>Si tratta invece di comprendere che per ogni tabella esiste un insieme di file che fanno riferimento alle informazioni contenute in ogni tabella. E<\/p>\n<h4>2 Comprendere i tipi di file<\/h4>\n<p>Poich\u00e9 ogni tabella in un database \u00e8 composta dai tipi di file precedenti, esaminiamo il singolo tipo di file e quindi determiniamo il ruolo che svolge per ciascuna tabella (e, in definitiva, come ci\u00f2 influisce sull&#8217;intero database).<\/p>\n<ul>\n<li><strong>MIO<\/strong>. Questo file contiene i dati archiviati nelle righe della tabella del database. Questo file \u00e8 strettamente correlato al file FRM.<\/li>\n<li><strong>FR<\/strong>. Questo file contiene i dati in formato tabella (che includono cose come la struttura di ciascuna colonna del database, il tipo di dati che contiene e cos\u00ec via).<\/li>\n<li><strong>MIO<\/strong>. Questo \u00e8 l&#8217;indice del database. Se stai usando un database MyISAM (che la maggior parte di noi sta usando InnoDB a questo punto), avrai questo file. Inoltre, i dati includono informazioni sul fatto che i dati siano stati chiusi correttamente o meno. Considera questo un file sull&#8217;integrit\u00e0 della tabella stessa. Non le informazioni al suo interno, non il formato di esso.<\/li>\n<li><strong>IBD<\/strong>. Questo \u00e8 un tipo di file associato alle tabelle del database InnoDB (quindi potresti non vederlo nella directory del tuo database). Se lo fai, tuttavia, \u00e8 importante sapere che i database basati su InnoDB memorizzeranno le informazioni su ciascuna tabella in questo file.<\/li>\n<\/ul>\n<p>Nelle informazioni di cui sopra, ci sono altri due argomenti che vale la pena esplorare.<\/p>\n<ol>\n<li>Il mio ISAM<\/li>\n<li>InnoDB<\/li>\n<\/ol>\n<p>Prima di esaminare ciascuno di questi, nota che MyISAM e InnoDB sono quelli che vengono definiti motori di archiviazione. Sembra stravagante, ma ha a che fare con il modo in cui il software del database gestisce le operazioni di <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Create,_read,_update_and_delete\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">creazione, lettura, aggiornamento ed eliminazione delle informazioni<\/a><\/strong>.<\/p>\n<h5>MyISAM e InnoDB: qual \u00e8 la differenza?<\/h5>\n<p>Ciascuno di questi motori di archiviazione differisce nel modo in cui gestiscono transazioni, blocco, rollback e ricerche. Per coloro che sono amministratori di database, hai familiarit\u00e0 con tutto quanto sopra (ma probabilmente non lo stai leggendo \ud83d\ude43).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163965-61e75be446350.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163965-61e75be446350.jpg\" alt=\"La Guida per sviluppatori di WordPress alla ricostruzione dei dati MySQL\"><\/a><\/p>\n<p>Non questo tipo di motore, ovviamente.<\/p>\n<p>Per il resto di noi, questo \u00e8 quello che abbiamo:<\/p>\n<ul>\n<li>Le transazioni si verificano ogni volta che almeno due istruzioni come SELECT e UPDATE o INSERT e DELETE o qualsiasi combinazione delle due (o pi\u00f9) vengono utilizzate insieme l&#8217;una all&#8217;altra. Quindi, se dovessi SELEZIONARE le informazioni e quindi CANCELLARE i risultati, avresti una transazione.\n<ul>\n<li><strong>MyISAM non supporta le transazioni.<\/strong> Ci\u00f2 significa che se una &quot;transazione&quot; viene interrotta, tutti i dati che sono stati elaborati durante l&#8217;operazione sono interessati. Inutile dire che questo non viene utilizzato.<\/li>\n<li>InnoDB, invece, garantisce che le modifiche non verranno apportate alla tabella fino al completamento della transazione. In altre parole, le modifiche non verranno salvate nel database.<\/li>\n<\/ul>\n<\/li>\n<li>Per ciascuno dei motori di archiviazione, il blocco varia a livello di tabella o di riga. Ogni volta che esegui una query su una tabella, MyISAM bloccher\u00e0 l&#8217;intera tabella fino al completamento del processo. InnoDB, dall&#8217;altro, bloccher\u00e0 solo le righe interessate. Questa \u00e8 una distinzione importante perch\u00e9 significa che puoi continuare a operare su una tabella, ma non sulle stesse righe, ogni volta che utilizzi InnoDB.<\/li>\n<li>I rollback non sono possibili in MyISAM. Ci\u00f2 significa che una volta apportata una modifica, \u00e8 fatta. InnoDB offre rollback. Quindi supponiamo che tu apporti una modifica al tavolo, hai accidentalmente fatto qualcosa che non volevi fare, quindi puoi riportarlo allo stato precedente. Questo non deve essere confuso con un backup, per\u00f2. \u00c8 pi\u00f9 simile a un&#8217;operazione di &quot;annullamento&quot; per una transazione.<\/li>\n<li>La ricerca, soprattutto nel modo in cui strutturiamo i nostri database, \u00e8 fondamentale nel modo in cui organizziamo i dati nei nostri database. In poche parole, InnoDB supporta l&#8217;indicizzazione <strong><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.6\/en\/innodb-fulltext-index.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">FULLTEXT<\/a><\/strong> (a partire da MySQL 5.6.4). Ma se il tuo host o provider non consente gli indici FULLTEXT, direi che non \u00e8 un rompicapo.<\/li>\n<\/ul>\n<p>Date tutte le informazioni di cui sopra, ognuno vede che i vantaggi del motore di archiviazione InnoDB superano di gran lunga quelli del motore di archiviazione MyISAM, specialmente se sei sopra per utilizzare una versione di MySQL almeno uguale a 5.6.4<\/p>\n<h4>3 Ricreare il database<\/h4>\n<p>A questo punto, supponiamo che tu sappia di avere accesso ai file che compongono il database dal sistema operativo.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163965-61e75be6c364a.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163965-61e75be6c364a.jpg\" alt=\"La Guida per sviluppatori di WordPress alla ricostruzione dei dati MySQL\"><\/a><\/p>\n<p>Forse \u00e8 un backup precedente, forse sei in grado di individuare i file su disco, o forse sei in grado di recuperarli in qualche altro modo e devi ripristinare il database a un punto precedente.<\/p>\n<h5>1 Non farlo in produzione<\/h5>\n<p>Prima di fare qualsiasi cosa, imposta un database vuoto sul tuo computer locale e poi lavora per importare le informazioni. Ma, ancora una volta, non \u00e8 come usare semplicemente un front-end di database per importare un file SQL.<\/p>\n<p>Creare invece una directory che corrisponda al nome del database che si desidera creare. In questo post, user\u00f2 l&#8217;esempio di <strong>trunkdev<\/strong> (poich\u00e9 \u00e8 qui che lavoro utilizzando la versione pi\u00f9 recente di <strong><a href=\"https:\/\/wordpress.org\/download\/source\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress trunk<\/a><\/strong> ).<\/p>\n<h5>2 Eseguire il backup del database esistente<\/h5>\n<p>Successivamente, eseguire il backup del database esistente il pi\u00f9 possibile, utilizzando un front-end del database o una copia dei file. Successivamente, copia i file dal percorso di origine nella directory che hai creato.<\/p>\n<p>Dovresti, a questo punto, essere in grado di caricare il front-end del tuo database preferito e vedere le informazioni contenute nei file di database che hai appena copiato. Ci\u00f2 dipende dal fatto che i file non siano danneggiati e che il server di database sia in esecuzione.<\/p>\n<h5>3 Non installare altro software<\/h5>\n<p>Nota che, a questo punto, non proverei a installare altri software su di esso come WordPress o altre informazioni. Invece, lavora direttamente con i dati. Supponendo che sia visibile nel tuo front-end, esegui un backup o un&#8217;esportazione adeguati del file in un file SQL in modo da poter ripristinare pi\u00f9 facilmente le informazioni in futuro.<\/p>\n<p>Alcuni front-end ti daranno la possibilit\u00e0 di esportare solo determinate tabelle. In questo caso, eseguire il backup di tutto. Per alcuni database, ci\u00f2 richieder\u00e0 molto tempo; per gli altri, non tanto. Tutto dipende dalle dimensioni del progetto.<\/p>\n<h5>4 Lavora con i dati<\/h5>\n<p>A questo punto, dovresti essere in grado di iniziare a manipolare il database utilizzando il front-end o SQL. Se non ti senti a tuo agio o non sei nemmeno sicuro di come farlo, parla con qualcuno che lo \u00e8 perch\u00e9 pu\u00f2 essere qualcosa di incredibilmente sensibile (dopotutto, hai a che fare con la ricostruzione di un database da file, giusto?)<\/p>\n<p>Una volta che ritieni di avere le informazioni in un luogo pronto per essere ripristinato in qualsiasi applicazione abbia perso informazioni, informazioni danneggiate o semplicemente abbia dati non validi, allora \u00e8 il momento di prepararti a prendere le informazioni dal tuo computer locale e rispedirle al fonte.<\/p>\n<h3>Torna alla fonte<\/h3>\n<p>Innanzitutto, si consiglia di eseguire tutto quanto sopra durante i periodi di traffico ridotto, quindi assicurati che ogni volta che lo fai, non lo farai durante le ore di lavoro di punta. Questo dovrebbe essere ovvio.<\/p>\n<p>Quindi, esegui un backup del database prima di iniziare a utilizzarlo. Salva il file in una posizione che puoi facilmente richiamare e accedere facilmente in modo che se qualcosa va storto nell&#8217;utilizzo delle informazioni che stai per importare, sei coperto e ripristina semplicemente ci\u00f2 che era gi\u00e0 l\u00ec. Per essere chiari, esporta l&#8217;intero database in formato SQL.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163965-61e75be94139d.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163965-61e75be94139d.jpg\" alt=\"La Guida per sviluppatori di WordPress alla ricostruzione dei dati MySQL\"><\/a><\/p>\n<p>Ora prendi il database che hai sul tuo computer locale ed esporta anche quelle informazioni in un file SQL. Aprire il file esportato e assicurarsi che stia utilizzando un&#8217;istruzione <strong>CREATE<\/strong> per creare il database con il nome proprio e anche le tabelle con i nomi propri.<\/p>\n<p>Supponendo che tutto vada bene, tutto ci\u00f2 che hai importato verr\u00e0 ripristinato esattamente come dovrebbe essere e come vedi sul tuo dispositivo locale. Se non lo vedi, importa il file che hai esportato in precedenza; altrimenti sei a posto.<\/p>\n<h4>E se non funziona?<\/h4>\n<p>Se non funziona, dovrai arrivare al problema principale:<\/p>\n<ul>\n<li>Non ha funzionato a causa di qualcosa di sbagliato con i file dal server?<\/li>\n<li>Non ha funzionato a causa del tipo di database che hai creato sul tuo computer locale?<\/li>\n<li>Stai usando lo stesso motore di archiviazione? Dovresti esserlo dato che proviene dai file.<\/li>\n<li>L&#8217;integrit\u00e0 del database \u00e8 solida a livello locale?<\/li>\n<li>Il database sul server viene eliminato prima di importare i dati dal tuo computer locale?<\/li>\n<\/ul>\n<p>Se a questo punto non funziona, di solito \u00e8 a causa di qualcosa di simile a quello che c&#8217;\u00e8 sopra. Tuttavia, potrebbe essere qualcos&#8217;altro. Ho fatto il possibile per fornire quante pi\u00f9 informazioni possibili sui database MySQL, su come sono strutturati e sui passaggi necessari per ricostruire il database dai file, ma non riesco a catturare ogni potenziale caso limite.<\/p>\n<h2>Effettua sempre il backup dei dati (e non dare per scontato che sia stato fatto)<\/h2>\n<p>Detto questo, spero che tutte le informazioni di cui sopra forniscano una comprensione pi\u00f9 profonda di ci\u00f2 che si nasconde sotto WordPress se dovessi affrontare questo problema da solo o con un cliente.<\/p>\n<p>E, infine, sempre il backup. Esegui backup manuali, esegui backup automatici e falli frequentemente. Non limitarlo nemmeno al database. Eseguire il backup del database, dell&#8217;applicazione e di quant&#8217;altro necessario per alimentare la soluzione.<\/p>\n<p>Se lo fai, non dovrai preoccuparti di tutto quanto sopra.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tutto ci\u00f2 che volevi sapere su come \u00e8 organizzato un database MySQL di base a livello di file system e su come eseguire la ricostruzione dei dati MySQL.<\/p>\n","protected":false},"author":1,"featured_media":163966,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,720,844],"tags":[1168],"class_list":["post-230682","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","category-tutorial","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=230682"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230682\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/163966"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=230682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=230682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=230682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}