Archivos de Categoría: Base de datos - Paginas 10

Haciendo backups y restaurandolos desde linux

Hoy ha tocado hacer backup de un servidor de desarrollo a uno de producción, con el inconveniente de que tocaba hacerlo por SSH ya que no nos daban otro acceso a parte del FTP.

Así que primero ha tocado hacer un dump de la base de datos (encima el mysql estaba en otra maquina):
mysqldump --opt --host=IP_SERVIDOR_MYSQL --user=USUARIO_MYSQL BASE_DATOS > backup.sql

Putada, solo tenia permisos de escritura sobre mi directorio home por lo que para bajarlo he tenido que hacerlo por SSH. El punto del final es para que me lo descargue en el directorio actual
scp USUARIO_SSH@IP_SSH:/home/USUARIO_SSH/backup.sql .

Después subida del backup.sql por FTP y a restaurarlo:
mysql --verbose --host=IP_SERVIDOR_MYSQL --user=USUARIO_MYSQL BASE_DATOS < /RUTA_FTP/backup.sql

Y por ultimo, bajar todos los ficheros por FTP y subirlos. Puedes hacerlo con un cliente de FTP normal pero para parecer más guay puedes hacerlo por consola:
lftp -u USUARIO_FTP SERVIDOR_FTP/RUTA_DESTINO/

y con un mput para subir y un mirror - v para bajar, solucionado.

Escribir fichero de texto desde SQL Server

Esta vez ha tocado ir escribiendo un log en un procedimiento almacenado por petición del cliente, asi que nada, la forma basica de escribir un fichero:

exec master..xp_cmdshell 'echo texto de inicio de log> c:\logs\fichero.txt'
exec master..xp_cmdshell 'echo texto concatenado al fichero >> c:\logs\fichero.txt'

peeeeero, para poder hacer esto, hay que habilitar el uso del xp_cmdshell que por defecto viene desactivado

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE

y logicamente, que la carpeta donde vayamos a escribir el log, debe tener permiso de escritura

Clase de PHP acceso a MySQL

Para proyectos pequeños donde no merece la pena meter un framework, o incluso para algún proyecto grande pero que necesito cierta rapidez de integración, suelo usar la siguiente clase de PHP que me curre una tarde de aburrimiento. Esta hecha para que la use hasta el más zarpas (maquetadores incluidos…)

descargar la clase

Por un lado tenemos un fichero de configuración en el raíz del proyecto (/config.php), donde tendremos los datos de acceso a la base de datos. Se puede aprovechar para definir las constantes extra que necesite vuestra aplicación. Por otro tenemos el fichero /class/db.php que es mi clase y que en un principio no la tendréis que tocar (aunque ya tengo otra versión para SQL Server con un funcionamiento similar).

Para usarla solo habría que hacer lo siguiente:

include_once('class/db.php'); 
$resultados = db::query('select * from tabla');	

// sacamos el resultado de la consulta
foreach($resultados as $registro){
    echo $registro->campo;
}

Bastante fácil como se puede comprobar. Que pasa, que como hay mucho gañán suelto, lo he dejado más fácil aun para las operaciones típicas:

/* insertar un registro
El primer parámetro es el nombre de la tabla donde insertar.
El segundo parámetro es un array de los nombres de los campos y sus valores
El resultado ($id) nos devolvería el identificador insertado en la tabla 
*/
$id = db::insert("tabla", array("campo1"=>"valor1", "campo2"=>"valor2", "campo3"=>"valor3"));
echo $id; 



/* actualizar registros
El primer parámetro es el nombre de la tabla donde actualizar.
El segundo parámetro es un array de los nombres de los campos y sus valores
El tercer parámetro es un string con la condición que deben cumplir los registros a actualizar. Si lo pasamos vacío actualiza todos los registros
El resultado ($afectados) serían el número de registros actualizados
*/
$afectados = db::update("tabla", array("campo1"=>"valor1", "campo2"=>"valor2"), " condicion = 1");	
echo $afectados;


/* borrar registros
El primer parámetro es el nombre de la tabla donde borrar.
El segundo parámetro es un string con la condición que deben cumplir los registros a borrar. Si lo pasamos vacío borra todos los registros
El resultado ($afectados) serían el número de registros borrados
*/
$afectados = db::delete("tabla", " condicion = 1");
echo $afectados;



/* seleccionar registros 
El primer parámetro es el nombre de la tabla
El segundo parámetro son los campos a sacar (se puede dejar vacío con lo que sacaríamos todos los campos)
El tercer parámetro es un string con la condición que deben cumplir los registros a mostrar (se puede dejar vacío con lo que sacaríamos todos los registros)
El cuarto parámetro es un string con el orden a mostrar (se puede dejar vacío con lo que no ordenaríamos los registros)
*/
$resultados = db::select("tabla", "campo1, campo2", " condicion = 1","orden");
foreach($resultados as $registro){
    echo $registro->campo1;
}

A parte, la clase trae un par de cosillas extra, como por ejemplo un método para convertir directamente fechas en formato dd/mm/yyyy a formato de la base de datos. En caso de no ser una fecha valida, devolvería null. Y la forma de usarla por ejemplo en una inserción:

$id = db::insert("tabla", array("campo"=>"valor", "fecha"=>db::fechaAdb("1/5/2010")));

También esta incluida dentro del mismo fichero algo que solemos necesitar en el desarrollo, una clase para hacer los logs. La forma de usarla sería:

/* guardar una cadena de texto
El primer parámetro es la cadena a guardar y el segundo el fichero donde lo guardará. Si no especificamos el segundo parámetro, por defecto lo hará en log.txt
*/
debug::log("texto a guardar", "fichero.txt");

/* mostrar los campos que llegan a la página ya sea por GET o por POST, indicando el nombre de la página que lo ejecuta y la fecha */
debug::campos("fichero.txt");  // guardaría el resultado en fichero.txt
debug::campos();   // los mostraría por pantalla

Y si os da por descargar el zip, veréis que en el directorio class esta el fichero paginacion.php y os preguntareis para que sirve. Pues como su nombre indica, para hacer paginaciones de registro.

include_once('class/db.php');
include('class/paginacion.php');
// instanciamos la clase pasandole la query a buscar y el número de registros por página
$listado = new paginacion("Select campo1, campo2 from tabla", $registros_por_pagina);

// sacamos el número de páginas de la paginación
echo $listado->paginas;

// sacamos los resultados de la página que le indiquemos
var_dump($listado->resultados($numero_de_pagina));

Como veis, más sencillo imposible. Y esto es todo, si veis cualquier opción para mejorarla o detectais algun problema no dudeis en avisarme