mysql pager_pager 命令

Last time I wrote about a few tips that can make you more efficient when using the command line on Unix. Today I want to focus more on pager.

The most common usage of pager is to set it to a Unix pager such as less. It can be very useful to view the result of a command spanning over many lines (for instance SHOW ENGINE INNODB STATUS):

mysql>pager less;

PAGERset to 'less'mysql>show engine innodb status\G*************************** 1. row ***************************Type: InnoDB

Name:

Status:=====================================

2016-07-16 02:59:292ab7b4f90940 INNODB MONITOR OUTPUT=====================================Per second averages calculatedfrom the last 26seconds-----------------BACKGROUND THREAD-----------------srv_master_thread loops:0 srv_active, 0 srv_shutdown, 147srv_idle

srv_master_thread log flush and writes:147

----------SEMAPHORES----------

----------MUTEX INFO----------Locked mutex: addr0x1829940 thread 46968503601472 file /usr/src/mysql-5.6.28/storage/innobase/handler/ha_innodb.cc line 12487Locked mutex: addr0x18298c0 thread 46968503601472 file /usr/src/mysql-5.6.28/storage/innobase/srv/srv0srv.cc line 1129Total number of mutexes12967

-------------:

Now you are inside less and you can easily navigate through the result set (use q to quit, space to scroll down, etc).

Reminder: if you want to leave your custom pager, this is easy, just run pager:

恢复默认

1.

mysql>pager

Default pager wasn't set, using stdout.

2.\n:

mysql>\n

PAGERset to stdout

But the pager command is not restricted to such basic usage! You can pass the output of queries to most Unix programs that are able to work on text. We have discussed the topic, but here are a few more examples.

Discarding the result set

Sometimes you don’t care about the result set, you only want to see timing information. This can be true if you are trying different execution plans for a query by changing indexes. Discarding the result is possible with pager:

mysql> pager cat > /root/1.txt

mysql> pager cat > /dev/nullPAGERset to 'cat > /dev/null'mysql>show engine innodb status\G1 row in set (0.03 sec)

Now it’s much easier to see all the timing information on one screen.

Comparing result sets

Let’s say you are rewriting a query and you want to check if the result set is the same before and after rewrite. Unfortunately, it has a lot of rows:

mysql> select * fromCOLLATIONS ;+--------------------------+--------------------+-----+------------+-------------+---------+

| COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |

+--------------------------+--------------------+-----+------------+-------------+---------+

| big5_chinese_ci | big5 | 1 | Yes | Yes | 1 |

| big5_bin | big5 | 84 | | Yes | 1 |

| dec8_swedish_ci | dec8 | 3 | Yes | Yes | 1 |

| dec8_bin | dec8 | 69 | | Yes | 1 |

| cp850_general_ci | cp850 | 4 | Yes | Yes | 1 |

| cp850_bin | cp850 | 80 | | Yes | 1 |

| hp8_english_ci | hp8 | 6 | Yes | Yes | 1 |

| hp8_bin | hp8 | 72 | | Yes | 1 |

| koi8r_general_ci | koi8r | 7 | Yes | Yes | 1 |

| koi8r_bin | koi8r | 74 | | Yes | 1 |

| latin1_german1_ci | latin1 | 5 | | Yes | 1 |

| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |

| latin1_danish_ci | latin1 | 15 | | Yes | 1 |

| latin1_german2_ci | latin1 | 31 | | Yes | 2 |

| latin1_bin | latin1 | 47 | | Yes | 1 |

| latin1_general_ci | latin1 | 48 | | Yes | 1 |

| latin1_general_cs | latin1 | 49 | | Yes | 1 |

| latin1_spanish_ci | latin1 | 94 | | Yes | 1 |

| latin2_czech_cs | latin2 | 2 | | Yes | 4 |

| latin2_general_ci | latin2 | 9 | Yes | Yes | 1 |

| latin2_hungarian_ci | latin2 | 21 | | Yes | 1 |

| latin2_croatian_ci | latin2 | 27 | | Yes | 1 |

| latin2_bin | latin2 | 77 | | Yes | 1 |

| swe7_swedish_ci | swe7 | 10 | Yes | Yes | 1 |

| swe7_bin | swe7 | 82 | | Yes | 1 |

| ascii_general_ci | ascii | 11 | Yes | Yes | 1 |

| ascii_bin | ascii | 65 | | Yes | 1 |

| ujis_japanese_ci | ujis | 12 | Yes | Yes | 1 |

| ujis_bin | ujis | 91 | | Yes | 1 |

| sjis_japanese_ci | sjis | 13 | Yes | Yes | 1 |

| sjis_bin | sjis | 88 | | Yes | 1 |

| hebrew_general_ci | hebrew | 16 | Yes | Yes | 1 |

| hebrew_bin | hebrew | 71 | | Yes | 1 |

| tis620_thai_ci | tis620 | 18 | Yes | Yes | 4 |

| tis620_bin | tis620 | 89 | | Yes | 1 |

| euckr_korean_ci | euckr | 19 | Yes | Yes | 1 |

| euckr_bin | euckr | 85 | | Yes | 1 |

| koi8u_general_ci | koi8u | 22 | Yes | Yes | 1 |

| koi8u_bin | koi8u | 75 | | Yes | 1 |

| gb2312_chinese_ci | gb2312 | 24 | Yes | Yes | 1 |

| gb2312_bin | gb2312 | 86 | | Yes | 1 |

| greek_general_ci | greek | 25 | Yes | Yes | 1 |

| greek_bin | greek | 70 | | Yes | 1 |

| cp1250_general_ci | cp1250 | 26 | Yes | Yes | 1 |

| cp1250_czech_cs | cp1250 | 34 | | Yes | 2 |

| cp1250_croatian_ci | cp1250 | 44 | | Yes | 1 |

| cp1250_bin | cp1250 | 66 | | Yes | 1 |

| cp1250_polish_ci | cp1250 | 99 | | Yes | 1 |

| gbk_chinese_ci | gbk | 28 | Yes | Yes | 1 |

| gbk_bin | gbk | 87 | | Yes | 1 |

| latin5_turkish_ci | latin5 | 30 | Yes | Yes | 1 |

| latin5_bin | latin5 | 78 | | Yes | 1 |

| armscii8_general_ci | armscii8 | 32 | Yes | Yes | 1 |

| armscii8_bin | armscii8 | 64 | | Yes | 1 |

| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |

| utf8_bin | utf8 | 83 | | Yes | 1 |

| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |

| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |

| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |

| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |

| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |

| utf8_polish_ci | utf8 | 197 | | Yes | 8 |

| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |

| utf8_spanish_ci | utf8 | 199 | | Yes | 8 |

| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |

| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |

| utf8_czech_ci | utf8 | 202 | | Yes | 8 |

| utf8_danish_ci | utf8 | 203 | | Yes | 8 |

| utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 |

| utf8_slovak_ci | utf8 | 205 | | Yes | 8 |

| utf8_spanish2_ci | utf8 | 206 | | Yes | 8 |

| utf8_roman_ci | utf8 | 207 | | Yes | 8 |

| utf8_persian_ci | utf8 | 208 | | Yes | 8 |

| utf8_esperanto_ci | utf8 | 209 | | Yes | 8 |

| utf8_hungarian_ci | utf8 | 210 | | Yes | 8 |

| utf8_sinhala_ci | utf8 | 211 | | Yes | 8 |

| utf8_german2_ci | utf8 | 212 | | Yes | 8 |

| utf8_croatian_ci | utf8 | 213 | | Yes | 8 |

| utf8_unicode_520_ci | utf8 | 214 | | Yes | 8 |

| utf8_vietnamese_ci | utf8 | 215 | | Yes | 8 |

| utf8_general_mysql500_ci | utf8 | 223 | | Yes | 1 |

| ucs2_general_ci | ucs2 | 35 | Yes | Yes | 1 |

| ucs2_bin | ucs2 | 90 | | Yes | 1 |

| ucs2_unicode_ci | ucs2 | 128 | | Yes | 8 |

| ucs2_icelandic_ci | ucs2 | 129 | | Yes | 8 |

| ucs2_latvian_ci | ucs2 | 130 | | Yes | 8 |

| ucs2_romanian_ci | ucs2 | 131 | | Yes | 8 |

| ucs2_slovenian_ci | ucs2 | 132 | | Yes | 8 |

| ucs2_polish_ci | ucs2 | 133 | | Yes | 8 |

| ucs2_estonian_ci | ucs2 | 134 | | Yes | 8 |

| ucs2_spanish_ci | ucs2 | 135 | | Yes | 8 |

| ucs2_swedish_ci | ucs2 | 136 | | Yes | 8 |

| ucs2_turkish_ci | ucs2 | 137 | | Yes | 8 |

