Como mezclar dos foros SMF usando MySQL

Como he tenido mil y un problemas para poder traspasar mi antiguo foro de PHP Nuke ET a un nuevo foro SMF 2.0.1 mucho mas potente, he tenido que hacer cosas y buscar información que no conocía para llevar todo a buen puerto. Lo primero que hice fue adaptar un conversor sacado del propio foro de Simple Machines, para poder migrar el antiguo PHP Nuke ET a una nueva instalación de SMF 2.0.1. He incluido en las descargas de la web el conversor adaptado ya que no lo he visto en ningún otro lado, lo podéis encontrar aquí.

Una vez hecho esto, y teniendo en cuenta que como no había nada para hacerlo ya tenía otro foro SMF 2.0.1 funcionando tenia que fusionarlos, y por mas que he mirado por Internet no había forma de poderlo hacer. Nadie daba solución ni forma de hacerlo y mire en todos los idiomas. Finalmente en el foro de Simple MachinesJoker™ me dijo que podía haber una solución en un post, y así fue, así que me puse manos a la obra y tras algunos traspiés al final lo logré como podéis ver en la web de Urgencias y Emergenciasque es donde lo apliqué. Como esa solución no me ha sido fácil encontrarla y además solo esta en inglés recopilada por jkdove he creído interesante publicarosla aquí en la lengua de Cervantes para todo el que lo pueda necesitar, además he corregido y cambiado algunas cosas ya que sino a mi me daba algún error.

Como juntar dos Foros SMF usando MySQL

Lo primero tenemos que diferenciar ambos foros para hablar de ellos, los vamos a llamar antiguo y principal, donde el antiguo es la Base de datos antigua desde la que queremos recuperar los datos, y principal es la Base de Datos actual, a la que queremos exportar esos datos, es decir, el foro en funcionamiento.

Os puedo asegurar que funciona, y la prueba la tenéis mas arriba, pero tienes que seguir las instrucciones exactamente y al pie de la letra. Yo lo he usado una vez sin problemas y en su post jkdove dice haberlo realizado tres veces ya sin problemas. Como apunte deciros que los dos foros que uní eran dos smf 2.0.1. Vamos a ponernos el mono de trabajo, y manos a la obra.

Para empezar todo el trabajo lo vamos a realizar usando el phpmyadmin. Una vez dentro entramos en la base de datos que vamos a utilizar y alli veremos una pestaña llamada SQL. Esa es la que vamos a usar en la primera y segunda parte. Antes de nada, y como siempre que vamos a hacer alguna operación, hacemos una copia de seguridad de ambos foros.

Primera parte

Hacer las siguientes consultas SQL en la base de datos principal para averiguar la ID max más algunos fudge factor para que podamos asegurarnos de que esto funcionará incluso si se han apuntado cinco usuarios más o se han publicado 15 post más. (MAX (ID_MSG) 100 significa que esto debería funcionar incluso hasta 100 o más nuevos mensajes). Si pasa mucho tiempo desde que hiciste las consultas hasta que vayas a trabajar, querrás ejecutar estas consultas una vez más o de lo contrario podría empezar a dar conflictos. Puesto que estás buscando realmente resultados con estas consultas, tendrías que hacer cada una de estas peticiones de una en una. Revisa que tu prefix coincida o cámbialo antes de ejecutar las consultas.

/* Will result in: 91 */
SELECT MAX(ID_BOARD) +10 AS max_id_board FROM smf_boards;

/* Will result in: 33 */
SELECT MAX(ID_CAT) +20 AS max_id_cat FROM smf_categories;

/* Will result in: 377 */
SELECT MAX(ID_MEMBER) +50 AS max_id_member FROM smf_members;

/* Will result in: 37340 */
SELECT MAX(ID_MSG) +100 AS max_id_msg FROM smf_messages;

/* Will result in: 4236 */
SELECT MAX(ID_TOPIC) +30 AS max_id_msg FROM smf_topics;

Segunda Parte

En esta parte puedes pegar el siguiente bloque de SQL entero en el cuadro de texto de la pestaña SQL de phpmyadmin de la base de datos antigua. Estos comandos son muy básicos. Básicamente, el primer comando ( UPDATE smf_boards SET ID_BOARD = ID_BOARD+91; ) está diciendo «ve a la tabla smf_boards y cualquiera que sea la ID, añádele 91. La razón por la que añadimos 91  a esta tabla es por que 91 es 10 mas de lo que tiene la Base de datos principal. Esto significa que si tu tienes un foro con una ID 23 en la Base de datos antigua, ese foro ahora tendrá la ID 114 (23 + 91). Luego, como verás hay otro comando para actualizar la ID_BOARD para smf_topics haciendo la misma tarea. Esto se hace para que luego coincidan los post con los foros y con los usuarios, y que el post que pertenece al foro 23 luego pertenezca al 114.

