Extraer base de datos MySql sin acceso a phpMyAdmin

Scripts No hay Comentarios »

Sencillo script que subido al servidor via ftp y ejecutado via url extrae la base de datos y la manda por correo.

Salvar el script como extraedb.php y subirlo al servidor.

[php]

$creationstart=strtok(microtime(),” “)+strtok(” “);

$dbhost=”localhost”;
$dbname=”dbname”;
$dbuser=”dbuser”;
$dbpass=”dbpassword”;

$mailto=”your-email@domain.com”;
$subject=”Backup DB”;
$from_name=”USERFROM”;
$from_mail=”noreply@domain.com”;

mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname);

$tablesblocklist=array(
“tablename1″=>1,
“tablename2″=>1,
“tablename3″=>1,
);
$tables = array();
$result = mysql_query(“SHOW TABLES”);
while($row = mysql_fetch_row($result))
$tables[] = $row[0];
foreach($tables as $table) {
if (!isset($tablesblocklist[$table])) {
$result = mysql_query(“SELECT * FROM $table”);
$return.= “DROP TABLE IF EXISTS $table;”;
$row2 = mysql_fetch_row(mysql_query(“SHOW CREATE TABLE $table”));
$return.= “\n\n”.$row2[1].”;\n\n”;
while($row = mysql_fetch_row($result)) {
$return.= “INSERT INTO $table VALUES(“;
$fields=array();
foreach ($row as $field)
$fields[]=”‘”.mysql_real_escape_string($field).”‘”;
$return.= implode(“,”,$fields).”);\n”;
}
$return.=”\n\n\n”;
}
}
$filename=’db-backup-’.date(“Y-m-d H.m.i”).’.sql.bz2′;

$content=chunk_split(base64_encode(bzcompress($return,9)));
$uid=md5(uniqid(time()));
$header=
“From: “.$from_name.” \r\n”.
“Reply-To: “.$replyto.”\r\n”.
“MIME-Version: 1.0\r\n”.
“Content-Type: multipart/mixed; boundary=\”".$uid.”\”\r\n\r\n”.
“This is a multi-part message in MIME format.\r\n”.
“–”.$uid.”\r\n”.
“Content-type:text/plain; charset=iso-8859-1\r\n”.
“Content-Transfer-Encoding: 7bit\r\n\r\n”.
$message.”\r\n\r\n”.
“–”.$uid.”\r\n”.
“Content-Type: application/octet-stream; name=\”".$filename.”\”\r\n”.
“Content-Transfer-Encoding: base64\r\n”.
“Content-Disposition: attachment; filename=\”".$filename.”\”\r\n\r\n”.
$content.”\r\n\r\n”.
“–”.$uid.”–”;
mail($mailto,$subject,”",$header);

$creationend=strtok(microtime(),” “)+strtok(” “);
$creationtime=number_format($creationend-$creationstart,4);
echo “Database backup compressed to bz2 and sent by email in $creationtime seconds”;
?>

[/php]

Borra todas la carpetas compartidas con un script vbs

Scripts 1 Comentario »

Este pequeño script vbs sirve para eliminar todo tipo de recursos compartidos en equipo que lo ejecute excepto los directorios compartidos para administrar el equipo IPC$, ADMIN$ y C$.

El script consulta WMI para nuestras acciones, y mirando el tipo se puede decir si son recursos compartidos administrativos - Las comparticiones del tipo cero nunca serán las administrativas.

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
'Selecciona la lista de comparticiones del sistema

Set colShares = objWMIService.ExecQuery("Select * from Win32_Share")
'Se mueve a través de la lista de comparticiones y las elimina
' Pero chequea el tipo para permitir las comparticiones administrativas

For each objShare in colShares
 if (objShare.Type=0) then
  WScript.Echo "Deleting Share (" & objShare.Name & ")"
  if objshare.delete then
   WScript.echo "Error Deleting Share"
  end if
 end if
Next 

Para probar antes de ejecutarlo podemos listar antes:

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colShares = objWMIService.ExecQuery("Select * from Win32_Share")

For each objShare in colShares
 if (objShare.Type=0) then
  WScript.Echo "Share: (" & objShare.Name & ")"
 end if
Next 

Esto unido a un script de inicio de sesion puede hacer limpieza de shares en nuestra red. En Windows 7 o Vista ha de ser ejecutado como administrador por eso ha de ser puesto en el logon script del equipo, no del usuario.

Te recomiendo que hagas muchos test con el último script antes de ejecutar la opción de borrar del primero.

Vbs para buscar archivo y reemplazar texto dentro de el.

Scripts 2 Comentarios »

Bueno, por aqui os dejo un script sencillito que sirve para buscar un archivo a partir de un directorio dado.

Una vez encontrado o encontrados (si existe mas de uno con el mismo nombre también lo localiza). Una vez encontrado sustituye texto dentro de el.

Este script ha sido usado para migrar a los usuarios de un servidor con Oracle 9i a otro con Oracle 11g, por eso el fichero que se busca es el tnsnames.ora.

[vb]
strDir = “c:\oracle\”
Const ForReading = 1
Const ForWriting = 2

Set FSO = CreateObject(“Scripting.FileSystemObject”)
Set objDir = FSO.GetFolder(strDir)

getInfo(objDir)

Sub getInfo(pCurrentDir)

For Each aItem In pCurrentDir.Files
If LCase(Right(Cstr(aItem.Name), 12)) = “tnsnames.ora” Then
‘wscript.echo pCurrentDir
wscript.Echo pCurrentDir &”\”& aItem.Name ‘todos los archivos tnsnames.ora
‘Capturo todo el texto del fichero
set objFile =FSO.OpenTextFile(pCurrentDir & “\” & aItem.Name, ForReading)
strText=objFile.ReadAll
objFile.Close
‘reemplazo el texto en la variable
strNewText = Replace(strText, “172.31.0.43″,”172.31.0.13″)
‘escribo de nuevo el fichero con el texto cambiado
Set objFile=FSO.OpenTextFile(pCurrentDir &”\”& aItem.Name, ForWriting)
objFile.WriteLine strNewText
objFile.Close

End If
Next

For Each aItem In pCurrentDir.SubFolders
getInfo(aItem) ‘recursivo
Next

End Sub
[/vb]

Ale, si alguien busca algo parecido ya lo tiene escrito. Dejar un comentario si os apetece.

Eliminar archivos en subdirectorios recursivamente con Ubuntu

Scripts, Ubuntu No hay Comentarios »

Ya llevaba yo un tiempo queriendo estandarizar la eliminación de ficheros con un tipo de extensión a partir de un directorio padre. Hasta ahora y por las prisas lo realizaba con un script personalizado para cada directorio eliminando ficheros con extensión .enc.

Estos ficheros son el resultado de encriptar backups de bases de datos antes de enviarlas por Internet para almacenarlas fuera del edificio y así garantizar la recuperación ante un desastre que afectase al CPD.

Bueno, el caso es que despues de encriptar los ficheros de base de datos se quedaban en varios directorios y subdirectorios los ficheros backup_mysql…….tar.gz.enc y había que eliminarlos poco mas o menos que de forma personalizada ya que esos ficheros después de enviados al sitio remoto no me sirven de nada en local salvo para ocupar espacio.

Dedicando un poco de tiempo a estos comandos, sobre todo al maravilloso find es posible hacer todo esto en una sola linea de comando. Para mi que aún renqueo con los comandos de linux es todo un hallazgo.

El comando se debe ejecutar en el directorio de interés. “find” por naturaleza se mueve recursivamente, así que descenderá a todos los directorios desde el original, borrando los archivos de la extensión en cuestión.

He conseguido llegar a dos comandos que realizan la misma tarea:

  • $ find ./directorioinicial/ -name *.enc -type f -print | xargs /bin/rm -f

el segundo mas simple encontrado por ahí googleando:

  • $ find -name “*.enc” -exec rm {} \;

Aquí queda de apunte para que a alguien le resulte mas sencillo de averiguar.

Para comprobar sobre que ficheros va a actuar solo hay que cambiar el comando “rm” por “ls”.

WP Theme & Icons originales por N.Design Studio.
Aviso Legal Entradas RSS Comentarios RSS Acceder