22 lines
1.4 KiB
Bash
Executable File
22 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# reconcile_schema.sh <GOLDEN_DB> <TARGET_DB>
|
|
# Ajoute au TARGET les tables et colonnes presentes dans GOLDEN mais absentes (additif, non destructif).
|
|
G="$1"; T="$2"
|
|
Q(){ sudo mysql -N -e "$1"; }
|
|
# Tables golden absentes du target -> creation (structure seule)
|
|
for tbl in $(Q "SELECT table_name FROM information_schema.tables WHERE table_schema='$G' AND table_type='BASE TABLE' AND table_name NOT IN (SELECT table_name FROM information_schema.tables WHERE table_schema='$T')"); do
|
|
echo " + TABLE $tbl"
|
|
sudo mysqldump --no-data --no-tablespaces "$G" "$tbl" | grep -ivE '^[[:space:]]*(USE|CREATE DATABASE|DROP DATABASE)' | sudo mysql "$T"
|
|
done
|
|
# Colonnes golden (tables communes) absentes du target -> ALTER ADD
|
|
Q "SELECT c.table_name,c.column_name,c.column_type,c.is_nullable,c.extra
|
|
FROM information_schema.columns c
|
|
WHERE c.table_schema='$G'
|
|
AND c.table_name IN (SELECT table_name FROM information_schema.tables WHERE table_schema='$T')
|
|
AND NOT EXISTS (SELECT 1 FROM information_schema.columns t WHERE t.table_schema='$T' AND t.table_name=c.table_name AND t.column_name=c.column_name)" \
|
|
| while IFS=$'\t' read tbl col ctype isnull extra; do
|
|
nullsql="NULL"; [ "$isnull" = "NO" ] && nullsql="NOT NULL DEFAULT 0"
|
|
echo " + COLONNE $tbl.$col ($ctype)"
|
|
sudo mysql "$T" -e "ALTER TABLE \`$tbl\` ADD COLUMN \`$col\` $ctype $nullsql $extra" 2>&1 | grep -v '^$' || true
|
|
done
|