Guida all’Importazione MySQL: Importa Dump SQL & CSV Velocemente (LOAD DATA, Workbench, phpMyAdmin)

目次

1. Cosa potrai fare in questo articolo

Molte persone che cercano “MySQL data import” si trovano in una situazione in cui vogliono:

  • “ripristinare un file .sql”
  • “importare un CSV”
  • “si interrompe con un errore”
  • “non funziona in Workbench o phpMyAdmin”

In altre parole, vuoi una soluzione che puoi applicare subito.

Prima di tutto, ecco i percorsi di “successo” più brevi per obiettivo.

🔹 Comando più veloce per importare un file SQL (.sql)

Per il ripristino di backup o la migrazione del server, questo è il più rapido.

mysql -u username -p database_name < backup.sql

Cose da verificare in anticipo

  • Il database di destinazione esiste?
  • L’utente di connessione ha i privilegi per il DB di destinazione?
  • La codifica del file SQL (di solito UTF-8)

Se il database non è ancora stato creato:

CREATE DATABASE example_db;

🔹 Modo più veloce per importare un file CSV (consigliato)

Per importare grandi quantità di dati rapidamente, LOAD DATA è ideale.

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id, name, @age)
SET age = NULLIF(@age,'');

Punti chiave

  • Fine riga Windows → '\r\n'
  • Se c’è una riga di intestazione → IGNORE 1 LINES
  • Converti stringhe vuote in NULL → NULLIF()
  • Molti ambienti richiedono LOCAL (spiegato più avanti)

🔹 Se vuoi importare tramite GUI

MySQL Workbench

  • Server → Importazione dati → seleziona un file → esegui

phpMyAdmin

  • Seleziona il DB di destinazione → Importa → scegli un file → esegui

⚠ Tuttavia, per file di grandi dimensioni e una gestione degli errori affidabile, la CLI (riga di comando) è più affidabile.

🔹 3 elementi da verificare prima di importare

1. Set di caratteri (più importante)

SHOW VARIABLES LIKE 'character_set%';

Consigliato: utf8mb4

2. Impostazioni che causano errori legati a INFILE

SHOW VARIABLES LIKE 'local_infile';
SHOW VARIABLES LIKE 'secure_file_priv';

3. Controllo dei privilegi

SHOW GRANTS FOR 'user'@'localhost';

✔ Cosa segue in questo articolo

  • Metodi dettagliati per importare file SQL
  • Tecniche pratiche di importazione CSV
  • Una spiegazione completa del perché INFILE fallisce
  • Correzioni più rapide per tipo di errore
  • Tecniche reali per grandi set di dati

MySQL data import workflow diagram showing SQL file, CSV file, LOAD DATA LOCAL INFILE, mysql command, and MySQL server process

2. Tipi di importazioni MySQL e quando usarli

Esistono diversi modi per importare in MySQL, ma la scelta migliore dipende dal tuo caso d’uso.
Se lo comprendi correttamente, puoi evitare problemi inutili.

2.1 Quando importare un dump SQL (.sql)

Casi d’uso comuni

  • Ripristino da un backup
  • Migrazione del server
  • Applicare dati simili a quelli di produzione in un ambiente di sviluppo
  • Reimportare dati esportati con mysqldump

Caratteristiche

  • Ripristina l’intera struttura delle tabelle + dati
  • Alta riproducibilità
  • Può includere transazioni
  • Generalmente l’opzione più sicura

Metodi tipici

mysql -u user -p dbname < dump.sql

Oppure all’interno di MySQL:

SOURCE /path/to/dump.sql;

Ideale per

  • Ripristino completo di un DB esistente
  • Ricostruzione di un ambiente di produzione
  • Caricamento dati per ambienti CI/CD

2.2 Quando importare CSV / TSV

Casi d’uso comuni

  • Ricevere dati da sistemi esterni
  • Importare dati Excel
  • Processo ETL
  • Aggiornare solo tabelle specifiche

Caratteristiche

  • Carica solo i dati (lo schema deve esistere separatamente)
  • Veloce (LOAD DATA è estremamente veloce)
  • Consente logica di trasformazione durante l’importazione

Metodo tipico

LOAD DATA LOCAL INFILE 'file.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

Ideale per

  • Job batch programmati
  • Integrazione dati
  • Ingestione ad alta velocità di grandi quantità di righe

2.3 Quando usare strumenti GUI

