用法:

pt-show-grants [OPTION ... ] [DSN]
 
例子:
pt-show-grants
pt-show-grants --separate --revoke | diff othergrants.sql -
 
风险:
 
只读工具和写工具
pt-show-grants默认是只读,风险低。如果使用--flush,将执行flush privileges。
至今没有已知bug导致用户的损失。
 
描述:
pt-show-grants提取、排序和打印MySQL 相关账户
 
存在的原因:
1、从一台服务器上将权限复制到另一台机器上;可以很简单地从第一台服务器上抽取相关权限,然后直接导入第二台机器上;
2、将权限信息放在版本控制中。使用自动grant dump到版本控制中,可能会获得一些没有变化的授权。原因在于mysql按照看似随机的顺序打印授权信息。
 
例如:
一天打印如下:
另一天可能打印:
授权没变,但是顺序变了
 
该脚本可以解决该问题,在GRANT和ON之间做排序。如果show grants结果存在多行的话,也会这些行进行排序。
 
3、比较服务器之间的权限,没有规范化的,这样的操作会比较困难。输出结果完全是可对比的。
 
执行pt-show-grans的过程:
命令:
pt-show-grants -u pt -p 213456 -S ./tmp/mysql.sock
 全日志:
从全日志中可以看到:
1、先查找所有用户和Host
2、然后逐个执行show grants
 
输出:
两种不同的方式进行连接
 
选项:
--ask-pass            Prompt for a password when connecting to MySQL
 
--ask-pass 作为密码的提示 在系统中运行出错
出错信息:Enter password: Cannot read response; is Term::ReadKey installed? Can't locate Term/ReadKey.pm in @INC
缺少Term/ReadKey.pm这个模块——在自己测试机上继续练习
 
--charset=s       -A  Default character set
--charset=s -A 连接使用的字符集
例子:
pt-show-grants -upt -hlocalhost -S ./tmp/mysql.sock -p 213456 -A utf8
对应的全日志中多了,37 Query     /*!40101 SET NAMES utf8*/
--config=A            Read this comma-separated list of config files; if  specified, this must be the first option on the command   line
--config 
类型为数组
从特定的文件中读取配置,如果设置,这个选项需要设置在第一行
 
--database=s      -D  The database to use for the connection
--database=s -D 连接数据库使用到的DB
 
--defaults-file=s -F  Only read mysql options from the given file
pt-show-grants --defaults-file=./etc/my.cnf -upt -p213456
--drop                Add DROP USER before each user in the output
添加了两行:
DROP USER 'pt'@'%';
DELETE FROM `mysql`.`user` WHERE `User`='pt' AND `Host`='%';
--flush               Add FLUSH PRIVILEGES after output
在输出最后一行加了如下一行命令:
FLUSH PRIVILEGES;
 
--[no]header          Print dump header (default yes)
 
--help                Show help and exit
 
--host=s          -h  Connect to host
--ignore=a            Ignore this comma-separated list of users 【不起作用??】
参数必须是'root'@'localhost',而不是root
--only=a              Only show grants for this comma-separated list of users
只显示的用户
--password=s      -p  Password to use when connecting
--pid=s               Create the given PID file
--port=i          -P  Port number to use for connection
--revoke              Add REVOKE statements for each GRANT statement
是REVOKE形式,与drop不同,其是delete
 
--separate            List each GRANT or REVOKE separately
--set-vars=s          Set these MySQL variables (default wait_timeout=10000)
用法:--set-vars            wait_timeout=100
 
--socket=s        -S  Socket file to use for connection
--[no]timestamp       Add timestamp to the dump header (default yes)是否添加时间戳
--user=s          -u  User for login if not current user
--version             Show version and exit
 
选项类型:
Option types: s=string, i=integer, f=float, h/H/a/A=comma-separated list, d=DSN, z=size, m=time
s表示string
i表示整数
f表示浮点数
h/H/a/A 表是逗号分隔型取值格式
d表示DSN
z表示大小
m表示time
 
 
参数的默认值:
参数的默认值
 
环境:
使用PTDEBUG可以将debug信息打印到STDERR,也可以重定向到文件中
 
PTDEBUG=1 pt-show-grants ... > FILE 2>&1
 
环境准备:
Perl,DBI,DBD::mysql 以及新版的perl所需要的一些软件包
 
 
研究方法:
1、看帮助
2、开启全日志,查找对应的命令发送哪些SQL语句
3、使用PTDEBUG信息,查找更细节的过程
4、研究代码
 
 

