12 votos

¿Cómo copiar privilegios de usuarios con MySQL?

Tengo una instalación de MySQL con bases de datos y usuarios que tengo que migrar a una nueva instalación de MySQL. Puedo usar phpMyAdmin para exportar y luego importar las bases de datos/tablas, pero no sé de nada que mueven los usuarios y los permisos. ¿Cómo puedo hacerlo fácilmente?

18voto

Zoredache Puntos 84524

Un script como este va a utilizar mysql, el cliente cli para imprimir una serie de instrucciones grant usted tendría que usar para recrear las cuentas de usuario. Este comando funciona mejor si tienes tu base de datos de credenciales almacenadas en usted .mi.cnf

#!/bin/bash
# adapted from (http://www.pyrosoft.co.uk/blog/2006/10/18/show-grants-for-all-users-on-mysql/)
(
 mysql --batch --skip-column-names -e "SELECT user, host FROM user" mysql 
) | while read user host
do
  echo "# $user @ $host"
  mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
done

Si usted está saltando de una versión de mysql a otro puede que quiera usar este en lugar de un simple volcado de la base de datos mysql. El esquema de la base de datos mysql en ocasiones se actualiza.

Esto también le permitirá elegir y seleccionar las cuentas que desea volver a crear, si hay algún resto que te gustaría eliminar.


Hace poco estuve usando esto en un usuario que incluye espacios en los nombres, que confunde read, desde IFS por defecto incluye el carácter de espacio en blanco como separador. Mi nuevo y mejorado comando, que parecía funcionar mejor en los sistemas de extraños nombres de usuario.

IFS=$'\t'; while read user host; do
  echo "user:$user host:$host"
  mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
  echo ""
done < <(mysql --batch --skip-column-names -e "SELECT user, host FROM mysql.user")

4voto

RolandoMySQLDBA Puntos 10660

Esto creará un SHOW GRANTS; archivo para cada usuario.

Entonces, el eco de cada usuario SHOW GRANTS; y añadir un punto y coma para cada línea.

MYSQL_CONN="-uroot -prootpassword"
SQLSTMT="SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';')"
SQLSTMT="${SQLSTMT} FROM mysql.user WHERE user<>''"
mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" > /tmp/ShowGrants.sql
mysql ${MYSQL_CONN} -ANe < /tmp/ShowGrants.sql | sed 's/$/;/g' > MySQLUserGrants.sql
rm -f /tmp/ShowGrants.sql

También puede descargar y utilizar estas herramientas para hacer la misma cosa:

Darle una oportunidad !!!

3voto

pkaeding Puntos 467

Creo que debe ser capaz de migrar estos datos de copia de seguridad arriba y restaurando el mysql base de datos.

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: