GNU/Linux >> Tutoriales Linux >  >> Linux

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

Solución 1:

No te metas con la base de datos mysql. Hay mucho más en juego allí 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:

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

El primer comando mysql usa SQL para generar SQL válido que se canaliza al segundo comando mysql. Luego, la salida se canaliza a través de sed para agregar bonitos comentarios.

El [email protected] 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 así:

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

Esa es LA forma correcta de mover a los usuarios. Su ACL de MySQL se modifica con SQL puro.

Solución 2:

Hay dos métodos para extraer SQL Grants de una instancia de MySQL

MÉTODO #1

Puede usar pt-show-grants de Percona Toolkit

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

MÉTODO #2

Puedes emular pt-show-grants con lo 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

Cualquiera 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:

mysql -uroot -p -A < MySQLUserGrants.sql

Pruébalo !!!

Solución 3:

La respuesta de Richard Bronosky fue extremadamente útil para mí. ¡¡¡Muchas gracias!!!

Aquí hay una pequeña variación que fue útil para mí. Es útil para transferir usuarios, p. entre dos instalaciones de Ubuntu que ejecutan phpmyadmin. Simplemente descargue los privilegios para todos los usuarios además de root, phpmyadmin y debian-sys-maint. El código es entonces

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

Solución 4:

O utilice percona-toolkit (antiguo maatkit) y use pt-show-grants (o mk-show-grants ) para ese propósito. No hay necesidad de engorrosos scripts y/o procedimientos almacenados.

Solución 5:

Puede mysqldump la base de datos 'mysql' e importar a la nueva; se requerirá un flush_privileges o reiniciar y definitivamente querrá hacer una copia de seguridad de la base de datos mysq existente primero.

Para evitar eliminar sus privilegios existentes, asegúrese de agregar filas en lugar de reemplazarlas en las tablas de privilegios (db, column_priv, host, func, etc.).


Linux
  1. Cómo agregar un nuevo usuario de MySQL y otorgar privilegios de acceso

  2. Cómo exportar e importar configuraciones de DNS en CloudFlare

  3. ¿Cómo descargar un archivo de un servidor Ftp y luego eliminarlo automáticamente del servidor una vez que se completa la descarga?

  4. ¿Cómo puedo ejecutar código PHP desde la línea de comandos?

  5. ¿Cómo obligo a Linux a volver a adquirir una nueva dirección IP del servidor DHCP?

Cómo exportar e importar máquinas virtuales VirtualBox

Cómo obtener el mejor rendimiento del servidor Nginx

Cómo instalar Nginx, MySQL y PHP (LEMP) en un servidor Ubuntu 15.04

Cómo importar una exportación de VM en Windows Server 2012

Cómo instalar y usar MySQL Workbench en Ubuntu 18.04

¿Cómo puedo obtener mensajes de registro del servidor LAMP en Ubuntu 10.04?