新聞中心
概述
對于mysql的備份,常見的有物理備份和邏輯備份。對于邏輯備份,我們常用的工具是mydump,它可以對庫、表進行邏輯的備份。但是在我們的實際工作中,我們有時需要對用戶和權限進行備份,下面分享一下實現(xiàn)的具體方法。

成都創(chuàng)新互聯(lián)公司為企業(yè)級客戶提高一站式互聯(lián)網(wǎng)+設計服務,主要包括網(wǎng)站設計、網(wǎng)站建設、成都app開發(fā)、小程序設計、宣傳片制作、LOGO設計等,幫助客戶快速提升營銷能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門都有經(jīng)驗豐富的經(jīng)驗,可以確保每一個作品的質量和創(chuàng)作周期,同時每年都有很多新員工加入,為我們帶來大量新的創(chuàng)意。
解決方案
1、使用mysqlpump實用程序(作為創(chuàng)建用戶和授權語句)
[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 過去只打印導致恢復出現(xiàn)問題的授權語句(沒有創(chuàng)建用戶信息),尤其是在啟用了sql 模式的情況下。 雖然 正如您從輸出中看到的那樣 - percona 團隊已經(jīng)解決了這個問題,但我仍然看到不必要的語句,例如從 mysql.user 表中刪除用戶記錄NO_AUTO_CREATE_USERS 、DROP USER。
如何恢復
您可以通過以下命令簡單地從上述任一方法恢復權限:
mysql -uUSER -p < user_privileges.sql
結論
- 使用 mysqlpump 或 pt-show-grants 備份用戶和權限——作為 Create User 和 grant 語句——比備份 mysql 系統(tǒng)數(shù)據(jù)庫中的授權表要好得多。
- 建議在正常備份計劃作業(yè)中運行上述任一命令。
分享標題:如何備份MySQL的用戶和權限?
本文路徑:http://fisionsoft.com.cn/article/cdjpdhe.html


咨詢
建站咨詢
