Enseñarle cómo usar MySQL con elegancia para hacer una copia de seguridad de la información relacionada con la cuenta

Recientemente, encontré el problema de la migración de instancias. Después de la migración de datos, los usuarios y permisos de la base de datos necesitan ser migrados. Cuando hago copias de seguridad lógicas, normalmente excluyo la biblioteca del sistema MySQL para que la información relacionada con el usuario de la base de datos no se incluya en la copia de seguridad. En este momento, si desea migrar información relacionada con el usuario, puede usar las siguientes tres soluciones. De manera similar, también podemos usar las siguientes tres soluciones para hacer una copia de seguridad de la información relacionada con la cuenta de la base de datos. (La solución en este artículo es para la versión MySQL 5.7, otras versiones son ligeramente diferentes)

1. La lógica de mysqldump exporta información relacionada con el usuario

Sabemos que las contraseñas de los usuarios de la base de datos y la información relacionada con los permisos se almacenan en la biblioteca del sistema mysql. Use mysqldump para exportar los datos de la tabla relacionada. Si es necesario migrar usuarios, podemos insertar estos datos en otra instancia según sea necesario. Demostremos a continuación:

#Exportar solo los datos de la tabla user, db, tables_priv en la biblioteca mysql 
# Si tiene la 
autorización de la columna del equipo de la aguja, puede exportar los datos de la tabla columnas_priv # Si la base de datos está habilitada para la exportación GTID, es mejor agregar --set-gtid-purged = OFF 
mysqldump -uroot -proot mysql user db tables_priv -t --skip-extended-insert> /tmp/user_info.sql # 
 
Información específica exportada 
- 
- Volcado de datos para la tabla `user` 
- BLOQUEAR 
 
TABLAS` user` WRITE ; 
/ *! 40000 ALTER TABLE `user` DISABLE KEYS * /; 
INSERT INTO` user` VALUES ('%', 'root', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y ',' Y ',' Y ',' Y ',' Y ',' Y ',' Y ',' Y ',' Y ',' Y ',' Y ',' Y ','', _binary '', _binary '', _binary '', 0,0,0,0, 'mysql_native_password', '* 
81F5E21E35407D884A6CD4A731AEBFB6AF209E1B', 'N', '2019-03-06 03: 03: 15', NULL ,'NORTE');
INSERT INTO `user` VALUES ('localhost', 'mysql.session', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', ' N ',' N ',' N ',' N ',' N ',' N ',' N ',' Y ',' N ',' N ',' N ',' N ',' N ' , 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', _ binario '', _binario '', _binario '', 0, 0,0,0, 'mysql_na 
tive_password', '* THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE', 'N', '2019-03-06 02: 57: 40', NULL, 'Y'); 
INSERT INTO `user` VALUES ('localhost', 'mysql.sys', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', ' N ',' N ',
INSERT INTO `user` VALUES ('%', 'test', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N' , 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', ' N ',' N ',' N ',' N ',' N ',' N ',' N ',' N ',' ', _ binario' ', _binario' ', _binario' ', 0,0, 0,0, 'mysql_native_password', '* 
94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29', 'N', '2019-04-19 06: 24: 54', NULL, 'N'); 
INSERT INTO `user` VALUES ('%', 'read', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N' , 'N', 'N', 'N', '
INSERT INTO `user` VALUES ('%', 'test_user', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N' , 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', ' N ',' N ',' N ',' N ',' N ',' N ',' N ',' N ',' ', _ binario' ', _binario' ', _binario' ', 0,0, 0,0, 'mysql_native_passwor 
d', '* 8A447777509932F0ED07ADB033562027D95A0F17', 'N', '2019-04-19 06: 29: 38', NULL, 'N'); 
/ *! 40000 ALTER TABLE `usuario` ENABLE KEYS * /; 
DESBLOQUEAR TABLAS; 
 
- 
- Volcado de datos para la tabla `db`  
-  -  -
 
LOCK TABLES` db` WRITE; 
/ *! 40000 ALTER TABLE `db` DESHABILITAR TECLAS * /; 
INSERT INTO `db` VALUES ('localhost', 'performance_schema', 'mysql.session', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', ' N ',' N ',' N ',' N ',' N ',' N ',' N ',' N ',' N ',' N ',' N ',' N ');
INSERT INTO `db` VALUES ('localhost', 'sys', 'mysql.sys', 'N', 'N', 'N', 'N', 'N', 'N', 'N', ' N ',' N ',' N ',' N ',' N ',' N ',' N ',' N ',' N ',' N ',' N ',' Y '); 
INSERT INTO `db` VALUES ('%', 'test_db', 'test', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', 'N' , 'N', 'Y', 'N', 'N', 'Y', 'Y', 'N', 'N', 'Y', 'N', 'N'); 
/ *! 40000 ALTER TABLE `db` HABILITAR TECLAS * /; 
DESBLOQUEAR TABLAS; 
 
- 
- Volcado de datos para la tabla `tables_priv` 
- 
 
LOCK TABLES` tables_priv` WRITE; 
/ *! 40000 ALTER TABLE `tables_priv` DISABLE KEYS * /; 
INSERT INTO `tables_priv` VALUES ('localhost', 'mysql', 'mysql.session', 'user', 'boot @ Connecting Host', '0000-00-00 00:00:00', 'Seleccionar', ' ');
INSERT INTO `tables_priv` VALUES ('localhost', 'sys', 'mysql.sys', 'sys_config', 'root @ localhost', '2019-03-06 02:57:40', 'Seleccionar', '' ); 
INSERT INTO `tables_priv` VALUES ('%', 'test_db', 'test_user', 't1', 'root @ localhost', '0000-00-00 00:00:00', 'Seleccionar, Insertar, Actualizar, Eliminar ',' '); 
/ *! 40000 ALTER TABLE `tables_priv` ENABLE KEYS * /; Eliminar',''); / *! 40000 ALTER TABLE `tables_priv` ENABLE KEYS * /; Eliminar',''); / *! 40000 ALTER TABLE `tables_priv` ENABLE KEYS * /;
DESBLOQUEAR TABLAS; #Inserte los 
 
datos requeridos en la nueva instancia para crear el mismo usuario y permisos

2. Exportación de secuencias de comandos personalizadas

Primero empalme la declaración para crear un usuario:

SELECT 
    CONCAT ( 
        'crear usuario \' ', 
  usuario, 
  ' \ '@ \' ', 
  Host, 
  ' \ '' 
  'IDENTIFICADO POR CONTRASEÑA \' ', 
  cadena_de_autenticación, 
        ' \ ';' 
    ) AS CreateUserQuery 
FROM 
    mysql`user` 
DONDE 
    `User` NOT IN ( 
        'mysql.session', 
        'mysql.sys' 
    ); #Como 
     
resultado, se puede crear un usuario con la misma contraseña después de ejecutar la nueva instancia 
mysql> SELECT 
  -> CONCAT ( 
  -> 'create user \' ', 
  -> usuario, 
  -> '\' @ \ '', 
  -> Host, 
  -> '\' '
  -> 'IDENTIFICADO POR CONTRASEÑA \' ', 
  -> FROM 
  -> cadena_autenticación, 
  ->' \ ';'
  ->) AS CreateUserQuery
| crear usuario 'prueba' @ '%' IDENTIFICADO POR CONTRASEÑA '* 94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'; | 
| crear usuario 'leer' @ '%' IDENTIFICADO POR CONTRASEÑA '* 2158DEFBE7B6FC24585930DF63794A2A44F22736'; |
  -> mysql`user` 
  -> DONDE 
  -> `Usuario` NO ESTÁ EN ( 
  -> 'mysql.session', 
  -> 'mysql.sys' 
  ->); 
+ ------------------------------------------------- ------------------------------------------------ + 
| CreateUserQuery | 
+ ------------------------------------------------- ------------------------------------------------ + 
| crear usuario 'root' @ '%' IDENTIFICADO POR CONTRASEÑA '* 81F5E21E35407D884A6CD4A731AEBFB6AF209E1B'; | | 
| crear usuario 'test_user' @ '%' IDENTIFICADO POR CONTRASEÑA '* 8A447777509932F0ED07ADB033562027D95A0F17'; | 
+ ------------------------------------------------- ------------------------------------------------ + 
4 filas en conjunto (0,00 seg)

Luego, exporte los permisos de usuario a través del script :

# 导出 权限 脚本
#! / Bin / bash 
#Función exportar privilegios de usuario 
  
pwd = root 
expgrants () 
{ 
 mysql -B -u'root '-p $ {pwd} -N $ @ -e "SELECT CONCAT (' MOSTRAR SUBVENCIONES PARA '' ', usuario,' '' @ '' ', host,' ''; ') AS consulta DE mysql.user "| \ 
 mysql -u'root '-p $ {pwd} $ @ | \ 
 sed 's / \ (GRANT. * \) / \ 1; /; s / ^ \ (Subvenciones para. * \) / - \ 1 /; / - / {x; p; x;}' 
} 
  
expgrants> /tmp/grants.sql 
echo "privilegios de descarga;" >> /tmp/grants.sql 
 
# 执行 脚本 后 结果
- Concede para leer @% 
GRANT SELECT ON *. * TO 'read' @ '%'; 
 
- Otorga a root @% 
GRANT TODOS LOS PRIVILEGIOS EN *. * TO 'root' @ '%' CON OPCIÓN DE SUBVENCIÓN; 
 
- Subvenciones para test @% 
GRANT USAGE ON *. * TO 'test' @ '%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, EJECUTE, CREATE VIEW, SHOW VIEW ON `test_db`. * TO 'test' @ '%'; 
 
- Subvenciones para test_user @% 
GRANT USAGE ON *. * TO 'test_user' @ '%'; 
GRANT SELECT, INSERT, UPDATE, DELETE ON `test_db``t1` TO 'test_user' @ '%'; 
 
- Subvenciones para mysql.session@localhost 
GRANT SUPER ON *. * TO 'mysql.session'@'localhost'; 
GRANT SELECT ON `performance_schema`. * TO 'mysql.session'@'localhost'; 
GRANT SELECT ON `mysql``user` TO 'mysql.session'@'localhost'; 
 
- Subvenciones para mysql.sys@localhost 
SUBVENCIÓN DE USO EN *. * TO 'mysql.sys'@'localhost'; 
GRANT TRIGGER ON `sys`. * TO 'mysql.sys' @ ' localhost '; 
GRANT SELECT ON `sys``sys_config` TO 'mysql.sys'@'localhost';

3. mysqlpump exporta usuarios directamente

mysqlpump es un derivado de mysqldump y una herramienta para la copia de seguridad lógica de MySQL. Hay más opciones disponibles en mysqlpump, que pueden exportar directamente declaraciones de creación de usuarios y declaraciones habilitadas. Demostremos a continuación:

# exclude 
-basesExcluir bases de datos - usuarios Especifique qué usuarios excluir de la exportación user exclude-users #También puede agregar el parámetro --add-drop-user para generar una declaración de usuario drop 
#Si la base de datos está habilitada para la exportación GTID, debe agregar --set-gtid -purged = OFF 
mysqlpump -uroot -proot --exclude -bases =% --users --exclude-users = mysql.session, mysql.sys> /tmp/user.sql #exported 
 
result 
- Volcado creado por MySQL pump utilidad, versión: 5.7.23, linux -glibc2.12 (x86_64) 
- Hora de inicio del volcado: viernes 19 de abril 15:03:02 2019 
- Versión del servidor: 5.7.23 
 
SET @OLD_UNIQUE_CHECKS = @@ UNIQUE_CHECKS, UNIQUE_CHECKS = 0 ; 
SET @OLD_FOREIGN_KEY_CHECKS = @@ FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0; 
SET @OLD_SQL_MODE = @@ SQL_MODE; 
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 
SET @@ SESSION_B.SIN_LOG;
SET @OLD_TIME_ZONE = @@ TIME_ZONE; 
SET TIME_ZONE = '+ 00:00'; 
SET @OLD_CHARACTER_SET_CLIENT = @@ CHARACTER_SET_CLIENT; 
SET @OLD_CHARACTER_SET_RESULTS = @@ CHARACTER_SET_RESULTS; 
SET @OLD_COLLATION_CONNECTION = @@ COLLATION_CONNECTION; 
SET NAMES utf8mb4; 
CREAR USUARIO 'leer' @ '%' IDENTIFICADO CON 'mysql_native_password' AS '* 2158DEFBE7B6FC24585930DF63794A2A44F22736' NINGUNA CONTRASEÑA EXPIRA DESBLOQUEO DE CUENTA POR DEFECTO; 
GRANT SELECT ON *. * TO 'read' @ '%'; 
CREAR USUARIO 'root' @ '%' IDENTIFICADO CON 'mysql_native_password' AS '* 81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' NINGUNA CONTRASEÑA EXPIRA DESBLOQUEO DE CUENTA POR DEFECTO; 
OTORGAR TODOS LOS PRIVILEGIOS EN *. * A 'root' @ '%'
CREAR USUARIO 'prueba' @ '%' IDENTIFICADO CON 'mysql_native_password' AS '* 94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' NINGUNA CONTRASEÑA EXPIRA DESBLOQUEO DE CUENTA POR DEFECTO; 
CONCEDER USO EN *. * TO 'test' @ '%'; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, EJECUTE, CREATE VIEW, SHOW VIEW ON `test_db`. * TO 'test' @ '%'; 
CREAR USUARIO 'test_user' @ '%' IDENTIFICADO CON 'mysql_native_password' AS '* 8A447777509932F0ED07ADB033562027D95A0F17' NINGUNA CONTRASEÑA EXPIRA DESBLOQUEO DE CUENTA POR DEFECTO; 
OTORGAR USO EN *. * TO 'test_user' @ '%'; 
GRANT SELECT, INSERT, UPDATE, DELETE ON `test_db``t1` TO 'test_user' @ '%'; 
SET TIME_ZONE = @ OLD_TIME_ZONE; 
SET CHARACTER_SET_CLIENT = @ OLD_CHARACTER_SET_CLIENT; 
SET CHARACTER_SET_RESULTS = @ OLD_CHARACTER_SET_RESULTS;
SET COLLATION_CONNECTION = @ OLD_COLLATION_CONNECTION; 
SET FOREIGN_KEY_CHECKS = @ OLD_FOREIGN_KEY_CHECKS; 
SET UNIQUE_CHECKS = @ OLD_UNIQUE_CHECKS; 
SET SQL_MODE = @ OLD_SQL_MODE; 
- Fecha de finalización del volcado de 2019 y hora de finalización de la 
 
exportación: La declaración de empoderamiento es muy fácil de usar. 
#Mysqlpump Para un uso detallado, consulte: 
https://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html

para resumir:

Este artículo presenta tres esquemas para exportar la información del usuario de la base de datos, y cada esquema recibe un guión y se demuestra. Al mismo tiempo, estos tres programas se pueden utilizar como scripts para realizar copias de seguridad de los permisos de usuario de la base de datos después de un pequeño encapsulado. Tal vez tenga otras soluciones, como: pt-show-grant, etc. Bienvenido a compartirlas, y también puede recopilarlas o transformarlas en scripts que sean más adecuados para usted. Quizás las use en algún momento, especialmente si hay muchos usuarios en una instancia. Cuándo, encontrará que el script es mejor para usar.

Lo anterior son los detalles de cómo MySQL realiza una elegante copia de seguridad de la información relacionada con la cuenta

La dirección de este artículo: https://www.linuxprobe.com/mysql-linux-one.html

Supongo que te gusta

Origin blog.csdn.net/u014389734/article/details/108571915
Recomendado
Clasificación