Ensina como usar o MySQL para fazer backup de informações relacionadas à conta.

Recentemente, encontrei o problema de migração de instâncias. Após a migração de dados, os usuários do banco de dados e permissões precisam ser migrados. Ao fazer backups lógicos, geralmente excluo a biblioteca do sistema MySQL para que as informações relacionadas ao usuário do banco de dados não sejam incluídas no backup. No momento, se você deseja migrar informações relacionadas ao usuário, pode usar as três soluções a seguir: Da mesma forma, também podemos usar as três soluções a seguir para fazer backup de informações relacionadas à conta do banco de dados. (A solução neste artigo é para a versão MySQL 5.7, outras versões são ligeiramente diferentes)

1. A lógica do mysqldump exporta informações relacionadas ao usuário

Sabemos que as senhas dos usuários do banco de dados e informações relacionadas às permissões são armazenadas na biblioteca do sistema mysql. Use o mysqldump para exportar os dados da tabela relacionada. Se houver necessidade de migrar usuários, podemos inserir esses dados em outra instância, conforme necessário. Vamos demonstrar a seguir:

#Exportar apenas os dados da tabela user, db, tables_priv na biblioteca mysql 
# Se você tiver a 
autorização da coluna da equipe da agulha, você pode exportar os dados da tabela column_priv # Se o banco de dados estiver habilitado para exportação GTID, é melhor adicionar --set-gtid-purged = OFF 
mysqldump -uroot -proot mysql user db tables_priv -t --skip-extended-insert> /tmp/user_info.sql # 
 
Informações específicas exportadas 
- 
- Dumping de dados para a tabela `user` 
- 
 
LOCK TABLES` user` WRITE ; 
/ *! 40000 ALTER TABLE `user` DESATIVAR TECLAS * /; 
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 , 'N');
INSERT INTO `user` VALUES ('localhost', 'mysql.session', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', ' N ',' N ',' N ',' N ',' N ',' N ',' N ',' S ',' N ',' N ',' N ',' N ',' N ' , 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', _ binary '', _binary '', _binary '', 0, 0,0,0, 'mysql_na 
tive_password', '* ESSANOTAVALIDPASSWORDTHATCANBEUSEDHERE', '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 ',' ', _ binário' ', _binário' ', _binário' ', 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 ',' ', _ binário' ', _binário' ', _binário' ', 0,0,0,0,' mysql_native_passwor d ',' * 8A447777509932F0ED07ADB033562027D95A0F17 ' , 'N', '19/04/2019 06: 29: 38', NULL, 'N'); 
/ *! 40000 ALTER TABLE `user` ENABLE KEYS * /; 
UNLOCK TABLES; 
 
- 
- Dados de despejo para a tabela `db` 
- 0,0,0,0, 'mysql_native_passwor d', '* 8A447777509932F0ED07ADB033562027D95A0F17', 'N', '2019-04-19 06: 29: 38', NULL, 'N'); / *! 40000 ALTER TABLE `user` ENABLE KEYS * /; UNLOCK TABLES; - - Dados de despejo para a tabela `db` - 0,0,0,0, 'mysql_native_passwor d', '* 8A447777509932F0ED07ADB033562027D95A0F17', 'N', '2019-04-19 06: 29: 38', NULL, 'N'); / *! 40000 ALTER TABLE `user` ENABLE KEYS * /; UNLOCK TABLES; - - Dados de despejo para a tabela `db` -
 
LOCK TABLES `db` WRITE; 
/ *! 40000 ALTER TABLE `db` DISABLE KEYS * /; 
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', 'S', 'N', 'N', 'S', 'S', 'N', 'N', 'S', 'N', 'N'); 
/ *! 40000 ALTER TABLE `db` ENABLE KEYS * /; 
UNLOCK TABLES; 
 
