2010-10-22 16 views
5

Estoy tratando de usar mysqldump para exportar una base de datos que necesita ser importada usando un nombre de base de datos diferente. Al observar el SQL generado por mysqldump, parece que los desencadenadores son los únicos nombres de objeto que están completamente calificados con el nombre de la base de datos de origen frustrando así mis necesidades. ¿Hay alguna forma de indicar a mysqldump que no califique completamente los nombres de los objetos, incluidos los disparadores?mysqldump Califica completamente los disparadores con el nombre de la base de datos

Respuesta

2

Tuve el mismo problema y encontré la solución. Estaba usando MySQL Workbench para diseñar mi base de datos y he creado algunos desencadenantes allí. Todos ellos usaron la sintaxis CREATE TRIGGER trigger_name a excepción de uno: CREATE TRIGGER dbname.trigger_name (fue solo mi error). La salida de Mysqldump incluía todos los desencadenantes de la misma manera: solo uno tenía el nombre de la base de datos.

Mysqldump usa las instrucciones originales CREATE TRIGGER que se pueden ver a través de SHOW CREATE TRIGGER. Si tiene un disparador definido con un nombre de base de datos, simplemente reemplácelo (suelte y cree) con uno sin nombre de base de datos.

+0

No estaré verificando esto (han pasado más de dos años desde que lo necesité, y no lo necesitaré en un futuro previsible), pero esto parece una solución plausible y práctica, así que estoy marcando ¡como la respuesta! Gracias por compartir. –

+0

Ja, veo que @emre en realidad sugirió esta solución hace más de un año y yo lo maté. No obstante, su era una sospecha y la tuya es una insistencia, así que te dejaré con la respuesta marcada. Ciertamente, si alguno encuentra evidencia de lo contrario, lo consideraremos entonces. Por ahora, creo que hay una buena posibilidad de que su asesoramiento ayude a otros. –

+0

bueno, acabo de probarlo, porque tuve el mismo problema. Si es importante, mi versión del servidor MySQL es 5.5.29-0ubuntu0.12.04.1 – ducin

1

Lo más probable es que agregue el nombre de la base de datos cuando crea el activador. Intente actualizar su activador sin el nombre de la base de datos.

+0

Ha pasado un tiempo desde que tuve que lidiar con esto, pero estoy bastante seguro de que el problema no se debía a la creación de desencadenadores utilizando el nombre de base de datos completo: mysqldump generaría el guión de creación de desencadenantes con nombre de base de datos totalmente calificado independientemente de cómo los haya creado. –

0

No es una solución ideal, pero el bombeo de la salida a través de lo siguiente ha eliminado el nombre de la base de datos en los factores desencadenantes para mí.

mysqldump ... opts ... | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' 
Cuestiones relacionadas