| ucs2_czech_ci | ucs2 | 138 | | Yes | 8 |

| ucs2_danish_ci | ucs2 | 139 | | Yes | 8 |

| ucs2_lithuanian_ci | ucs2 | 140 | | Yes | 8 |

| ucs2_slovak_ci | ucs2 | 141 | | Yes | 8 |

| ucs2_spanish2_ci | ucs2 | 142 | | Yes | 8 |

| ucs2_roman_ci | ucs2 | 143 | | Yes | 8 |

| ucs2_persian_ci | ucs2 | 144 | | Yes | 8 |

| ucs2_esperanto_ci | ucs2 | 145 | | Yes | 8 |

| ucs2_hungarian_ci | ucs2 | 146 | | Yes | 8 |

| ucs2_sinhala_ci | ucs2 | 147 | | Yes | 8 |

| ucs2_german2_ci | ucs2 | 148 | | Yes | 8 |

| ucs2_croatian_ci | ucs2 | 149 | | Yes | 8 |

| ucs2_unicode_520_ci | ucs2 | 150 | | Yes | 8 |

| ucs2_vietnamese_ci | ucs2 | 151 | | Yes | 8 |

| ucs2_general_mysql500_ci | ucs2 | 159 | | Yes | 1 |

| cp866_general_ci | cp866 | 36 | Yes | Yes | 1 |

| cp866_bin | cp866 | 68 | | Yes | 1 |

| keybcs2_general_ci | keybcs2 | 37 | Yes | Yes | 1 |

| keybcs2_bin | keybcs2 | 73 | | Yes | 1 |

| macce_general_ci | macce | 38 | Yes | Yes | 1 |

| macce_bin | macce | 43 | | Yes | 1 |

| macroman_general_ci | macroman | 39 | Yes | Yes | 1 |

| macroman_bin | macroman | 53 | | Yes | 1 |

| cp852_general_ci | cp852 | 40 | Yes | Yes | 1 |

| cp852_bin | cp852 | 81 | | Yes | 1 |

| latin7_estonian_cs | latin7 | 20 | | Yes | 1 |

| latin7_general_ci | latin7 | 41 | Yes | Yes | 1 |

| latin7_general_cs | latin7 | 42 | | Yes | 1 |

| latin7_bin | latin7 | 79 | | Yes | 1 |

| utf8mb4_general_ci | utf8mb4 | 45 | Yes | Yes | 1 |

| utf8mb4_bin | utf8mb4 | 46 | | Yes | 1 |

| utf8mb4_unicode_ci | utf8mb4 | 224 | | Yes | 8 |

| utf8mb4_icelandic_ci | utf8mb4 | 225 | | Yes | 8 |

| utf8mb4_latvian_ci | utf8mb4 | 226 | | Yes | 8 |

| utf8mb4_romanian_ci | utf8mb4 | 227 | | Yes | 8 |

| utf8mb4_slovenian_ci | utf8mb4 | 228 | | Yes | 8 |

| utf8mb4_polish_ci | utf8mb4 | 229 | | Yes | 8 |

| utf8mb4_estonian_ci | utf8mb4 | 230 | | Yes | 8 |

| utf8mb4_spanish_ci | utf8mb4 | 231 | | Yes | 8 |

| utf8mb4_swedish_ci | utf8mb4 | 232 | | Yes | 8 |

| utf8mb4_turkish_ci | utf8mb4 | 233 | | Yes | 8 |

| utf8mb4_czech_ci | utf8mb4 | 234 | | Yes | 8 |

| utf8mb4_danish_ci | utf8mb4 | 235 | | Yes | 8 |

| utf8mb4_lithuanian_ci | utf8mb4 | 236 | | Yes | 8 |

| utf8mb4_slovak_ci | utf8mb4 | 237 | | Yes | 8 |

| utf8mb4_spanish2_ci | utf8mb4 | 238 | | Yes | 8 |

| utf8mb4_roman_ci | utf8mb4 | 239 | | Yes | 8 |

| utf8mb4_persian_ci | utf8mb4 | 240 | | Yes | 8 |

| utf8mb4_esperanto_ci | utf8mb4 | 241 | | Yes | 8 |

| utf8mb4_hungarian_ci | utf8mb4 | 242 | | Yes | 8 |

| utf8mb4_sinhala_ci | utf8mb4 | 243 | | Yes | 8 |

| utf8mb4_german2_ci | utf8mb4 | 244 | | Yes | 8 |