- 
- Dumping de dados para a tabela `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', 'Select', ' ');
INSERT INTO `tables_priv` VALUES ('localhost', 'sys', 'mysql.sys', 'sys_config', 'root @ localhost', '2019-03-06 02:57:40', 'Select', '' ); 
INSERT INTO `tables_priv` VALUES ('%', 'test_db', 'test_user', 't1', 'root @ localhost', '0000-00-00 00:00:00', 'Select, Insert, Update, Delete ',' '); 
/ *! 40000 ALTER TABLE `tables_priv` ENABLE KEYS * /; / *! 40000 ALTER TABLE `tables_priv` ENABLE KEYS * /; / *! 40000 ALTER TABLE `tables_priv` ENABLE KEYS * /;
UNLOCK TABLES; # Insira os 
 
dados necessários na nova instância para criar o mesmo usuário e permissões

2. Exportação de script personalizado

Primeiro divida a instrução para criar um usuário:

SELECT 
    CONCAT ( 
        'criar usuário \' ', 
  usuário, 
  ' \ '@ \' ', 
  Host, 
  ' \ '' 
  'IDENTIFICADO POR SENHA \' ', 
  autenticação_string, 
        ' \ ';' 
    ) AS CreateUserQuery 
FROM 
    mysql.`user` 
ONDE 
    `User` NOT IN ( 
        'mysql.session', 
        'mysql.sys' 
    ); # Como 
     
resultado, um usuário com a mesma senha pode ser criado após a nova instância ser executada 
mysql> SELECT 
  -> CONCAT ( 
  -> 'create user \' ', 
  -> usuário, 
  -> '\' @ \ '', 
  -> Host, 
  -> '\' '
  -> 'IDENTIFICADO POR SENHA \' ', 
  -> DE 
  -> autenticação_string, 
  ->' \ ';'
  ->) AS CreateUserQuery
| criar usuário 'teste' @ '%' IDENTIFICADO POR SENHA '* 94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'; | 
| criar usuário 'ler' @ '%' IDENTIFICADO POR SENHA '* 2158DEFBE7B6FC24585930DF63794A2A44F22736'; |
  -> mysql.`user` 
  -> ONDE 
  -> `User` NOT IN ( 
  -> 'mysql.session', 
  -> 'mysql.sys' 
  ->); 
+ ------------------------------------------------- ------------------------------------------------ + 
| CreateUserQuery | 
+ ------------------------------------------------- ------------------------------------------------ + 
| criar usuário 'root' @ '%' IDENTIFICADO POR SENHA '* 81F5E21E35407D884A6CD4A731AEBFB6AF209E1B'; | | 
| criar usuário 'test_user' @ '%' IDENTIFICADO POR SENHA '* 8A447777509932F0ED07ADB033562027D95A0F17'; | 
+ ------------------------------------------------- ------------------------------------------------ + 
4 linhas em conjunto (0,00 s)

Em seguida, exporte as permissões do usuário por meio do script :

# 导出 权限 脚本
#! / Bin / bash 
#Function exportar privilégios de usuário 
  
pwd = root 
expgrants () 
{ 
 mysql -B -u'root '-p $ {pwd} -N $ @ -e "SELECT CONCAT (' MOSTRAR GRANTS PARA '' ', usuário,' '' @ '' ', host,' ''; ') AS query FROM mysql.user "| \ 
 mysql -u'root '-p $ {pwd} $ @ | \ 
 sed 's / \ (GRANT. * \) / \ 1; /; s / ^ \ (Concessões para. * \) / - \ 1 /; / - / {x; p; x;}' 
} 
  
expgrants> /tmp/grants.sql 
echo "liberar privilégios;" >> /tmp/grants.sql 
 
# 执行 脚本 后 结果
- Concessões para leitura @% 
GRANT SELECT ON *. * TO 'read' @ '%'; 
 
- Concessões para root @% 
GRANT ALL PRIVILEGES ON *. * TO 'root' @ '%' COM OPÇÃO DE CONCESSÃO; 
 
- Bolsas para teste @% 
GRANT USAGE ON *. * TO 'test' @ '%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, EXECUTE, CREATE VIEW, SHOW VIEW ON `test_db`. * TO 'test' @ '%'; 
 
- Concessões para test_user @% 
GRANT USAGE ON *. * TO 'test_user' @ '%'; 
GRANT SELECT, INSERT, UPDATE, DELETE ON `test_db`.`t1` TO 'test_user' @ '%'; 
 
- Concessões 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'; 
 
- Concessões para mysql.sys@localhost 
GRANT USAGE ON *. * 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 usuários diretamente

mysqlpump é um derivado do mysqldump e uma ferramenta para backup lógico do MySQL. Existem mais opções disponíveis no mysqlpump, que pode exportar diretamente instruções de criação de usuário e instruções habilitadas. Vamos demonstrar a seguir:

# exclude-databasesExclude databases - users Especifique quais usuários excluir da exportação user exclude-users 
#Você também pode adicionar o parâmetro --add-drop-user para gerar uma instrução drop user 
#Se o banco de dados estiver habilitado para exportação GTID, você deve adicionar --set-gtid -purged = OFF 
mysqlpump -uroot -proot --exclude-databases =% --users --exclude-users = mysql.session, mysql.sys> /tmp/user.sql #exported 
 
result 
- Dump criado pelo MySQL pump utilitário, versão: 5.7.23, linux -glibc2.12 (x86_64) 
- Horário de início do despejo: Sex 19 de abril 15:03:02 2019 
- Versão do 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.SQL_LOG_BIN = 0;
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; 
CRIAR USUÁRIO 'read' @ '%' IDENTIFICADO COM 'mysql_native_password' AS '* 2158DEFBE7B6FC24585930DF63794A2A44F22736' NÃO REQUER NENHUMA SENHA EXPIRE DEFAULT ACCOUNT UNLOCK; 
GRANT SELECT ON *. * TO 'read' @ '%'; 
CRIAR USUÁRIO 'root' @ '%' IDENTIFICADO COM 'mysql_native_password' AS '* 81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' NÃO REQUER NENHUMA SENHA EXPIRE DEFAULT ACCOUNT UNLOCK; 
GRANT ALL PRIVILEGES ON *. * TO 'root' @ '%'
CRIAR USUÁRIO 'test' @ '%' IDENTIFICADO COM 'mysql_native_password' AS '* 94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' NÃO REQUER NENHUMA SENHA EXPIRE DEFAULT ACCOUNT UNLOCK; 
GRANT USAGE ON *. * TO 'test' @ '%'; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, EXECUTE, CREATE VIEW, SHOW VIEW ON `test_db`. * TO 'test' @ '%'; 
CRIAR USUÁRIO 'test_user' @ '%' IDENTIFICADO COM 'mysql_native_password' AS '* 8A447777509932F0ED07ADB033562027D95A0F17' NÃO REQUER NENHUMA SENHA EXPIRE DEFAULT ACCOUNT UNLOCK; 
GRANT USAGE ON *. * 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; 
- Horário de término do despejo 201 # de 
 
criação do usuário : Sex. A declaração de capacitação é muito fácil de usar. 
#Mysqlpump Para uso detalhado, consulte: 
https://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html

Resumindo:

Este artigo apresenta três esquemas para exportar informações do usuário do banco de dados, e cada esquema recebe um script e é demonstrado. Ao mesmo tempo, esses três programas podem ser usados ​​como scripts para fazer backup das permissões do usuário do banco de dados após um pequeno encapsulamento. Talvez você tenha outras soluções, como: pt-show-grant, etc. Bem-vindo para compartilhá-los e também para coletá-los ou transformá-los em scripts que sejam mais adequados para você. Talvez você os use algum dia, especialmente se um exemplo tiver muitos usuários Quando, você descobrirá que o script é melhor para usar.

Acima estão os detalhes de como o MySQL faz backup de informações relacionadas à conta de maneira elegante

Este endereço de artigo: https://www.linuxprobe.com/mysql-linux-one.html

Acho que você gosta

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