91 votos

¿Cómo puedo exportar los privilegios de MySQL y luego importar a un nuevo servidor?

Sé cómo exportar/importar las bases de datos usando mysqldump y eso está bien, pero ¿cómo puedo obtener los privilegios en el nuevo servidor.

Para obtener puntos extra, hay un par de bases de datos existentes en el nuevo ya, ¿cómo puedo importar los servidores antiguos privilegios sin bombardear la par de unos.

Antiguo servidor: 5.0.67-comunidad

Nuevo servidor: 5.0.51 a-24+lenny1

EDIT: tengo un volcado de la base de datos 'mysql' desde el Servidor Antiguo y ahora quieren saber la forma correcta de combinar con el 'mysql' db en el Nuevo Servidor.

Traté de una escalera 'Importar' con phpMyAdmin y terminó con un error sobre un duplicado (uno que ya he migrado de forma manual).

Alguien tiene una elegante forma de la fusión de los dos 'mysql' bases de datos?

173voto

Bruno Bronosky Puntos 2469

No se metan con la base de datos mysql. Hay muchas más cosas que sólo la tabla de usuarios. Su mejor apuesta es el "SHOW de SUBVENCIONES PARA el" comando. Tengo un montón de CLI mantenimiento alias y funciones en mi .bashrc (en realidad mi .bash_aliases que me de la fuente en mi .bashrc). Esta función:

mygrants()
{
  mysql -B -N $@ -e "SELECT DISTINCT CONCAT(
    'SHOW GRANTS FOR \'', user, '\'@\'', host, '\';'
    ) AS query FROM mysql.user" | \
  mysql $@ | \
  sed 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/## \1 ##/;/##/{x;p;x;}'
}

El primer comando de mysql utiliza el lenguaje SQL para generar SQL válida que se transfiere a la segunda de comandos de mysql. La salida se canaliza a través de la sed para agregar comentarios bastante.

El $@ en el comando le permitirá llamar como: mygrants --host=prod-db1 --user=admin --password=secreto

Usted puede utilizar su unix completo kit de herramientas sobre esta así:

mygrants --host=prod-db1 --user=admin --password=secret | grep rails_admin | mysql --host=staging-db1 --user=admin --password=secret

Ese es EL camino correcto para mover a los usuarios. MySQL ACL se modifica con puro SQL.

51voto

RolandoMySQLDBA Puntos 10660

Hay dos métodos para la extracción de SQL Donaciones de una Instancia de MySQL

MÉTODO #1

Usted puede utilizar pt-show-subvenciones de Percona Toolkit

MYSQL_CONN="-uroot -ppassword"
pt-show-grants ${MYSQL_CONN} > MySQLUserGrants.sql

MÉTODO #2

Usted puede emular pt-show-grants con el siguiente

MYSQL_CONN="-uroot -ppassword"
mysql ${MYSQL_CONN} --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql ${MYSQL_CONN} --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql

Cualquier método producirá una pura SQL dump de la base de subvenciones. Todo lo que hay que hacer es ejecutar la secuencia de comandos en un servidor nuevo:

mysql -uroot -p -A < MySQLUserGrants.sql

Darle una oportunidad !!!

7voto

MrkiMile Puntos 51

O bien, utilizar percona-toolkit (ex maatkit) y el uso de pt-show-grants (o mk-show-grants) para ese propósito. Sin necesidad de engorrosos scripts y/o procedimientos almacenados.

6voto

nedm Puntos 4392

Usted puede mysqldump el 'mysql' de la base de datos e importar a la nueva; un flush_privileges o será necesario reiniciar el equipo y en el que definitivamente se desea realizar una copia de la existente mysq db primero.

Para evitar la eliminación de su actual privilegios, asegúrese de anexar, en lugar de reemplazar filas en el privilegio de tablas (db, columns_priv, host, func, etc.).

4voto

rmldj Puntos 71

Richard Bronosky la respuesta fue muy útil para mí. Muchas gracias!!!

Aquí hay una pequeña variación que fue útil para mí. Es útil para la transferencia de usuarios, por ejemplo, entre dos de Ubuntu instalaciones de ejecutar phpmyadmin. Acaba de volcar privilegios para todos los usuarios, aparte de root, phpmyadmin y debian-sys-maint. El código a continuación

mygrants()
{
mysql -B -N $@ -e "SELECT DISTINCT CONCAT(
'SHOW GRANTS FOR ''', user, '''@''', host, ''';'
) AS query FROM mysql.user WHERE user NOT IN ('root','phpmyadmin','debian-sys-maint')"  | \
mysql $@ | \
sed 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/## \1 ##/;/##/{x;p;x;}'
}

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: