Mysql e comandi bash – come dividere un file sql per permettere un import del data base

Mysql E Comandi Bash – Come Dividere Un File Sql Per Permettere Un Import Del Data Base

Spezzettare un file .sql enorme in più parti può essere una manna dal cielo per la gestione e l’importazione.
Soprattutto se il problema è il file dump mysql enorme che non è possibile importare tramite interfaccia grafica del DBMS phpmyadmin.
Ti propongo un comando bash piuttosto semplice (e flessibile) che divide il file in N parti di dimensione simile:

🧩 Opzione 1: Split in N parti (es. 10 o 20)

bash

split -n l/10 -d --additional-suffix=.sql file_origine.sql parte_

Spiegazione:

  • -n l/10 → divide il file in 10 parti uguali per numero di righe.
  • -d → aggiunge i numeri (00, 01, 02…) invece di lettere (aa, ab, ac…).
  • –additional-suffix=.sql → aggiunge .sql ai file risultanti.
  • parte_ → prefisso dei file di output (parte_00.sql, parte_01.sql, ecc).

📌 Cambia 10 con 20 o quello che preferisci.

🛠️ Opzione 2: Split per numero di righe (es. ogni 1000 righe)

Se preferisci tagliarlo in base a un numero fisso di righe:

bash

split -l 1000 -d --additional-suffix=.sql file_origine.sql parte_

⚠️ Attenzione se il file SQL ha transazioni o comandi multilinea
Il metodo sopra è “cieco”: taglia a prescindere da contenuto o sintassi. Se i tuoi file SQL hanno transazioni (BEGIN…COMMIT) o query multi-riga, potresti rischiare di troncare comandi a metà.

🧩 Opzione 3: Script in Bash con una divisione più intelligente delle query

Qui di seguito propongo anche la versione “intelligente” in Bash, che taglia il file SQL in blocchi completi, cercando di non spaccare a metà i comandi tipo INSERT, CREATE, ALTER, DROP, ecc.

L’idea è: leggiamo riga per riga e scriviamo su un file finché raggiungiamo un certo numero di istruzioni SQL complete, mantenendo la coerenza sintattica.

Ecco uno script Bash che lo fa:

🧠 Script Bash “smart splitter” per file SQL
bash

#!/bin/bash

input_file="file_origine.sql"
output_prefix="parte_"
max_statements_per_file=100  # puoi cambiarlo come vuoi

statement_count=0
file_index=0
output_file="${output_prefix}$(printf "%02d" $file_index).sql"
buffer=""

mkdir -p sql_parts  # salva tutto in una cartella dedicata

while IFS= read -r line || [[ -n "$line" ]]; do
    buffer+="$line"$'\n'

    # Se troviamo un punto e virgola a fine riga, consideriamo la statement "completa"
    if [[ "$line" =~ ;[[:space:]]*$ ]]; then
        ((statement_count++))
    fi

    # Quando raggiungiamo il massimo, scriviamo su file
    if (( statement_count >= max_statements_per_file )); then
        echo -n "$buffer" > "sql_parts/${output_file}"
        ((file_index++))
        output_file="${output_prefix}$(printf "%02d" $file_index).sql"
        buffer=""
        statement_count=0
    fi
done < "$input_file"

# Scriviamo l’eventuale contenuto rimanente
if [[ -n "$buffer" ]]; then
    echo -n "$buffer" > "sql_parts/${output_file}"
fi

echo "✅ Fatto! File spezzettati nella cartella 'sql_parts/'"

✅ Vantaggi: Non tronca comandi a metà.

Facile da configurare: puoi cambiare max_statements_per_file per spezzarlo in più o meno parti.

Pulito: ti crea una cartella sql_parts/ con i file parte_00.sql, parte_01.sql, ecc.

🧪 Per eseguirlo:
Salvalo come split_sql.sh, rendilo eseguibile e lancialo:

bash

chmod +x split_sql.sh
./split_sql.sh

Buon divertimento con questo nuovo suggerimento settimanale.

Hai un problema con il web?

Il tuo sito internet non vuole funzionare?

Vuoi rinnovarlo o sistemarlo?

Hai un’idea di integrazione ma non sai se è possibile realizzarla o meno?

    Accetto la Privacy Policy
    Autorizzo al trattamento dei miei dati personali, per ricevere le informazioni richieste attraverso questo modulo di contatto. I dati da te inseriti attraverso questo modulo verranno utilizzati solo per essere da me ricontattato.

    Recensioni

    Scrivimi una recensione

    Questo QR Code ti permette di lasciarmi una recensione in maniera facile e veloce.

    Altrimenti qui sotto ti lascio un bottone, con il quale puoi lasciare la recensione direttamente su Google My Business.

    Lascia una recensione su Google