Strumenti comuni:

  • MySQL Workbench
  • phpMyAdmin

Caratteristiche

  • Operazione intuitiva
  • Facile per i principianti
  • Adatto a piccoli set di dati

Attenzioni

  • Limiti di upload (phpMyAdmin)
  • Timeout
  • Instabile con dati di grandi dimensioni
  • Più difficile analizzare gli errori

2.4 Confronto per metodo (punto di vista pratico)

MethodSpeedStabilityLarge-file supportError analysisRecommendation
mysql command★★★★★
LOAD DATA★★★★★
Workbench★★★
phpMyAdmin×★★

✔ Scelte consigliate nel lavoro reale

  • Ripristino backup → comando mysql
  • Importazione CSV ad alta velocità → LOAD DATA LOCAL INFILE
  • Compiti piccoli e una tantum → GUI

Se non sei sicuro, scegliere la CLI (riga di comando) è l’opzione più stabile.

3. Importazione di un file SQL (Il percorso più veloce verso il successo)

Importare un file .sql è il metodo più comune per i ripristini di backup e le migrazioni di server.
Qui, l’obiettivo è “riuscire il più rapidamente possibile”, quindi ci concentreremo solo sui passaggi pratici usati nel lavoro reale.

3.1 Ripristino in una riga (il metodo più comune)

Questo è il metodo più affidabile e veloce.

mysql -u username -p database_name < backup.sql

Dopo averlo eseguito, ti verrà chiesta la password.

✔ Controlli preliminari (per prevenire errori)

① Il database esiste?
SHOW DATABASES;

Se non esiste:

CREATE DATABASE example_db;
② L’utente ha i privilegi?
SHOW GRANTS FOR 'user'@'localhost';

Se i privilegi mancano:

GRANT ALL PRIVILEGES ON example_db.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
③ Codifica del file

Di solito è UTF-8.
Se vedi caratteri illeggibili, specifica esplicitamente.

mysql --default-character-set=utf8mb4 -u user -p dbname < backup.sql

3.2 Esegui dall’interno di MySQL (comando SOURCE)

Questo metodo viene eseguito dopo aver effettuato l’accesso a MySQL.

mysql -u user -p
USE example_db;
SOURCE /path/to/backup.sql;

Quando è utile

  • Quando vuoi eseguire solo una parte di un file SQL
  • Quando vuoi identificare la posizione esatta dell’errore
  • Quando vuoi confermare visivamente il registro di esecuzione

3.3 Errori comuni e soluzioni

❌ ERRORE 1049: Database sconosciuto

→ Il DB non esiste
→ Esegui CREATE DATABASE

❌ ERRORE 1045: Accesso negato

→ Privilegi insufficienti
→ Controlla con SHOW GRANTS

❌ Si interrompe a metà / posizione dell’errore non chiara

Soluzione:

  1. Controlla l’inizio e la fine del file
    head backup.sql
    tail backup.sql
    
  1. Controlla le righe subito prima dell’errore
  2. Se il file è grande, dividilo ed eseguilo in parti
    split -l 10000 backup.sql part_
    

3.4 Consigli per stabilizzare grandi importazioni SQL

① Controlla le impostazioni di transazione

Verifica se è incluso SET autocommit=0;

② Se i vincoli di chiave esterna sono il problema

SET FOREIGN_KEY_CHECKS=0;
-- import
SET FOREIGN_KEY_CHECKS=1;

③ Controlla la modalità SQL

SELECT @@sql_mode;

La modalità strict potrebbe influire sull’importazione.

✔ Raccomandazioni pratiche

  • Ripristino in produzione → comando mysql
  • Debug → SOURCE
  • File grandi → CLI + considera di dividere

4. Importazione CSV (Più importante: più veloce con LOAD DATA)

Quando si importano dati CSV, il metodo più veloce e pratico è LOAD DATA.
Per grandi set di dati, è di gran lunga più veloce rispetto alle istruzioni INSERT.

Qui, forniremo il formato corretto “copia-incolla ed esegui” e evidenzieremo i punti di errore comuni.

4.1 Prima: prerequisiti CSV

Prima di importare, assicurati di verificare quanto segue.

✔ Delimitatore

  • Virgola ,
  • Tabulazione \t
  • Punto e virgola ; (comune nei dati esteri)

✔ Carattere di citazione

  • Se i valori sono racchiusi, ad esempio "valore" con doppi apici

