Error al restaurar mi BD

S

Buenas he incorporado a mi aplicación web la capacidad de realizar backups y restaurarlas.

Para generar backups uso la clase dbutilities de codeigniter y para restaurar el siguiente codigo:

$this->load->helper('file');
		$backup = read_file('./copias/mybackup.sql');
                
$sql_clean = ''; foreach (explode("\n", $backup) as $line){ if(isset($line[0]) && $line[0] != "#"){ $sql_clean .= $line."\n"; } } //echo $sql_clean; foreach (explode(";\n", $sql_clean) as $sql){ $sql = trim($sql); //echo $sql.'<br/>============<br/>'; if($sql) { $this->db->query($sql); } }

El caso es que cuando intento restaurar me lanza el siguiente error:

Ocurrió un error con la base de datos

Error Number: 1005

Can't create table 'prueba_restaurar.baldas' (errno: 150)

CREATE TABLE baldas ( id int(11) NOT NULL AUTO_INCREMENT, nombre_balda varchar(25) COLLATE utf8_spanish2_ci NOT NULL, edificio int(11) NOT NULL, habitacion int(11) NOT NULL, mueble int(11) NOT NULL, PRIMARY KEY (id), KEY edificio (edificio), KEY habitacion (habitacion), KEY mueble (mueble), CONSTRAINT baldas_ibfk_1 FOREIGN KEY (edificio) REFERENCES edificios (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT baldas_ibfk_2 FOREIGN KEY (habitacion) REFERENCES habitaciones (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT baldas_ibfk_3 FOREIGN KEY (mueble) REFERENCES muebles (id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci

Filename: C:\xampp\htdocs\pfcdata\system\database\DB_driver.php

Line Number: 330

Espero ayuda, gracias!

r2d2rigo

http://stackoverflow.com/questions/4061293/mysql-cant-create-table-errno-150

2 respuestas
elkaoD

Añado a #2: https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html

1 respuesta
S

#2 #3 Buenas, gracias por las respuestas, según he leído el error puede deberse a:

1- Las claves que mantienen la relación tienen tipos distintos (esto lo desecho porque tienen igual tipo)

2- Me intenta crear las restricciones antes que estén ciertas tablas creadas.

La opción 2 es cierta, me intenta crear una tabla baldas con ciertas restricciones a otras tablas que aun no se han creado. El problema es que al usar codeigniter para hacer la copia de seguridad me crea el archivo de esa forma y no tiene en cuenta esto.

Alguna idea???

También he leído que al haber claves foráneas me lanza ese error al querer restaurar la BD (supongo que por lo dicho en el punto 2) y que colocando la siguiente linea se soluciona,

SET FOREIGN_KEY_CHECKS = 0;

Es eso cierto? de ser así en que parte del script debo de colocarlo? al principio? al principio de cada tabla? gracias!

1 respuesta
elkaoD

#4 al principio.

1 respuesta
S

#5 Gracias! todo funciona OK!

1

Usuarios habituales