
Migrer une base de données MySQL vers OVH CloudDB ou PrivateSQL peut vite tourner au cauchemar.
Entre les limitations imposées par OVH (taille, temps d’exécution) et les contraintes plus strictes de MySQL 5.7+, on se heurte souvent à des erreurs comme :
ERROR 2013 (HY000): Lost connection to server during query
ERROR 1292 (22007): Incorrect datetime value: '0000-00-00 00:00:00'
ERROR 1067 (42000): Invalid default value for 'date_created_gmt'
👉 Dans ce tutoriel, on va voir comment corriger ces erreurs et importer correctement un gros dump SQL en plusieurs morceaux grâce à un script Bash.
⚠️ Les problèmes typiques
- Dump trop gros → timeout lors de l’import.
- Dates invalides →
0000-00-00 00:00:00
interdites. - Colonnes mal définies →
DATETIME NOT NULL DEFAULT NULL
, non supporté. - Limitations OVH CloudDB → impossible d’importer un gros fichier en une seule fois.
✅ Étape 1 – Exporter proprement
Depuis la base source :
mysqldump -h HOST_SOURCE -u USER -p \
--single-transaction --quick --extended-insert=FALSE \
--default-character-set=utf8mb4 DB_NAME > dump.sql
👉 L’option --extended-insert=FALSE
produit un INSERT
par ligne, plus facile à découper.
✅ Étape 2 – Corriger les erreurs de dates
1. Valeurs interdites 0000-00-00
Corriger avant import :
sed -i "s/'0000-00-00 00:00:00'/NULL/g" dump.sql
sed -i "s/'0000-00-00'/NULL/g" dump.sql
2. Définitions invalides DATETIME NOT NULL DEFAULT NULL
Exemple trouvé dans certains dumps :
`date_created_gmt` datetime NOT NULL DEFAULT NULL
👉 Cette syntaxe est refusée par MySQL ≥ 5.7.
Corrigez automatiquement en :
sed -i "s/datetime NOT NULL DEFAULT NULL/datetime NULL DEFAULT NULL/g" dump.sql
✅ Étape 3 – Créer un fichier de configuration MySQL
Créez un fichier password.cnf
(protégé en chmod 600
) :
[client]
user=monuser
password=MON_MOT_DE_PASSE
host=sql-monserveur-fake.ovh.net
port=35501
✅ Étape 4 – Le script d’import automatisé avec split
Fichier import.sh
:
#!/bin/bash
# Script pour importer un gros dump MySQL vers OVH CloudDB en le découpant
DUMP_FILE="dump.sql"
DB_NAME="ma_base_import"
CREDENTIALS="password.cnf"
# Vérification des fichiers
if [ ! -f "$DUMP_FILE" ]; then
echo "❌ Le fichier $DUMP_FILE est introuvable."
exit 1
fi
if [ ! -f "$CREDENTIALS" ]; then
echo "❌ Le fichier $CREDENTIALS est introuvable."
exit 1
fi
# Nettoyage automatique du dump
echo "🛠 Correction des valeurs interdites..."
sed -i "s/'0000-00-00 00:00:00'/NULL/g" "$DUMP_FILE"
sed -i "s/'0000-00-00'/NULL/g" "$DUMP_FILE"
sed -i "s/datetime NOT NULL DEFAULT NULL/datetime NULL DEFAULT NULL/g" "$DUMP_FILE"
# Découpage en morceaux de 1000 lignes
echo "✂️ Découpage de $DUMP_FILE en blocs de 1000 lignes..."
rm -f part_* # on nettoie les anciens morceaux
split -l 1000 "$DUMP_FILE" part_
# Import séquentiel
for file in part_*; do
echo "📥 Import de $file ..."
mysql --defaults-extra-file="$CREDENTIALS" "$DB_NAME" < "$file"
if [ $? -ne 0 ]; then
echo "⚠️ Erreur lors de l'import de $file"
exit 1
fi
done
echo "✅ Import terminé avec succès !"
✅ Étape 5 – Vérifier l’import
Connexion :
mysql --defaults-extra-file=password.cnf ma_base_import
Puis :
SHOW TABLES;
🚀 Conclusion
Avec ce script :
- Les dates invalides (
0000-00-00 00:00:00
) sont corrigées. - Les colonnes
DATETIME NOT NULL DEFAULT NULL
sont rendues compatibles. - Le fichier est découpé en morceaux de 1000 lignes, évitant les timeouts OVH.
- L’import est automatisé et fiable même pour de gros dumps.
👉 Résultat : une migration MySQL 100 % compatible avec OVH CloudDB, sans blocages.