| utf8mb4_croatian_ci | utf8mb4 | 245 | | Yes | 8 |

| utf8mb4_unicode_520_ci | utf8mb4 | 246 | | Yes | 8 |

| utf8mb4_vietnamese_ci | utf8mb4 | 247 | | Yes | 8 |

| cp1251_bulgarian_ci | cp1251 | 14 | | Yes | 1 |

| cp1251_ukrainian_ci | cp1251 | 23 | | Yes | 1 |

| cp1251_bin | cp1251 | 50 | | Yes | 1 |

| cp1251_general_ci | cp1251 | 51 | Yes | Yes | 1 |

| cp1251_general_cs | cp1251 | 52 | | Yes | 1 |

| utf16_general_ci | utf16 | 54 | Yes | Yes | 1 |

| utf16_bin | utf16 | 55 | | Yes | 1 |

| utf16_unicode_ci | utf16 | 101 | | Yes | 8 |

| utf16_icelandic_ci | utf16 | 102 | | Yes | 8 |

| utf16_latvian_ci | utf16 | 103 | | Yes | 8 |

| utf16_romanian_ci | utf16 | 104 | | Yes | 8 |

| utf16_slovenian_ci | utf16 | 105 | | Yes | 8 |

| utf16_polish_ci | utf16 | 106 | | Yes | 8 |

| utf16_estonian_ci | utf16 | 107 | | Yes | 8 |

| utf16_spanish_ci | utf16 | 108 | | Yes | 8 |

| utf16_swedish_ci | utf16 | 109 | | Yes | 8 |

| utf16_turkish_ci | utf16 | 110 | | Yes | 8 |

| utf16_czech_ci | utf16 | 111 | | Yes | 8 |

| utf16_danish_ci | utf16 | 112 | | Yes | 8 |

| utf16_lithuanian_ci | utf16 | 113 | | Yes | 8 |

| utf16_slovak_ci | utf16 | 114 | | Yes | 8 |

| utf16_spanish2_ci | utf16 | 115 | | Yes | 8 |

| utf16_roman_ci | utf16 | 116 | | Yes | 8 |

| utf16_persian_ci | utf16 | 117 | | Yes | 8 |

| utf16_esperanto_ci | utf16 | 118 | | Yes | 8 |

| utf16_hungarian_ci | utf16 | 119 | | Yes | 8 |

| utf16_sinhala_ci | utf16 | 120 | | Yes | 8 |

| utf16_german2_ci | utf16 | 121 | | Yes | 8 |

| utf16_croatian_ci | utf16 | 122 | | Yes | 8 |

| utf16_unicode_520_ci | utf16 | 123 | | Yes | 8 |

| utf16_vietnamese_ci | utf16 | 124 | | Yes | 8 |

| utf16le_general_ci | utf16le | 56 | Yes | Yes | 1 |

| utf16le_bin | utf16le | 62 | | Yes | 1 |

| cp1256_general_ci | cp1256 | 57 | Yes | Yes | 1 |

| cp1256_bin | cp1256 | 67 | | Yes | 1 |

| cp1257_lithuanian_ci | cp1257 | 29 | | Yes | 1 |

| cp1257_bin | cp1257 | 58 | | Yes | 1 |

| cp1257_general_ci | cp1257 | 59 | Yes | Yes | 1 |

| utf32_general_ci | utf32 | 60 | Yes | Yes | 1 |

| utf32_bin | utf32 | 61 | | Yes | 1 |

| utf32_unicode_ci | utf32 | 160 | | Yes | 8 |

| utf32_icelandic_ci | utf32 | 161 | | Yes | 8 |

| utf32_latvian_ci | utf32 | 162 | | Yes | 8 |

| utf32_romanian_ci | utf32 | 163 | | Yes | 8 |

| utf32_slovenian_ci | utf32 | 164 | | Yes | 8 |

| utf32_polish_ci | utf32 | 165 | | Yes | 8 |

| utf32_estonian_ci | utf32 | 166 | | Yes | 8 |

| utf32_spanish_ci | utf32 | 167 | | Yes | 8 |

| utf32_swedish_ci | utf32 | 168 | | Yes | 8 |

| utf32_turkish_ci | utf32 | 169 | | Yes | 8 |

| utf32_czech_ci | utf32 | 170 | | Yes | 8 |

| utf32_danish_ci | utf32 | 171 | | Yes | 8 |

| utf32_lithuanian_ci | utf32 | 172 | | Yes | 8 |

| utf32_slovak_ci | utf32 | 173 | | Yes | 8 |

| utf32_spanish2_ci | utf32 | 174 | | Yes | 8 |

| utf32_roman_ci | utf32 | 175 | | Yes | 8 |

| utf32_persian_ci | utf32 | 176 | | Yes | 8 |

| utf32_esperanto_ci | utf32 | 177 | | Yes | 8 |

| utf32_hungarian_ci | utf32 | 178 | | Yes | 8 |

| utf32_sinhala_ci | utf32 | 179 | | Yes | 8 |

| utf32_german2_ci | utf32 | 180 | | Yes | 8 |

| utf32_croatian_ci | utf32 | 181 | | Yes | 8 |

| utf32_unicode_520_ci | utf32 | 182 | | Yes | 8 |

| utf32_vietnamese_ci | utf32 | 183 | | Yes | 8 |

| binary | binary | 63 | Yes | Yes | 1 |

| geostd8_general_ci | geostd8 | 92 | Yes | Yes | 1 |

| geostd8_bin | geostd8 | 93 | | Yes | 1 |

| cp932_japanese_ci | cp932 | 95 | Yes | Yes | 1 |

| cp932_bin | cp932 | 96 | | Yes | 1 |

| eucjpms_japanese_ci | eucjpms | 97 | Yes | Yes | 1 |

| eucjpms_bin | eucjpms | 98 | | Yes | 1 |

+--------------------------+--------------------+-----+------------+-------------+---------+

219 rows in set (0.02 sec)

Instead of manually comparing each row, you can calculate a checksum and only compare the checksum:

mysql>pager md5sum;

PAGERset to 'md5sum'mysql> select * fromCOLLATIONS;

6650d5d87f2abe18b6ead3588b133087-

219 rows in set (0.02 sec)

mysql>pager md5sum

PAGERset to 'md5sum'# Original query

mysql>SELECT ...

32a1894d773c9b85172969c659175d2d-

1 row in set (0.40sec)

# Rewritten query-wrong

mysql>SELECT ...

fdb94521558684afedc8148ca724f578-

1 row in set (0.16 sec)

Hmmm, checksums don’t match, something is wrong. Let’s retry:

# Rewritten query -correct

mysql>SELECT ...

32a1894d773c9b85172969c659175d2d-

1 row in set (0.17 sec)

Checksums are identical, the rewritten query is much likely to produce the same result as the original one.

Cleaning up SHOW PROCESSLIST

If you have lots of connections on your MySQL, it’s very difficult to read the output of SHOW PROCESSLIST. For instance, if you have several hundreds of connections and you want to know how many connections are sleeping, manually counting the rows from the output of SHOW PROCESSLIST is probably not the best solution. With pager, it is straightforward:

mysql>show processlist;+----+------+-----------+--------------------+---------+------+-------+------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+------+-----------+--------------------+---------+------+-------+------------------+

| 1 | root | localhost | information_schema | Query | 0 | init | show processlist |

| 2 | root | localhost | test | Sleep | 12 | | NULL |

+----+------+-----------+--------------------+---------+------+-------+------------------+

2 rows in set (0.00sec)mysql> pager grep Sleep |wc -l

PAGERset to 'grep Sleep |wc -l'mysql>show processlist;1

2 rows in set (0.00 sec)

Slightly more complicated now: you want to know the number of connections for each status:

mysql> pager awk -F '|' '{print $6}' | sort | uniq -c | sort -r

PAGERset to 'awk -F'|' '{print $6}'| sort | uniq -c | sort -r'mysql>show processlist;3

1Sleep1Query1Command2 rows in set (0.00 sec)

Astute readers will have noticed that these questions could have been solved by querying INFORMATION_SCHEMA. For instance, counting the number of sleeping connections can be done with:

mysql> SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND='Sleep';

+----------+

| COUNT(*) |

+----------+

| 1 |

+----------+

1 row in set (0.17 sec)

and counting the number of connection for each status can be done with:

mysql> SELECT COMMAND,COUNT(*) TOTAL FROM INFORMATION_SCHEMA.PROCESSLIST GROUP BY COMMAND ORDER BY TOTAL DESC;+---------+-------+

| COMMAND | TOTAL |

+---------+-------+

| Query | 1 |

| Sleep | 1 |

+---------+-------+

2 rows in set (0.01 sec)

True, but:

It’s nice to know several ways to get the same result

Some of you may feel more comfortable with writing SQL queries, while others will prefer command line tools

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值