Saltar al contenido

Buscar y reemplazar toda la base de datos mysql

Te sugerimos que revises esta respuesta en un ambiente controlado antes de enviarlo a producción, saludos.

Solución:

sqldump a un archivo de texto, buscar/reemplazar, volver a importar el archivo sqldump.

Volcar la base de datos a un archivo de texto
mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql

Restaure la base de datos después de haber realizado cambios en ella.
mysql -u root -p[root_password] [database_name] < dumpfilename.sql

Actualice la URL anterior a la nueva URL en word-press mysql Query:

UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');

UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');

UPDATE wp_posts SET post_excerpt = replace(post_excerpt, 'http://olddomain.com', 'http://newdomain.com');

UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

Esto implica fuertemente que sus datos NO ESTÁN NORMALIZADOS para empezar.

Algo como esto debería funcionar (NOTA: no ha mencionado que usa otros idiomas, por lo que está escrito como un procedimiento almacenado de MySQL)

 create procedure replace_all(find varchar(255), 
        replce varchar(255), 
        indb varcv=char(255))
 DECLARE loopdone INTEGER DEFAULT 0;
 DECLARE currtable varchar(100);
 DECLARE alltables CURSOR FOR SELECT t.tablename, c.column_name 
    FROM information_schema.tables t,
    information_schema.columns c
    WHERE t.table_schema=indb
    AND c.table_schema=indb
    AND t.table_name=c.table_name;

 DECLARE CONTINUE HANDLER FOR NOT FOUND
     SET loopdone = 1;

 OPEN alltables;

 tableloop: LOOP
    FETCH alltables INTO currtable, currcol; 
    IF (loopdone>0) THEN LEAVE LOOP;
    END IF;
         SET stmt=CONCAT('UPDATE ', 
                  indb, '.', currtable, ' SET ',
                  currcol, ' = word_sub('', find, 
                  '',''', replce, '') WHERE ',
                  currcol, ' LIKE '%', find, '%'');
         PREPARE s1 FROM stmt;
         EXECUTE s1;
         DEALLOCATE PREPARE s1;
     END LOOP;
 END //

Dejaré que tú averigües cómo declarar la función sub_palabra.

Si sostienes alguna sospecha y disposición de avanzar nuestro ensayo puedes ejecutar una nota y con mucho placer lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *