Sé cómo exportar / importar las bases de datos usando mysqldump y está bien, pero ¿cómo obtengo los privilegios en el nuevo servidor?
Para obtener puntos adicionales, ya hay un par de bases de datos existentes en la nueva, ¿cómo importo los privilegios de los servidores antiguos sin eliminar la pareja de los existentes?
Servidor antiguo: 5.0.67-comunidad
Nuevo servidor: 5.0.51a-24 + lenny1
EDITAR: Tengo un volcado de la base de datos 'mysql' del servidor antiguo y ahora quiero saber la forma correcta de fusionarme con la base de datos 'mysql' en el servidor nuevo.
Intenté una 'Importación' directa usando phpMyAdmin y terminé con un error con respecto a un duplicado (uno que ya he migrado manualmente).
¿Alguien tiene una forma elegante de fusionar las dos bases de datos 'mysql'?
Respuestas:
No te metas con el mysql db. Allí hay mucho más que solo la tabla de usuarios. Su mejor apuesta es el comando " MOSTRAR SUBVENCIONES PARA". Tengo muchos alias y funciones de mantenimiento de CLI en mi .bashrc (en realidad, mis .bash_aliases que obtengo en mi .bashrc). Esta función:
El primer comando mysql usa SQL para generar SQL válido que se canaliza al segundo comando mysql. La salida se canaliza a través de sed para agregar bonitos comentarios.
El $ @ en el comando le permitirá llamarlo como: mygrants --host = prod-db1 --user = admin --password = secret
Puede usar su kit completo de herramientas de Unix en esto de la siguiente manera:
Esa es LA forma correcta de mover a los usuarios. Su ACL MySQL se modifica con SQL puro.
fuente
user
tabla un usuario con host%
, pero luego en ladb
tabla tiene entradas dondehost
es un valor explícito, esas entradas en ladb
tabla no se recuperan utilizando este método.-r
al segundo comando mysql en la función y no se generarán los escapes doblesmysql
. por ejemplo:mysql -r $@
Hay dos métodos para extraer subvenciones SQL de una instancia de MySQL
MÉTODO 1
Puede usar pt-show- grant de Percona Toolkit
MÉTODO # 2
Puedes emular
pt-show-grants
con lo siguienteCualquiera de los métodos producirá un volcado de SQL puro de las concesiones de MySQL. Todo lo que queda por hacer es ejecutar el script en un nuevo servidor:
Darle una oportunidad !!!
fuente
La respuesta de Richard Bronosky fue extremadamente útil para mí. ¡¡¡Muchas gracias!!!
Aquí hay una pequeña variación que me fue útil. Es útil para transferir usuarios, por ejemplo, entre dos instalaciones de Ubuntu que ejecutan phpmyadmin. Simplemente descargue los privilegios para todos los usuarios, aparte de root, phpmyadmin y debian-sys-maint. El código es entonces
fuente
grep rails_admin
puedo inferir cómo hacer esto sin hacer una función especial para cada caso límite. Utilice la opción de "inversión" de grep de la siguiente manera:mygrants --host=prod-db1 --user=admin --password=secret | grep -Ev 'root|phpmyadmin|debian-sys-maint' | mysql --host=staging-db1 --user=admin --password=secret
O utilice percona-toolkit (anteriormente maatkit) y use
pt-show-grants
(omk-show-grants
) para ese propósito. No hay necesidad de scripts engorrosos y / o procedimientos almacenados.fuente
Puede mysqldump la base de datos 'mysql' e importar a la nueva; se requerirá un flush_privileges o un reinicio y definitivamente querrá hacer una copia de seguridad del mysq db existente primero.
Para evitar eliminar sus privilegios existentes, asegúrese de agregar en lugar de reemplazar filas en las tablas de privilegios (db, columnas_priv, host, func, etc.).
fuente
También puede hacerlo como un procedimiento almacenado:
y llámalo con
luego canalice la salida a través del comando Richards sed para obtener una copia de seguridad de los privilegios.
fuente
Si bien parece que la respuesta de @Richard Bronosky es la correcta, me encontré con esta pregunta después de intentar migrar un conjunto de bases de datos de un servidor a otro y la solución fue mucho más simple:
En este punto, todos mis datos eran visibles si iniciaba sesión como
root
, lamysql.user
tabla tenía todo lo que esperaba, pero no podía iniciar sesión como ninguno de los otros usuarios y encontré esta pregunta asumiendo que tendría que volver emitir lasGRANT
declaraciones.Sin embargo, resulta que el servidor mysql simplemente necesitaba reiniciarse para que los privilegios actualizados en las
mysql.*
tablas tuvieran efecto:¡Ojalá eso ayude a alguien más a lograr lo que debería ser una tarea simple!
fuente
¿Qué tal un script PHP? :)
Vea la fuente en este script y tendrá todos los privilegios enumerados:
fuente
cree un archivo de script de shell con el siguiente código:
############################################### # #**** luego ejecútelo en el shell de esta manera: se le pedirá que ingrese la contraseña de root dos veces y luego se mostrará GRANTS SQL en la pantalla. ****
fuente
One-liner haciendo más o menos lo mismo que lo increíble
pt-show-grants
:Basado solo en herramientas Unix, no se necesita software adicional.
Ejecutar desde un shell bash, se supone que tiene un trabajo
.my.cnf
dondemysql root
se puede leer la contraseña de su usuario.fuente