✔ Terminatori di riga

  • Linux / Mac → \n
  • Windows → \r\n

✔ Set di caratteri / codifica

  • Consigliato: utf8mb4
  • CSV creato su Windows può essere Shift-JIS
  • UTF-8 con BOM a volte può causare errori

Esempio di verifica:

file -i example.csv

4.2 Formato base pronto per copia-incolla (CSV con intestazione)

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id, name, @age)
SET age = NULLIF(@age,'');

Significato di ogni opzione

  • LOCAL Legge un file dal lato client (necessario in molti ambienti)
  • IGNORE 1 LINES Salta la riga di intestazione
  • @age Una variabile temporanea usata per trasformare il valore prima di memorizzarlo
  • NULLIF() Converte stringhe vuote in NULL

4.3 Importa solo le colonne di cui hai bisogno

Se il CSV ha colonne non necessarie:

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(id, @dummy, age);

Mappa le colonne indesiderate a @dummy.

4.4 Converti date e tipi durante l’importazione

Esempio: converti MM/DD/YYYY → formato MySQL

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(@date_col, name)
SET date_col = STR_TO_DATE(@date_col, '%m/%d/%Y');

4.5 Per file delimitati da tabulazione (TSV)

FIELDS TERMINATED BY '\t'

4.6 Migliora ulteriormente le prestazioni (per grandi quantità di dati)

Disabilita temporaneamente gli indici

ALTER TABLE example_table DISABLE KEYS;
-- Run LOAD DATA
ALTER TABLE example_table ENABLE KEYS;

Disabilita temporaneamente le chiavi esterne

SET FOREIGN_KEY_CHECKS=0;
-- Run LOAD DATA
SET FOREIGN_KEY_CHECKS=1;

Perché LOCAL è spesso necessario

  • LOAD DATA INFILE → legge un file sul lato server
  • LOAD DATA LOCAL INFILE → legge un file sul lato client

In molti ambienti, usare LOCAL ha una percentuale di successo più alta.

✔ Forma pratica consigliata

Nella maggior parte dei casi:

LOAD DATA LOCAL INFILE
+ explicit delimiter
+ explicit line endings
+ IGNORE 1 LINES
+ type conversion

Questo è l’approccio più stabile.

5. I 4 motivi principali per cui INFILE fallisce (Sezione più importante)

La maggior parte dei fallimenti di LOAD DATA INFILE è causata da impostazioni, privilegi o incomprensione della posizione della sorgente.
Se comprendi questo, puoi risolvere immediatamente la maggior parte degli errori.

5.1 Differenza tra INFILE e LOCAL INFILE

Questo è il concetto base fondamentale.

CommandWhere it reads fromTypical use
LOAD DATA INFILEFile on the serverA fixed path on the server
LOAD DATA LOCAL INFILEFile on the clientA CSV on your local PC

Malintesi comuni

  • Tentare di leggere un file locale del PC con INFILE e fallire
  • Il file non esiste sul server

✔ Regola pratica

  • CSV sul tuo PC → LOCAL
  • CSV posizionato sul server → INFILE

Se non sei sicuro, usare LOCAL è la scelta più sicura.

5.2 local_infile è disabilitato (causa dell’ERRORE 1148)

Esempio di errore:

ERROR 1148 (42000): The used command is not allowed with this MySQL version

Causa:

local_infile è DISATTIVATO

✔ Controlla l’impostazione corrente

SHOW VARIABLES LIKE 'local_infile';

✔ Abilitalo durante la connessione (lato client)

mysql --local-infile=1 -u user -p

✔ Abilitalo permanentemente (file di configurazione)

Aggiungi a my.cnf o my.ini:

[mysqld]
local_infile=1

Devi riavviare il server.

5.3 Restrizione secure_file_priv

Questo si verifica quando si usa LOAD DATA INFILE (senza LOCAL).

Controlla:

SHOW VARIABLES LIKE 'secure_file_priv';

Esempio di output

/var/lib/mysql-files/

→ Puoi leggere solo file all’interno di questa directory.

✔ Correzione

  • Sposta il CSV nella directory consentita
  • Oppure usa LOCAL

5.4 Privilegi insufficienti (privilegio FILE / permessi OS)

Esempio di errore:

ERROR 1045: Access denied

Controlla:

SHOW GRANTS FOR 'user'@'localhost';

✔ Privilegio richiesto

GRANT FILE ON *.* TO 'user'@'localhost';

