¿Cómo copiar privilegios de usuario con MySQL?

¿Cómo copiar privilegios de usuario con MySQL?

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

Respuesta1

Un script como este utilizará el cliente cli de mysql para imprimir una serie de declaraciones de concesión que necesitaría utilizar para recrear las cuentas de usuario. Este comando funcionará mejor si tiene las credenciales de su base de datos almacenadas en su .my.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 está saltando de una versión de MySQL a otra, es posible que desee utilizar esto en lugar de un simple volcado de la base de datos MySQL. El esquema de la base de datos mysql se actualiza ocasionalmente.

Esto también le permitirá elegir las cuentas que desea recrear, si hay algún problema que le gustaría eliminar.


Recientemente estuve usando esto en un usuario que incluía espacios en los nombres, lo que confundía read, ya que IFS incluye de forma predeterminada el carácter de espacio como separador. Mi comando nuevo y mejorado, que parecía funcionar mejor en sistemas con nombres de usuario extraños.

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")

Respuesta2

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

Luego, haga eco de cada usuario SHOW GRANTS;y agregue un punto y coma a 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} -AN < /tmp/ShowGrants.sql | sed 's/$/;/g' > MySQLUserGrants.sql
rm -f /tmp/ShowGrants.sql

También puedes descargar y utilizar estas herramientas para hacer lo mismo:

Darle una oportunidad !!!

Respuesta3

Creo que debería poder migrar estos datos haciendo una copia de seguridad y restaurando la mysqlbase de datos.

información relacionada