Básicamente, consistía en armar la base de datos y modificar algunos parámetros de configuración según correspondiese en el lado de la aplicación. El programa está hecho con PHP+MySQL, sobre Apache. Las modificaciones de parámetros resulta simple: consiste en chequear algunas rutas y valores de cuentas de acceso. Todo bien hasta acá.
Siguiente tarea: subir la base. Acá comenzaron los problemas, así es que como ya resolví todo, supongo es un buen momento para 1) explicar cuál era el lío, 2) mostrar cómo lo resolví y, finalmente, 3) repasar algunos conceptos básicos de respaldos de bases de datos y crear la base a partir del script previamente generado.
(Una aclaración: mi configuración es Apache 2.0.63, PHP 5.2.9 y MySQL 5.1.33, todo corriendo sobre Windows XP Professional)
1. El problema era el siguiente: tengo un script .SQL generado con mysqldump, en donde respaldé la estructura de la base y algunos (motor InnoDB) datos mínimos necesarios para comenzar a funcionar. El primer intento para subir la base a partir del respaldo fue ejecutar el script así, tal cual, sobre un cliente que se conecta a MySQL. Aunque he utilizado algunos programas para administrar MySQL, lo que estoy usando actualmente es MySQL Administrator y TOAD for MySQL. Entonces, el primer intento consistió en abrir el script en TOAD y ejecutar. Aquí el problema: errno 150. Buscando en la red, encuentro que el errno 150 ocurre al crear y/o alterar tablas InooDB, específicamente cuando se trabaja con claves foráneas. En general, el problema surge cuando los campos envueltos en la relación no son consistentes, esto es, son de distintos tipos o bien alguna restricción los hace inconsistentes. Otra situación que podría generar el error el un problema en la sintáxis del script.
2. La solución fue un tanto extraña, pero funciona..... y supongo que eso es lo más importante. Comencé revisando las indicaciones que resultaron más comunes en las descripciones del error en internet: el campo que será clave foránea debe tener previamente definido un índice. Eso estaba ok. La sintáxis, también se veía bien. Lo que me generaba más dudas era porqué el script daba errores, si lo había armado automáticamente con la funcionalidad mysqldump del servidor MySQL. Otra cosa que me daba vueltas era que había utilizado un script similar en una máquina distinta y había funcionado sin problemas. Entonces, para descartar, tomé otro script y lo ejecuté igual que el primero, y mandó el mismo error, aun cuando en otra máquina funcionó ok. Finalmente, buscando más en la red, encontré otros métodos para subir una base, y ahí recordé un método que he usado y creo es el mejor.... directamente desde la línea de comandos ejecuto la instrucción para armar la base.
Acá la sintáxis:
c:>mysql -h HOST -u USER -pPASSWORD NOMBRE_BASE < DIRECTORIO_DEL_SCRIPT_DE_LA_BASE
(lo que va con mayúsculas es lo que se debe completar de acuerdo a cada servidor)
Y está resuelto.
3. Conceptos básicos de respaldo de bases de datos.
La primera tarea es hacer un respaldo. Para eso, utilizo la funcionalidad mysqldump, propia del servidor MySQL.
La sintáxis generas es:
mysqldump -h HOST -u USER -pPASSWORD [OPCIONES]
(ojo con el valor del parámetro -p, debe ir sin espacios)
Ahora, algunas opciones que me parecen son las más importantes:
- --add-drop-table: agrega un DROP TABLE antes de cada CREATE TABLE
- --all-databases / -A: indica que se respaldarán todas las bases disponibles
- --databases / -B: permite seleccionar una o más bases a respaldar
- --no-create-db / -n: omite el comando CREATE DATABASE
- --no-data / -d: respalda únicamente la estructura
- --result-file / -r: especifica qué archivo se creará como script. Debe usarse en Windows
mysqldump -h HOST -u USER -pPASSWORD -B base1 -r C:\respaldo_base1.sql
Para un análisis detallado de las opciones disponibles, acá el link oficial.
Y luego, subir la base a partir del respaldo es fácil con la sintáxis que expliqué arriba, siempre desde la consola MySQL.
No hay comentarios.:
Publicar un comentario