※ Per motivi di sicurezza, operare con i privilegi minimi possibili.

5.5 Specifica del percorso errata

  • Usa un percorso assoluto, non relativo
  • Su Windows, è consigliato C:/path/file.csv
  • Le barre oblique (/) sono più sicure delle barre rovesciate ()

✔ Flusso rapido di risoluzione per problemi INFILE

  1. Hai aggiunto LOCAL ?
  2. SHOW VARIABLES LIKE 'local_infile';
  3. SHOW VARIABLES LIKE 'secure_file_priv';
  4. Controlla i privilegi (SHOW GRANTS)
  5. Controlla il percorso (percorso assoluto)

In quest’ordine, puoi risolvere la maggior parte dei casi.

6. Importazione via GUI (Workbench / phpMyAdmin)

La riga di comando è la più stabile, ma ci sono situazioni in cui si desidera utilizzare strumenti GUI.
Qui ci concentreremo sui punti comuni in cui le persone si bloccano nel lavoro reale.

6.1 Importazione con MySQL Workbench

Importa un file SQL (ripristino backup)

  1. Avvia Workbench
  2. Menu → Server → Importazione dati
  3. Seleziona “Importa da file auto‑contenuto”
  4. Seleziona il file .sql
  5. Seleziona lo Schema di destinazione (database)
  6. Clicca “Avvia importazione”

Importa CSV (per tabella)

  1. Fai clic con il tasto destro sulla tabella di destinazione
  2. Seleziona Wizard di importazione dati tabella
  3. Seleziona il file CSV
  4. Imposta il delimitatore e se è presente un’intestazione
  5. Esegui

⚠ Motivi comuni per cui Workbench si blocca

  • File di grandi dimensioni (centinaia di MB o più)
  • Timeout
  • Incompatibilità di codifica
  • Restrizioni secure_file_priv

👉 Per file di grandi dimensioni o ambienti di produzione, si consiglia la CLI.

6.2 Importazione con phpMyAdmin

Passaggi

  1. Seleziona il database di destinazione
  2. Apri la scheda “Importa”
  3. Scegli un file
  4. Seleziona il formato (SQL / CSV)
  5. Esegui

⚠ Limitazioni di phpMyAdmin

① Limite dimensione upload

upload_max_filesize
post_max_size

I file di grandi dimensioni falliranno.

② Timeout
max_execution_time

Importazioni di lunga durata possono fermarsi a metà.

③ Memoria esaurita
memory_limit

6.3 Quando dovresti usare la GUI

  • Set di dati piccoli (pochi MB)
  • Ambienti di sviluppo
  • Lavori temporanei una tantum

6.4 Quando dovresti usare la CLI (consigliato)

  • Ambienti di produzione
  • Decine di MB o più
  • Importazioni CSV di grandi dimensioni
  • Quando è necessaria l’analisi degli errori
  • Migrazioni server‑to‑server

✔ Conclusione pratica

La GUI è “facile”, ma
la CLI è di gran lunga migliore per stabilità, riproducibilità e gestione di file di grandi dimensioni.

Per la risoluzione dei problemi, si consiglia infine di imparare le operazioni con la CLI.

7. Risoluzione dei problemi (Per errore: causa → correzione più rapida)

La maggior parte degli errori di importazione MySQL è altamente ricorrente.
Qui li organizzeremo nell’ordine “causa → prima azione → comando di verifica”.

7.1 ERRORE 1148 (42000)

Il comando usato non è consentito con questa versione di MySQL

🔎 Causa

  • LOAD DATA LOCAL INFILE è disabilitato
  • local_infile è OFF

✅ Correzione più rapida

① Controlla le impostazioni attuali

SHOW VARIABLES LIKE 'local_infile';

② Abilita durante la connessione (lato client)

mysql --local-infile=1 -u user -p

③ Abilita permanentemente (se necessario)

[mysqld]
local_infile=1

→ Riavvia MySQL

7.2 ERRORE 1366

Valore stringa non corretto

🔎 Causa

  • Incompatibilità di codifica
  • Incoerenza tra utf8 e utf8mb4
  • Presenza di Shift-JIS

✅ Correzione più rapida

① Controlla il set di caratteri attuale

SHOW VARIABLES LIKE 'character_set%';

② Converti la tabella a utf8mb4

ALTER TABLE example_table CONVERT TO CHARACTER SET utf8mb4;

③ Specifica esplicitamente al momento dell’importazione

mysql --default-character-set=utf8mb4 -u user -p db < file.sql

7.3 ERRORE 1062

Voce duplicata

🔎 Causa

  • Chiavi primarie duplicate
  • Violazione del vincolo UNIQUE

✅ Opzioni di correzione

Opzione 1: Ignora duplicati
LOAD DATA LOCAL INFILE 'file.csv'
INTO TABLE example_table
IGNORE;
Opzione 2: Aggiorna in caso di duplicato
INSERT INTO example_table (id, name)
VALUES (1,'John')
ON DUPLICATE KEY UPDATE name=VALUES(name);
Opzione 3: Usa una tabella di staging
CREATE TEMPORARY TABLE temp LIKE example_table;
-- LOAD into temp first
INSERT INTO example_table
SELECT * FROM temp;

7.4 ERRORE 1045

Accesso negato per l’utente

🔎 Causa

  • Privilegi DB insufficienti
  • Privilegio FILE insufficiente
  • Permessi OS insufficienti per il percorso

✅ Controlla

SHOW GRANTS FOR 'user'@'localhost';

✅ Esempio di privilegi richiesti

GRANT ALL PRIVILEGES ON example_db.* TO 'user'@'localhost';
FLUSH PRIVILEGES;

※ Fai attenzione quando concedi il privilegio FILE.

7.5 Si ferma a metà su file di grandi dimensioni

🔎 Causa

  • Timeout
  • Memoria esaurita
  • Limiti PHP (phpMyAdmin)

✅ Contromisure più rapide

Aumentare i timeout
SET GLOBAL net_read_timeout=600;
SET GLOBAL net_write_timeout=600;
Dividi il file
split -l 100000 large.csv part_

✔ Flusso di risoluzione errori (più veloce)

  1. Verifica la codifica
  2. Verifica local_infile
  3. Verifica secure_file_priv
  4. Verifica i privilegi
  5. Verifica le terminazioni di riga ( \n / \r\n )

In quest’ordine, puoi risolvere la maggior parte dei problemi.

8. Tecniche pratiche per grandi dataset (operazioni a prova di errore)

Quando si importano centinaia di migliaia fino a milioni di righe, i metodi usuali possono essere lenti, fermarsi o interrompersi.

Ecco tecniche stabili comunemente usate in produzione.

8.1 Dividi il file e importa a fasi

Caricare un enorme CSV/SQL in un’unica volta può causare problemi di memoria e timeout.

✔ Linux / Mac

split -l 100000 large.csv part_

→ Dividi in 100.000 righe per parte

✔ Windows (esempio PowerShell)

Get-Content large.csv -TotalCount 100000 > part_1.csv

✔ Vantaggi delle importazioni a fasi

  • Più facile riprovare dopo un errore parziale
  • Più facile individuare la posizione dell’errore
  • Carico del server più stabile

8.2 Disabilitare temporaneamente indici e chiavi esterne

Durante l’importazione, gli aggiornamenti degli indici spesso diventano il collo di bottiglia.

✔ Disabilitare temporaneamente gli indici

ALTER TABLE example_table DISABLE KEYS;
-- LOAD DATA
ALTER TABLE example_table ENABLE KEYS;

※ Principalmente per MyISAM. Effetto limitato per InnoDB.

✔ Disabilitare le chiavi esterne

SET FOREIGN_KEY_CHECKS=0;
-- import
SET FOREIGN_KEY_CHECKS=1;

8.3 Controllare autocommit (accelerare)

SET autocommit=0;
-- LOAD DATA
COMMIT;
SET autocommit=1;

8.4 Impostazioni consigliate per caricamenti bulk

SET UNIQUE_CHECKS=0;
SET FOREIGN_KEY_CHECKS=0;
SET AUTOCOMMIT=0;

Dopo l’importazione:

COMMIT;
SET UNIQUE_CHECKS=1;
SET FOREIGN_KEY_CHECKS=1;
SET AUTOCOMMIT=1;

⚠ Usa con cautela in produzione.

8.5 Aumentare i timeout

SET GLOBAL net_read_timeout=600;
SET GLOBAL net_write_timeout=600;

8.6 Strategia della tabella di staging (operazioni sicure)

Invece di importare direttamente nella tabella di produzione, usa prima una tabella di validazione.

CREATE TABLE staging LIKE example_table;
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE staging;

Dopo la validazione:

