PDA

Ver la Versión Completa : Generar Script MySQL


bustio
26-01-2005, 18:56:37
Hola!
Creo que mi pregunta si esta dificil esta vez. Tengo que generar un script con la estructura de una BD de MySQL, pero que este Script pueda ser leido luego por el MySQL y por supuesto, permitir importar la BD. Existe alguna instruccion que me permita hacer esto en MySQL o tengo que programar el Script?? En cualquiera de los casos./... alguien sabe como se hace esto? Alguien ha hacho algo igual que me pudiera facilitar alguna idea o segmento de codigo?

Gracias!!!


Lazaro Bustio Martinez.

roman
26-01-2005, 19:19:08
Cosas que te pueden servir:


show create database database - regresa la instrucción sql para crear la base (CREATE DATABASE...)

show tables from database - te regresa una tabla con los nombre de las tablas de la base.

show create table database.table - te regresa la instrucción sql para crear la tabla (CREATE TABLE ...)


Todas éstas son consultas sql que puedes hacer con MySql.

// Saludos

bustio
26-01-2005, 19:38:59
GRacias Roman..!!! acabo de probar estas ideas qeu me diste sobre el MySQL funcionan para lo que deseo. COn estas isntrucciones obtengo el script para la estructura de las tablas y demas, ahora, no habra algo similar para obtener los datos de las tablas?

edgusano
26-01-2005, 21:47:06
para hacer esto debes utilizar el mysqldump, este se encuentra en la carpeta bin de la instalacion del mysql, este te genera el script de la base datos, ademas podes especificar si quieres nada mas la estructura o la estructura con los datos que tienen las tablas, ademas este script lo genera en puras sentencias sql.

bustio
26-01-2005, 22:24:02
para hacer esto debes utilizar el mysqldump, este se encuentra en la carpeta bin de la instalacion del mysql, este te genera el script de la base datos, ademas podes especificar si quieres nada mas la estructura o la estructura con los datos que tienen las tablas, ademas este script lo genera en puras sentencias sql.


Eso que me dices me parece muy bien, es justo lo que deseo hacer.. pero...
Como uso el MySQLDUMP?? ya lo ejecute y me sale una ventana negra estilo CMD(MSDOS) donde no puedo ver nada por que se cierra muy rapido. Supongo que debo pasarle algunos parametros a esa aplicacion.. pues en todo caso, me interesa poder decidir hacia que lugar genero el Script, la carpeta donde deseo ubicarlo y el nombre que quiero darle...

Me podrias indicar un poco mas????

roman
26-01-2005, 22:35:44
Yo pensaba que querías hacer tú un código para generar el respaldo.

Para usar el mysqldump lo más cómodo es que abras primero una ventana de ms-dos y desde ahí lo ejecutes:

mysqldump -uusuario -p database > respaldo.sql

Cuando quieras restaurarlo basta que hagas

mysql -uusuario -p database < respaldo.sql

// Saludos

bustio
27-01-2005, 02:50:23
Pues si, lo que yo necesito hacer es crear un algoritmo, un codigo que me permita hacer el backup de mi BD.
Ya con la idea qeu me diste(Roman) puedo generar las estructuras de las tablas y de la BD en general, lo que me faltaria ahora es como hacer para crear el segmento del Script que le da tratamiento especifico a los datos contenidos en las tablas.
Cuando vi la idea del mySQLDUMP lo qye pense es qeu desde el delphi mismo se le podia mandar a ejecutar, y luego, mediante algunos parametros, qye el mismo DUMP generara el Script.. pero segun veo esto no es asi de sencillo.
Voy a tener que crear yo mismo el script completo. Me das alguna sugerencia para la hora de hacer la seccion que permite hacerle el tratamiento a los datos??

GRacias a todos de antemano!
(no se qyue seria de mi sin este foro!!)

roman
27-01-2005, 18:17:35
Si el respaldo lo haces en el servidor entonces hay una manera muy sencilla de hacerlo:


select * from tabla
into outfile 'tabla.txt'


Esto te guardará todos los datos de la tabla tabla en el archivo tabla.txt. El formato con que lo guarda es el de campos separados por tabulaciones pero puedes especificarle otro formato (por ejemplo, separado por comas).

Para recuperar el respaldo, una vez que hayas creado la tabla puedes usar:


load data infile 'tabla.txt'
into table tabla


Si no especificas ninguna ruta, creo que el archivo lo guarda en el mismo directorio donde está la base de datos. Si especificas una ruta debes utilizar '/' en lugar de '\' para separar los directorios.

Si el respaldo lo haces desde otra máquina, aun puedes usar esta técnica pero el usuario debe tener derechos en MySql para crear archivos lo cual puede no ser muy buena idea por razones de seguridad.

Otra manera de hacer el respaldo es crear tú mismo un archivo .sql con las instrucciones INSERT necesarias (una por cada registro de la tabla). Esto debe ser sencillo: simplemente recorres la tabla y por cada registro formas una cadena:

INSERT INTO tabla values(valor1, valor2, valor3,...);

donde valor1, valor2, valor3, etc. son los valores entre comillas de los campos para ese registro. Tales valores los obtienes recorriendo el arreglo Fields del DataSet que uses para acceder a la tabla de MySql.

Cada una de estas líneas la insertas en el archivo de texto.

Para recuperar el respaldo lees este archivo línea a línea ejecutando cada una.

// Saludos

bustio
28-01-2005, 13:43:18
Me ha parecido estupenda esa ayuda que me has dado...
Ahora, solo necesito saber donde puedo encontrar informacion sobre el MySQL, sus instrucciones y demas pues el que tengo es solo de
SQL SERVER 2000 y hay muchas cosas que no las tiene el MySQL.
De cualquier manera, me han servido de mucha ayuda tus comentarios.

roman
28-01-2005, 16:49:04
Ahora, solo necesito saber donde puedo encontrar informacion sobre el MySQL, sus instrucciones y demas


Muy fácil, el mismísimo manual de MySql (http://dev.mysql.com/doc/mysql/en/index.html)

Si buscas por esa página me parece que también hay versión en español.

// Saludos

edgusano
29-01-2005, 00:07:57
Sabes que lo de generar el backup de la base de datos con el mysqldump no es tan complicado como parece, el unico inconveniente que le veo yo es que te hayan movido el ejecutable de este de ubicacion, pero igual antes de realizar la labor de crear el backup, pues buscarias ese archivo en el equipo.
Si abres una consola de DOS de la siguiente manera podras ver que parametros acepta este, entre los cuales esta el -r para indicar la ubicacion en la cual deseas que se aloje el resultado del backup.
----------------------
VENTANA DOS.
>(directorio en donde se encuentra la carpeta bin de mysql)/mysqldump --help
----------------------
Ya desde tu codigo llamarias este ejecutable pasandole los parametros que desees y te generaria el script.

bustio
09-02-2005, 07:59:15
Si el respaldo lo haces en el servidor entonces hay una manera muy sencilla de hacerlo:


select * from tabla
into outfile 'tabla.txt'


........
Para recuperar el respaldo, una vez que hayas creado la tabla puedes usar:


load data infile 'tabla.txt'
into table tabla



Gracias Roman, utilice estas ideas qeu me das y me resultan bien.. ahora pasa lo siguisnte:
Yo cree esta consulta para poder obtener los datos de mi BD en SCV, solo que no me deja Annadirle al fichero de salida los valores de las demas tablas pues me dice que el fichero ya existe. Podrias tu o alguien explicarme como le hago este "Append" al fichero desde el MySql?

Esto fue lo que hice:

SELECT * INTO OUTFILE 'c:/temp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM tematicas;



y esta es la respuesta del Server:


File 'c:/temp/result.text' already exists

roman
09-02-2005, 14:56:13
como le hago este "Append" al fichero desde el MySql?


No se puede. El manual de MySql específicamente dice:


The SELECT ... INTO OUTFILE 'file_name' form of SELECT writes the selected rows to a file. The file is created on the server host, so you must have the FILE privilege to use this syntax. The file cannot currently exist, which among other things prevents files such as /etc/passwd and database tables from being destroyed.


// Saludos