pt-show-grants的更多相关文章

  1. mysql瑞士军刀–pt工具

    Percona-Toolkits Percona-toolkit 简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql任务和系统任务,这些 ...

  2. PX 和PT的区别

    字体大小的设置单位,常用的有2种:px.pt.这两个有什么区别呢? 先搞清基本概念:px就是表示pixel,像素,是屏幕上显示数据的最基本的点: pt就是point,是印刷行业常用单位,等于1/72英 ...

  3. css中单位px、pt、em和rem的区别

    国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢? px :像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的.(引自CSS ...

  4. 快速安装Percona pt工具

    yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-Time-HiRes perl-IO-Socket-SSLwget http://pk ...

  5. ((uchar*)(Img1->imageData + Img1->widthStep*pt.y))[pt.x] 的 具体含义

    widthstep是指图像每行所占的字节数. 主要要和width区别: width是表示图像的每行像素数,widthStep指表示存储一行像素需要的字节数. 在OpenCV里边,widthStep必须 ...

  6. Android中的dp, px, pt

    定义: px是像素,表示屏幕显示的最小元素单位 pt是磅数,一磅等于1/72英寸,一般用来作为字体的单位使用 问题: px和pt不使用于手机,因为同样的px在高低分辨率的手机上显示的比例不同 解决办法 ...

  7. css中font-size的单位总结:px、em、pt

    px:基于像素的单位.像素是一种有用的单位,因为在任何媒体上都可以保证一个像素的差别确实是可见的.em :一般用来测量长度的通用单位(例如元素周转的页边空白和填充),当用于指定字体大小时,em单位是指 ...

  8. UI设计中px、pt、ppi、dpi、dp、sp之间的关系

    UI设计中px.pt.ppi.dpi.dp.sp之间的关系 武汉AAA数字艺术教育 2015-07-24 14:19:50 职业教育 pi px 阅读(3398) 评论(0) 声明:本文由入驻搜狐公众 ...

  9. 关于pt与px

    pt:point,点,是印刷业一个标准的长度单位,1pt=1/72英寸:  在Windows里,默认的显示设置中,把文字定义为96dpi.这说明了:1px=1/96英寸:而1pt=1/72英寸,可以得 ...

  10. Android中dip、dp、sp、pt和px的区别

    1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小.在有些情况 ...

随机推荐

  1. ASP.NET没有魔法——ASP.NET MVC 与数据库大集合

    ASP.NET没有魔法——ASP.NET与数据库 ASP.NET没有魔法——ASP.NET MVC 与数据库之MySQL ASP.NET没有魔法——ASP.NET MVC 与数据库之ORM ASP.N ...

  2. cmd启动,重启,停止IIS命令

    直接使用CMD我们可以操作很多事情,比如启动IIS,重启IIS,停止IIS 重启IIS服务器,开始->运行->cmd (以下列出相关操作命令): iisreset /RESTART 停止后 ...

  3. 新博客,新开始-从Chrome浏览器奔溃说起

    新博客,新开始 今天是2015-04-09,昨天新开的博客,今天在这写上一段,算是立个标记,好留以后拿来回溯吧. 不知道是谁跟我说的,坚持写博客是个好习惯,也能帮助自己总结经验,提高技术.也许大概可能 ...

  4. Java中数组的遍历

    (I)标准for循环遍历数组 例如代码片段: int [] nums = new int [] {0,1,2,3,4,5,6,7,8,9}; for(int i=0;i<11;i++){ Sys ...

  5. LINUX 笔记-watch命令

    命令格式:watch[参数][命令] 可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令 命令参数: -n或--interval  watch缺省每2秒运行一下程序,可以用-n ...

  6. 学习SVG 重点汇总

    什么是SVG? Δ  SVG 指可伸缩矢量图形 (Scalable Vector Graphics) Δ  SVG 用来定义用于网络的基于矢量的图形 Δ  SVG使用XML格式来定义图形 Δ  SVG ...

  7. 使用Angularjs和Vue.js对比

    使用Angularjs和Vue.js对比 之前项目都是使用Angularjs,(注明此处主要讲Angularjs 1)在初步使用Vue.js后做一个简答的对比笔记. 首先从理论上简单说一下各自的特点, ...

  8. tp5引入第三方类库

    1.在/public/index.php中添加 define('EXTEND_PATH', '../extend/'); 2./extend/lib 中添加第三方类,类文件的名称和类名一样,命名空间为 ...

  9. LeetCode 104. Maximum Depth of Binary Tree (二叉树的最大深度)

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  10. Java 数据结构与算法分析学习

    由于之前面试android的时候考到了很多关于java的知识,所以这次重温数据结构知识就打算用java来学习,毕竟android是以java为基础的,而且我现在学习的j2ee架构也是以java为基础的 ...