레이블이 Percona Toolkit인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Percona Toolkit인 게시물을 표시합니다. 모든 게시물 표시

pt-show-grants - backup MySQL users privileges/grants

MySQL 서버의 유저와 권한을 백업하는 여러 방법 중, Percona Toolkit을 이용한 방법을 소개한다.
pt-show-grants는 MySQL 서버의 유저와 유저 권한을 실행가능한 SQL형태로 보여주는 툴이다.

1. pt-show-grants  사용법
기본적인 옵션을 주고 pt-show-grants 툴로 MySQL 서버의 유저 및 권한을 추출해본다.
  • host=localhost : MySQL 서버 호스트이름
  • user=root : MySQL 서버 접속 유저 이름
  • port=13326 : MySQL 서버 접속 포트 번호
  • socket=/tmp/mysql_13326.sock : MySQL 서버 접속 unix socket
  • ask-pass : MySQL 서버 접속 시, 수동으로 암호 입력
  • flush : 유저 권한 추출 결과 최후에 "flush privileges;" 명령어 추가
  • drop : 유저 생성 전에 "DROP USER" 명령어 추가
  • charset=utf8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[mysql@testserver ~]$ pt-show-grants --host=localhost --user=root --port=13326 --socket=/tmp/mysql_13326.sock --ask-pass --flush --drop --charset=utf8
Enter password:
-- Grants dumped by pt-show-grants
-- Dumped from server Localhost via UNIX socket, MySQL 5.6.33-log at 2017-01-12 10:51:00
DROP USER 'monitoruser'@'127.0.0.1';
DELETE FROM `mysql`.`user` WHERE `User`='monitoruser' AND `Host`='127.0.0.1';
-- Grants for 'monitoruser'@'127.0.0.1'
GRANT PROCESS, SUPER ON *.* TO 'monitoruser'@'127.0.0.1' IDENTIFIED BY PASSWORD '*DCA31DD086BF1A7KKKKDD3021DEE02882649B4D3';
GRANT SELECT ON `testdb`.* TO 'monitoruser'@'127.0.0.1';
DROP USER 'monitoruser'@'192.168.0.11';
DELETE FROM `mysql`.`user` WHERE `User`='monitoruser' AND `Host`='192.168.0.11';
-- Grants for 'monitoruser'@'192.168.0.11'
GRANT PROCESS, SUPER ON *.* TO 'monitoruser'@'192.168.0.11' IDENTIFIED BY PASSWORD '*DCA31DD086BF1A7KKKKDD3021DEE02882649B4D3';
GRANT SELECT ON `testdb`.* TO 'monitoruser'@'192.168.0.11';
DROP USER 'monitoruser'@'localhost';
DELETE FROM `mysql`.`user` WHERE `User`='monitoruser' AND `Host`='localhost';
-- Grants for 'monitoruser'@'localhost'
GRANT PROCESS, SUPER ON *.* TO 'monitoruser'@'localhost' IDENTIFIED BY PASSWORD '*DCA31DD086BF1A7KKKKDD3021DEE02882649B4D3';
GRANT SELECT ON `testdb`.* TO 'monitoruser'@'localhost';
..........
..........
..........
..........
..........
FLUSH PRIVILEGES;
cs


추출한 유저 및 권한을 sql파일로 dump하려면 다음과 같이 실행한다.
1
[mysql@testserver ~]$ pt-show-grants --host=localhost --user=root --port=13326 --socket=/tmp/mysql_13326.sock --password="xxxxxxxx" --flush --drop --charset=utf8 > /home/mysql/showgrants_result.sql
cs


다양한 추가 옵션들과 그 응용법은 Percona 공식 사이트를 참고한다.

[주의]  pt-show-grant 사용 시, 유의사항

간과할 수 있는 중요한 사항이  root등의 관리자(superuser) 계정과 권한까지 dump했을 때다. 만일, 해당 sql파일을 제 3의 MySQL 서버에 복원용으로 실행한다면 기존의 root 의 암호나 권한이 변경될 수(덮어 씌워질 수) 있다.
따라서 pt-show-grant를 사용하여 유저 및 권한을 추출할때는 "--ignore" 옵션을 사용하여 root등의 관리자를 제외하고 추출하거나, "--only" 옵션을 사용하여 특정 유저와 권한만을 추출하는 방법을 검토해보길 바란다.
1
[mysql@testserver ~]$ pt-show-grants --host=localhost --user=root --port=13326 --socket=/tmp/mysql_13326.sock --ask-pass --flush --drop --charset=utf8 --ignore=root
cs



허나, 아쉽게도 최신버전인 2.2.20에서도 --ignore 옵션은 제대로 동작하지 않는다.

현재로서는 "--only" 옵션을 사용하여 특정 유저 및 권한만 백업하거나, 추출결과인 sql 파일을 직접 수정하여 root계정의 내용을 삭제하는 번거로운 작업을 해야한다.