2008-11-02 13 views

Respuesta

5

Cada sistema de base de datos viene con algún programa para volcar sus contenidos.

Usted puede simplemente llamar a ese programa a partir de PHP usando system() o shell_exec().

Por ejemplo, si se utiliza PostgreSQL con activado Ident authentication y desea volcar la base de datos test directamente como texto SQL para el navegador, es tan simple como:

 
<?php 
header('Content-type: text/plain'); 
system('pg_dump test'); 
?> 

Al utilizar MySQL con el usuario de base de datos y la contraseña almacenada en ~/.my.cnf, también es muy simple:

 
<?php 
header('Content-type: text/plain'); 
system('mysqldump test'); 
?> 

sin embargo, no hacen esto:

 
<?php 
header('Content-type: text/plain'); 
system('mysqldump -utestuser -ptestpassword test'); 
?> 
debido a la transmisión de una contraseña como línea de comandos argumento es very insecure.

+0

¿Estoy en lo cierto al pensar que también podría ejecutar esto a través de una consulta SQL? Algunos proveedores de alojamiento compartido no permiten llamadas al sistema. – Ross

+0

Si tiene un proveedor de hosting que no permite system() o shell_exec(), debe cambiar a uno serio. Dicha restricción realmente no agrega seguridad. Es simplemente molesto para los clientes. – vog

0

Es un proceso bastante complicado. Te recomiendo que uses phpmyadmin o similar.

0

Si bien es posible y admirable realizar una copia de seguridad de una base de datos "conforme a ANSI SQL", aún así encontrará problemas de portabilidad. El más obvio es que, aunque el formato de volcado/restauración de MySQL es bastante rápido, lo logra principalmente al usar una extensión no estándar para SQL. Entonces no puedes entregar el volcado a PostGresql: no funcionará. De hecho, PostGresql también es bastante lento en el manejo de una gran cantidad de instrucciones INSERT. Su formato de volcado nativo usa su propia declaración SQL personalizada optimizada para insertar una gran cantidad de datos a la vez.

Cuestiones relacionadas