Foros del Web » Programando para Internet » PHP »

Recuperar respaldo.

Estas en el tema de Recuperar respaldo. en el foro de PHP en Foros del Web. Estimados. Hice esta rutina para tratar de recuperar un respaldo que hice. <? // Variables $sql_host="mysql"; $sql_db="foritos"; $sql_usuario="xxxxx"; $sql_pass="yyyyy"; // Hace la conexión a la ...
  #1 (permalink)  
Antiguo 07/12/2006, 14:22
 
Fecha de Ingreso: abril-2002
Mensajes: 25
Antigüedad: 22 años
Puntos: 0
Recuperar respaldo.

Estimados.

Hice esta rutina para tratar de recuperar un respaldo que hice.

<?
// Variables
$sql_host="mysql";
$sql_db="foritos";
$sql_usuario="xxxxx";
$sql_pass="yyyyy";

// Hace la conexión a la Base de Datos
mysql_connect("$sql_host", "$sql_usuario", "$sql_pass") or die ("Error en la conexión Mysql");
// Selecciona la Base de Datos
mysql_select_db("$sql_db") or die ("Error en la seleccion de la db.");

echo "Inicio. ";
mysql_query("DROP TABLE IF EXISTS administrator");
mysql_query("mysql < respaldo.sql");
echo "Fin.";

// Cierra las conexiones
mysql_close();
?>

¿Es correcto lo que quiero hacer? porque la línea en negrita no me la ejecuta, que estaré haciendo mal?.

De antemano agradezco la ayuda que me puedan brindar.

Saludos...
  #2 (permalink)  
Antiguo 07/12/2006, 18:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Re: Recuperar respaldo.

No, no es correcto ..

La función de PHP mysql_query() ejecuta "SQL" en general .. en tu caso no sé que significaría "mysql < respaldo.sql" .. podría ser un "comando" de Mysql .. pero tampoco.

Si tu archivo .sql contiene ya instrucciones SQL .. lo que debes hacer es "ejecutarlas". Pero recuerda que Mysql (por lo menos usado con funciones mysql_xxx() del "cliente" antigüo o clásico de Mysql) sólo permite ejecutar una instrucción SQL por función (se entiende a instrucción a una línea separada por ";").

Así que tendrías que tomar tu .sql .. abrirlo (fopen() y afines) truncarlo al caracter ; para tomar líneas SQL que ejecutar por unidad (con explode()) y de ahí con el array que te resulte ir recorriendolo (con un foreach()) para aplicar a cada elemento de ese array que será una instrucción SQL tu mysql_query()

Revisa las FAQ's de este foro, creo que ya hay ejemplos implementados que hacen algo similar a lo que te propongo. Sino: www.phpclasses.org ..seguro que encuentras algo ya hecho al respecto allí.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 07/12/2006, 18:20
 
Fecha de Ingreso: abril-2002
Mensajes: 25
Antigüedad: 22 años
Puntos: 0
Re: Recuperar respaldo.

Gracias por contestar Cluster y por tus consejos.

Voy a intentar hacer lo que me dices y ya les platicaré.

Solo tengo una duda: mi respaldo.sql mide 1 GB, no tendré problemas para abrirlo con fopen()

Saludos desde México.
  #4 (permalink)  
Antiguo 07/12/2006, 19:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Re: Recuperar respaldo.

Cita:
Iniciado por PedroJulio Ver Mensaje
Gracias por contestar Cluster y por tus consejos.

Voy a intentar hacer lo que me dices y ya les platicaré.

Solo tengo una duda: mi respaldo.sql mide 1 GB, no tendré problemas para abrirlo con fopen()

Saludos desde México.
Si, .. vas a tener problemas para trabajarlo con PHP en general.

No es recomendable en este caso el método que te propongo.

Lo ideal es que uses la Shell de Msyql directo si tienes oportunidad para que lances el comando directo como más o menos proponías en tu ejemplo. Eso sí, no desde código PHP sino en la Shell (consola .. línea de comandos). ¿Tu tienes acceso al servidor Mysql?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 07/12/2006, 21:43
 
Fecha de Ingreso: abril-2002
Mensajes: 25
Antigüedad: 22 años
Puntos: 0
Re: Recuperar respaldo.

No Cluster, no tengo acceso al servidor de Mysql.

Dentro de mi PhpMyAdmin ejecuté lo siguiente:
(tengo entendido que con esto recupero el respaldo)

mysql -u username -p < respaldo.sql

Pero me manda el siguiente error:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql -u admfenlamira -p < respaldo.sql' at

Luego, de respaldo.sql tome lo siguiente:

DROP TABLE IF EXISTS access;
CREATE TABLE `access` (
`userid` int(10) unsigned NOT NULL default '0',
`forumid` smallint(5) unsigned NOT NULL default '0',
`accessmask` smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (`userid`,`forumid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

y dentro de PhpMyAdmin lo ejecute y corrió sin problema. Con esto entiendo que el contenido del archivo no es el problema, sino el comando que estoy ejecutando.

mysql -u username -p < respaldo.sql
  #6 (permalink)  
Antiguo 10/12/2006, 18:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Re: Recuperar respaldo.

Cita:
Dentro de mi PhpMyAdmin ejecuté lo siguiente:
(tengo entendido que con esto recupero el respaldo)

mysql -u username -p < respaldo.sql
"mysql" es el "interprete de comandos" por decirlo así de Mysql .. no es una sentencia SQL (que es lo que en phpMyAdmin en su campo "SQL" te pide).. es ese comando justamente el que te comenté que podrías ejecutar si tuvieras acceso al servidor Mysql desde Shell (por SSH por ejemplo). Pero, como dices que no tienes acceso a Mysql más que por "phpMyadmin" tendrás que usar las herramientas que phpMyAdmin te presta ..

phpMyAdmin tiene un "botón" que dice algo como "cargar SQL" (justo abajo de donde ahora has hecho tus pruebas y pusistes SQL a ejecutar) .. es ese botón el que debes usar para cargar tu .sql que tienes .. otra cosa será que PHP por su configuración en tu servidor pueda (por restricciones) trabajar un archivo de "1 GB" .. lo más probable es que no pueda.

Te recomiendo contactar con tu proveedor, es el el único que puede hacer un proceso de ese estilo (ya que a tí no te dan acceso SSH o Shell a tu servidor Mysql para ejecutes ese comando que necesitas).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:27.