Ejecuta lo siguiente en la pestaña SQL de la base de datos antigua. Crucemos los dedos para que no tengas errores, pues si cambias los números podrías cambiar las ID’s y hacer que no coincidan posts, usuarios, foros, etc:

/* Foreign key checks need to be off! */
SET FOREIGN_KEY_CHECKS=0;
UPDATE smf_boards SET ID_BOARD = ID_BOARD+91;
UPDATE smf_boards SET ID_LAST_MSG = ID_LAST_MSG+37340;
UPDATE smf_boards SET ID_MSG_UPDATED = ID_MSG_UPDATED+37340;
UPDATE smf_boards SET ID_CAT = ID_CAT+33;
UPDATE smf_members SET ID_MEMBER = ID_MEMBER+377;
UPDATE smf_members SET ID_MSG_LAST_VISIT = ID_MSG_LAST_VISIT+37340;
UPDATE smf_topics SET ID_TOPIC = ID_TOPIC+4236;
UPDATE smf_topics SET ID_BOARD = ID_BOARD+91;
UPDATE smf_topics SET ID_MEMBER_STARTED = ID_MEMBER_STARTED+377;
UPDATE smf_topics SET ID_MEMBER_UPDATED = ID_MEMBER_UPDATED+377;
UPDATE smf_topics SET ID_FIRST_MSG = ID_FIRST_MSG+37340;
UPDATE smf_topics SET ID_LAST_MSG = ID_LAST_MSG+37340;
UPDATE smf_messages SET ID_MSG = ID_MSG+37340;
UPDATE smf_messages SET ID_TOPIC = ID_TOPIC+4236;
UPDATE smf_messages SET ID_BOARD = ID_BOARD+91;
UPDATE smf_messages SET ID_MEMBER = ID_MEMBER+377;
UPDATE smf_messages SET ID_MSG_MODIFIED = ID_MSG_MODIFIED+37340;
UPDATE smf_categories SET ID_CAT = ID_CAT+33;

Tercera Parte

Lo primero de todo, comprueba tu trabajo. Identificate en los Foros de la Base de datos antigua. Es importante que te identifiques la cuenta de Administrador. Has cambiado todas las Id’s por lo que podrían pasar dos cosas:

  1. Necesitarás identificarte de nuevo (tu ID de miembro ha cambiado, por lo que tu sesión habrá expirado).
  2. Si la url de tu foro era htttp://www.tuweb.com/index.php?board=23.0 ahora seguramente estará rota y tendrás que acceder a través de htttp://www.tuweb.com/index.php?board=114.0

Cuarta Parte

Si todo a ido como debiera, todo estará ok y ya podrás exportar. Para ello ve a la pestaña Exportar en la Base de datos antigua. Pincha en Personalizado, y luego en Deseleccionar todo y entonces selecciona a mano las siguientes tablas:

  • smf_boards
  • smf_categories
  • smf_members
  • smf_messages
  • smf_topics

Una vez hecho esto, tendrás un montón de opciones, algunas marcadas por defecto. Asegúrate de cambiar manualmente lo siguiente:

  • Deshabilitar la revisión de las claves foráneas: Marcado. Esto asegurara que puedas insertar las columnas sin violaciones de la integridad.
  • estructura: Sin marcar. Esto hara que sea efectiva la exportación para importarla a una Base de datos existente (esto significa que no tratara de incluir la creación de ninguna tabla).
  • Yo os sugiero usar la compresión zip o tar.gz.

Quinta Parte

Por último deberías ser capaz de importar los datos exportados de la Base de datos antigua en la Principal usando la pestaña Importar.

Y ya está. No hay mas pasos. Ahora solo tendrás que mover los post a su nuevo lugar y editar o eliminar los foros repetidos (en el caso de que en el foro antiguo y en el principal tengas foros con el mismo nombre. Los post antiguos, pese a mantener la fecha de publicación original, es decir, mas antigua que los mensajes actuales del foro, aparecerán antes que estos imagino que por no estar leídos. Esto se irá corrigiendo con el uso normal del foro. Las encuestas que tuvieras en el foro antiguo se desligarán del post en el que estuvieran y aparecerán en otro diferente. La solución es eliminarlas y crearlas de nuevo.

Yo recomiendo que una vez hayas acabado, entres en Administración, Mantenimiento, Rutina, y ejecutes la solucion de errores y el recuento de post y usuarios de nuevo.

Espero que os sea útil. Si tenéis alguna duda comentadmela o preguntar en los Foros y trataré de ayudaros.

Deja un comentario

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

Scroll al inicio