Saltar al contenido

En muchas ocasiones tienes un script de sql que la memoria de php o un timeout no te permite cargar desde el PhPMyAdmin con un sencillo "Importar".

Debes saber que con el propio XAMPP se instala MySQL y lleva una suite de utilidades que te permiten hacer muchas viguerías con la bases de datos. Incluso en Windows.

Te voy a explicar como importar una base de datos MySQL desde la consola de Windows.

  1. Abre la consola con el comando "cmd" y sitúate en la carpeta bin en el directorio de instalación de MySQL, si tienes XAMPP lo tienes en:
    C:\xampp\mysql\bin
  2. En esta carpeta tienes todas las utilidades, utilizaremos mysql.exe y ejecutaremos el siguiente comando:
    mysql -h localhost -u root --default-character-set=utf8 nombrebd < C:\rutadel.sql

NOTAS IMPORTANTES:

  • localhost si lo tienes en local, sino tu ip de máquina.
  • root o el nombre de usuario, si tienes contraseña ponla a continuación
  • pon el character set por defecto
  • la ruta del fichero sql debe ser absoluta
  • el fichero debe ser .sql y no estar comprimido

Otro apunte muy a tener en cuenta es que si nos hemos descargado un volcado del phpmyadmin del servidor tendrás claves ajenas y/o otras restricciones que no permitirán la inserción en el orden que se ha generado las tablas del script. Puedes anular estas restricciones simplemente abriendo el fichero y poniendo:

SET FOREIGN_KEY_CHECKS=0;

De esta forma entrará todo el script sin validar las restricciones.

 

Cambiar la conexión:

function db_conectar()
{
 $db = mysqli_connect($GLOBALS['configuration']['host'],$GLOBALS['configuration']['user'],$GLOBALS['configuration']['pass'],$GLOBALS['configuration']['db']);
 
if (!$db) {
 echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
 echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
 echo "error de depuración: " . mysqli_connect_error() . PHP_EOL;
 exit;
 }
 else {return $db;}
}

Solo he tenido que hacer un replace con:

mysql_query(    ---------------->   mysqli_query($db,
mysql_num_rows( ---------------->    mysqli_num_rows(
mysql_fetch_array(  ---------------->   mysqli_fetch_array(
mysql_free_result(  ---------------->   mysqli_free_result(
MYSQL_ASSOC  ---------------->   MYSQLI_ASSOC
mysql_result(  ---------------->   mysqli_result(
mysql_real_escape_string( ------> mysqli_real_escape_string($db,

Muchas veces tenemos problemas de seguridad en nuestras páginas webs, es altamente recomendable tener preparadas tareas automáticas para que se ejecuten y salven los datos cada cierto tiempo. Con el siguiente script realizamos una copia de las tablas que deseamos exceptuando los nombres de las que pasamos como parámetro, en mi caso los logs no los copio.

Backup

backup_tables('servidor','usuario','contrasena','bd','tabla1,tabla2');
 
function backup_tables($host,$user,$pass,$name,$tablesNo)
 {
 $link = mysql_connect($host,$user,$pass);
 mysql_select_db($name,$link);
 
//get all of the tables
 $tables = array();
 $tablesNoBackup = explode(',',$tablesNo);
 
$result = mysql_query('SHOW TABLES');
 while($row = @mysql_fetch_row($result))
 {
 $tables[] = $row[0];
 }
 
//cycle through
 foreach($tables as $table)
 {
 if(!in_array($table, $tablesNoBackup))
 {
 $result = mysql_query('SELECT * FROM '.$table);
 $num_fields = mysql_num_fields($result);
 
$return.= 'DROP TABLE '.$table.';';
 $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
 $return.= "\n\n".$row2[1].";\n\n";
 
for ($i = 0; $i &lt; $num_fields; $i++)
 {
 while($row = mysql_fetch_row($result))
 {
 $return.= 'INSERT INTO '.$table.' VALUES(';
 for($j=0; $j&lt;$num_fields; $j++)
 {
 $row[$j] = addslashes($row[$j]);
 $row[$j] = ereg_replace("\n","\\n",$row[$j]);
 if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
 if ($j&lt;($num_fields-1)) { $return.= ','; } } $return.= ");\n"; } } $return.="\n\n\n"; } } //save file $handle = fopen('db-backup-'.date("Ymd").'-'.(md5(implode(',',$tables))).'.sql','w+'); fwrite($handle,$return); fclose($handle); }