65359338f8
Cutover hecho el 3-ago a las 10:50 UTC. feadulta.com y www.feadulta.com ya apuntan a 188.40.120.157, proxied. Ventana real ~3 min 10 s: dump 67 s, saneo 2 s, import 114 s, delta de uploads 6 s (0 ficheros, como estaba medido). Cuadro al digito con produccion: 43.893 posts, 1.228 usuarios, 4.416 terms, 135.959 postmeta. Los options salen 958 frente a 975 porque son transients (hay 580 y caducan solos). Con trafico real: 581 respuestas 200, 62 301, 16 302, cero 5xx y cero errores PHP en 20 minutos, 61 IPs distintas atendidas. Se anaden los cuatro scripts que faltaban, que hasta hoy solo existian como comandos sueltos del ensayo: 01-traer-dump, 02-sanear-dump, 03-importar, 04-delta-uploads y 05-mover-dns. El runbook ya los citaba por nombre. Tres cosas encontradas al ejecutar, anotadas en los propios scripts: - docker exec -i dentro de un ssh 'bash -s' <<EOF se come el resto del script, porque hereda el stdin del heredoc. Las consultas van sin -i y con </dev/null. - Smart Slider cachea el HTML del slider con URLs absolutas, una fila por idioma en wp_nextend2_section_storage con application='cache'. Al verificar el import con la constante del staging todavia puesta quedaron 5 filas apuntando a nuevo.feadulta.com. Se borran y se regeneran solas. - El cliente de MariaDB de la jaula de CDMON exige TLS y el servidor local no lo tiene: con --skip-ssl si se puede consultar la BD de produccion directamente, que es como se comprobo que no habia cambiado nada desde el dump de las 05:09. Pendiente y fuera de nuestro alcance: purgar la cache de Cloudflare (el token solo tiene permiso de DNS) y darle a Inma su contrasena nueva. Y los certificados de Let's Encrypt para www y el apex, que fallan porque el WAF de Cloudflare devuelve 403 a la validacion; no bloquea mientras la zona este en Full, pero por eso mismo no se puede subir a Full (strict) todavia. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
58 lines
2.2 KiB
Bash
Executable File
58 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Paso 3 del cutover: sanear el dump. NO importa: eso es el paso 4.
|
|
#
|
|
# Dos cosas a la vez sobre el mismo streaming:
|
|
# - excluir las 5 tablas de respaldo (*_bak y wp_fea_date_slug_posts_backup)
|
|
# - mapear las collations de MariaDB 11 que MySQL 8.4 rechaza en el CREATE TABLE
|
|
#
|
|
# El troceado por tablas se apoya en los comentarios "# Table: `nombre`" que escribe
|
|
# UpdraftPlus. Si algun dia el dump lo genera mysqldump, esto hay que rehacerlo.
|
|
#
|
|
set -euo pipefail
|
|
DUMP=$(cat /home/rafa/migracion-wp/DUMP-DEL-DIA)
|
|
echo "== dump: $DUMP"
|
|
ssh -o BatchMode=yes root@188.40.120.157 "D='$DUMP' bash -s" <<'EOF'
|
|
set -euo pipefail
|
|
cd /data/feadulta-migracion
|
|
OUT=feadulta-saneado.sql
|
|
T0=$(date +%s)
|
|
|
|
zcat "$D" \
|
|
| awk '
|
|
/^# Table: `/ {
|
|
name = $0; sub(/^# Table: `/, "", name); sub(/`.*$/, "", name)
|
|
skip = (name ~ /_bak$/ || name == "wp_fea_date_slug_posts_backup") ? 1 : 0
|
|
if (skip) print " [excluida] " name > "/dev/stderr"
|
|
}
|
|
!skip { print }
|
|
' \
|
|
| sed -E \
|
|
-e 's/utf8mb4_uca1400_ai_ci/utf8mb4_0900_ai_ci/g' \
|
|
-e 's/utf8mb3_uca1400_ai_ci/utf8mb4_0900_ai_ci/g' \
|
|
-e 's/CHARSET=utf8mb3/CHARSET=utf8mb4/g' \
|
|
-e 's/CHARACTER SET utf8mb3/CHARACTER SET utf8mb4/g' \
|
|
-e 's/utf8mb3_general_ci/utf8mb4_general_ci/g' \
|
|
> "$OUT"
|
|
|
|
echo ""
|
|
echo "== saneo en $(( $(date +%s) - T0 ))s"
|
|
ls -l "$OUT" | awk '{printf " %.1f MB sin comprimir\n", $5/1048576}'
|
|
|
|
echo ""
|
|
echo "== VERIFICACION (las tres primeras deben dar 0)"
|
|
u=$(grep -c 'uca1400' "$OUT" || true); echo " restos de uca1400 : $u"
|
|
m=$(grep -c 'utf8mb3' "$OUT" || true); echo " restos de utf8mb3 : $m"
|
|
b=$(grep -oE '^CREATE TABLE `[^`]+`' "$OUT" | grep -cE '_bak|backup' || true); echo " tablas de respaldo: $b"
|
|
echo " tablas en el saneado: $(grep -cE '^CREATE TABLE ' "$OUT")"
|
|
echo " DROP TABLE IF EXISTS: $(grep -c '^DROP TABLE IF EXISTS' "$OUT" || true) <- si es 0, hay que vaciar la BD antes"
|
|
echo " collations resultantes:"
|
|
grep -oE 'COLLATE=[a-z0-9_]+' "$OUT" | LC_ALL=C sort | uniq -c | sed 's/^/ /'
|
|
echo " epilogo (debe verse el cierre del dump):"
|
|
tail -3 "$OUT" | sed 's/^/ /'
|
|
|
|
[ "$u" = "0" ] && [ "$m" = "0" ] && [ "$b" = "0" ] || { echo ""; echo "!! VERIFICACION FALLIDA, no importar"; exit 1; }
|
|
echo ""
|
|
echo "== saneado OK"
|
|
EOF
|