服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - 如何备份MySQL的用户和权限?

如何备份MySQL的用户和权限?

2023-05-07 01:05未知服务器之家 Mysql

概述 对于mysql的备份,常见的有物理备份和逻辑备份。对于逻辑备份,我们常用的工具是mydump,它可以对库、表进行逻辑的备份。但是在我们的实际工作中,我们有时需要对用户和权限进行备份,下面分享一下实现的具体方法。

如何备份MySQL的用户和权限?

概述

对于mysql的备份,常见的有物理备份和逻辑备份。对于逻辑备份,我们常用的工具是mydump,它可以对库、表进行逻辑的备份。但是在我们的实际工作中,我们有时需要对用户和权限进行备份,下面分享一下实现的具体方法。

解决方案

1、使用mysqlpump实用程序(作为创建用户和授权语句)

[shell ~]$ mysqlpump -uUSER -p --exclude-databases=% --add-drop-user --users > /tmp/pump-all-users_privileges-timestamp.sql
Dump completed in 1364 milliseconds

示例输出:

[shell ~]$ head /tmp/pump-all-users_privileges-timestamp.sql

-- Dump created by MySQL pump utility, version: 5.7.21-20, Linux (x86_64)
-- Dump start time: Sun May 13 23:30:49 2018
-- Server version: 5.7.21
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;
DROP USER 'check'@'%';
CREATE USER 'check'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*B865CAE8F340F6CE1485A06F4492BB49718DF' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;
GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'check'@'%';

您还可以使用--exclude-users=[comma separated usernames]从备份中排除某些用户或--include-users=[comma separated usernames]仅将某些用户包含在备份中。

2、使用 Percona 工具包 ( pt-show-grants)

[shell ~]$ pt-show-grants -uUSER --ask-pass --drop > /tmp/ptshowgrants-all-users_privileges-timestamp.sql

示例输出:

[shell ~]$ head /tmp/ptshowgrants-all-users_privileges-timestamp.sql
-- Grants dumped by pt-show-grants
-- Dumped from server Localhost via UNIX socket, MySQL 5.7.21-20-log at 2018-05-13 23:39:55
DROP USER 'check'@'%';
DELETE FROM `mysql`.`user` WHERE `User`='check' AND `Host`='%';
-- Grants for 'check'@'%'
CREATE USER IF NOT EXISTS 'check'@'%';
ALTER USER 'check'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*B865CAE8F340F6CE1485A06F4492BB49718DF' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;
GRANT PROCESS, REPLICATION SLAVE, SELECT, SUPER ON *.* TO 'check'@'%';

同样,您也可以使用--only--ignore选项在备份中包含/排除特定用户。

注意: pt-show-grants 过去只打印导致恢复出现问题的授权语句(没有创建用户信息),尤其是在启用了sql 模式的情况下。 虽然 正如您从输出中看到的那样 - percona 团队已经解决了这个问题,但我仍然看到不必要的语句,例如从 mysql.user 表中删除用户记录NO_AUTO_CREATE_USERS 、DROP USER。

如何恢复

您可以通过以下命令简单地从上述任一方法恢复权限:

mysql -uUSER -p < user_privileges.sql

结论

  • 使用 mysqlpump 或 pt-show-grants 备份用户和权限——作为 Create User 和 grant 语句——比备份 mysql 系统数据库中的授权表要好得多。
  • 建议在正常备份计划作业中运行上述任一命令。

延伸 · 阅读

精彩推荐
  • MysqlMysql数据库手动及定时备份步骤

    Mysql数据库手动及定时备份步骤

    最近刚好用到了数据库备份,想着还有个别实习或者刚工作的小伙伴一个drop不小心删表、删库,心内慌得一批不知道该怎么办,就打算跑路了,学会这个小...

    大数据_小袁9482021-12-02
  • Mysql利用SQL注入漏洞登录后台的实现方法

    利用SQL注入漏洞登录后台的实现方法

    工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意。读这篇文章,我假设读者有过写SQL语句的经历,或者能看得懂SQL语...

    WEB开发_小飞6362019-11-28
  • MysqlUbuntu中更改MySQL数据库文件目录的方法

    Ubuntu中更改MySQL数据库文件目录的方法

    这篇文章主要给大家介绍了关于在Ubuntu中更改MySQL数据库文件目录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考...

    daisy6442019-06-18
  • MysqlMySQL和SQLServer的比较

    MySQL和SQLServer的比较

    对于程序开发人员而言,目前使用最流行的两种后台数据库即为 MySQL 和 SQLServer 。这两者最基本的相似之处在于数据存储和属于查询系统。你可以使用sql来...

    mysql教程网23102019-10-16
  • MysqlMySQL 8 新特性:全局参数持久化!

    MySQL 8 新特性:全局参数持久化!

    自从 2018 年发布第一版 MySQL 8.0.11 正式版至今,MySQL 版本已经更新迭代到 8.0.26,相对于稳定的 5.7 版本来说,8.0 在性能上的提升是毋庸置疑的!...

    Lucifer三思而后行12862021-09-27
  • Mysql解决Navicat for Mysql连接报错1251的问题(连接失败)

    解决Navicat for Mysql连接报错1251的问题(连接失败)

    记得在之前给大家介绍过Navicat for Mysql连接报错的问题,可能写的不够详细,今天在稍作修改补充下,对Navicat for Mysql连接报错1251问题感兴趣的朋友跟随小...

    西西★9052021-08-06
  • Mysql又忘记MYSQL密码啦?教你几种更改密码的方式

    又忘记MYSQL密码啦?教你几种更改密码的方式

    在日常使用数据库的过程中,难免会遇到需要修改账号密码的情景,比如密码太简单需要修改、密码过期需要修改、忘记密码需要修改等。本篇文章将会介...

    MySQL技术2662020-12-17
  • MysqlMySQL定时任务(EVENT事件)如何配置详解

    MySQL定时任务(EVENT事件)如何配置详解

    这篇文章主要介绍了MySQL定时任务(EVENT事件)如何配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋...

    _陈哈哈9802021-04-13