INSERT INTO example_table
SELECT * FROM staging;

✔ Modello reale più stabile

  1. Carica in una tabella di staging
  2. Verifica il conteggio delle righe
  3. Convalida i vincoli
  4. Applica alla produzione
  5. Salva i log

✔ Conclusione per grandi dati

  • Usa la CLI quando possibile
  • Dividi le importazioni
  • Passa per lo staging
  • Disabilita temporaneamente i vincoli
  • Controlla i log

Questo manterrà le importazioni stabili anche con milioni di righe.

9. FAQ (Domande comuni)

Ecco risposte rapide e pratiche alle domande più cercate sull’importazione MySQL.

Q1. Posso importare solo colonne specifiche da un CSV?

Sì, puoi.

Puoi mappare le colonne non necessarie a una variabile (come @dummy) e ignorarle.

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(id, @dummy, age);

Se vuoi solo alcune colonne, assicurati di specificare esplicitamente l’ordine delle colonne.

Q2. Come trattare le celle vuote come NULL?

Usa NULLIF().

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(name, @age)
SET age = NULLIF(@age,'');

Questo converte le stringhe vuote (”) in NULL.

Q3. Come saltare la riga di intestazione?

IGNORE 1 LINES

Esempio:

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

Q4. Come posso convalidare i risultati dell’importazione?

✔ Verifica il conteggio delle righe

SELECT COUNT(*) FROM example_table;

✔ Verifica avvisi/errore

Controlla gli avvisi MySQL:

SHOW WARNINGS;

✔ Strategia della tabella di staging (raccomandata)

Carica prima in una tabella di staging, poi applica alla produzione.

Q5. Qual è il metodo più veloce?

Conclusione:

  • CSV → LOAD DATA LOCAL INFILE (più veloce)
  • Ripristino backup → comando mysql

L’interfaccia grafica è comoda, ma la CLI vince per velocità e stabilità.

Q6. Ricevo un errore di fine riga su Windows

È dovuto ai caratteri di fine riga.

Windows:

LINES TERMINATED BY '\r\n'

Linux / Mac:

LINES TERMINATED BY '\n'

Q7. Ricevo un errore secure_file_priv

Verifica:

SHOW VARIABLES LIKE 'secure_file_priv';

Correzione:

  • Metti il CSV nella directory consentita
  • Oppure usa LOCAL

✔ Riepilogo FAQ

  • Mappatura colonne → @dummy
  • Conversione NULL → NULLIF
  • Ignora intestazione → IGNORE 1 LINES
  • Importazione ad alta velocità → LOAD DATA
  • Principali punti “bloccanti” → local_infile / secure_file_priv / codifica

10. Riepilogo

Le importazioni MySQL possono sembrare complesse inizialmente, ma
una volta organizzate per obiettivo, sono molto semplici.

Ricapitoliamo i percorsi di successo più brevi.

✔ Ripristinare un file SQL (.sql)

Il più veloce e stabile:

mysql -u user -p dbname < backup.sql
  • Verifica se il DB esiste
  • Verifica i privilegi
  • Consiglia utf8mb4 per la codifica

✔ Importare CSV (veloce)

Forma base:

LOAD DATA LOCAL INFILE '/path/to/file.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

Punti chiave:

  • Fine riga Windows → \r\n
  • Stringhe vuote → NULLIF()
  • Se fallisce, verifica local_infile

✔ Ordine di verifica per il troubleshooting

  1. Codifica (consiglia utf8mb4)
  2. SHOW VARIABLES LIKE 'local_infile';
  3. SHOW VARIABLES LIKE 'secure_file_priv';
  4. Privilegi (SHOW GRANTS)
  5. Fine riga

In quest’ordine, puoi risolvere la maggior parte dei problemi.

✔ Regole d’oro per grandi dataset

  • Usa la CLI
  • Dividi le importazioni
  • Passa attraverso una tabella di staging
  • Disabilita temporaneamente chiavi esterne/constraint
  • Controlla i log

✔ Conclusione finale

  • Ripristino backup → comando mysql
  • Importazione CSV ad alta velocità → LOAD DATA LOCAL INFILE
  • Piccoli compiti occasionali → GUI

Se non sei sicuro, usare la CLI è la scelta più stabile.

Con questo, ora disponi di un set completo di conoscenze per le importazioni MySQL.

Provalo nel tuo ambiente e costruisci un flusso di lavoro operativo stabile.