python pip use

  • 更新pip

    1
    [root@localhost ~]# pip install --upgrade pip
  • 查看已安装的软件包

    1
    2
    3
    [root@localhost ~]# pip freeze
    or
    [root@localhost ~]# pip list
  • 查找第三方软件包

    1
    [root@localhost ~]# pip search flask
  • 安装第三方软件包

    1
    [root@localhost ~]# pip install flask
  • 判断第三方软件包是否安装成功

    1
    [root@localhost ~]# python -c "import flask"  -->不报错,安装成功
  • 查看已安装第三方软件包信息

    1
    [root@localhost ~]# pip show flask
  • 卸载第三方软件包(包含依赖包)

    1
    [root@penn source]# pip uninstall flask Werkzeug Jinja2 itsdangerous
  • 安装指定版本

    1
    2
    3
    4
    5
    6
    7
    [root@penn source]# pip install ipython==5

    * 查看需要更新的包
    [root@penn source]# pip list --outdated

    * 更新包
    [root@penn source]# pip install --upgrade pyzmq

python pip source image

修改pip镜像源

  • 查看当前版本

    1
    2
    3
    4
    5
    [root@localhost ~]# rpm -qa python
    python-2.7.5-48.el7.x86_64

    [root@localhost ~]# rpm -qa python*|grep pip
    python2-pip-8.1.2-5.el7.noarch
  • 方式一: 临时使用

    1
    [root@localhost ~]# pip install pythonModuleName -i http://mirrors.aliyun.com/pypi/simple
  • 方式二: 修改配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [root@localhost ~]# mkdir ~/.pip
    [root@localhost ~]# cat > ~/.pip/pip.conf <<EOF
    > [global]
    > trusted-host=mirrors.aliyun.com
    > index-url=http://mirrors.aliyun.com/pypi/simple/
    > [list]
    > format=columns
    > EOF

    mkdir ~/.pip
    cat > ~/.pip/pip.conf <<EOF
    [global]
    trusted-host=mirrors.aliyun.com
    index-url=http://mirrors.aliyun.com/pypi/simple/
    [list]
    format=columns
    EOF

windows 更改pip源

1
2
3
4
5
6
7
8
9
1. 在文件管理器中输入"%APPDATA%"
2. 在显示的当前目录下,创建pip目录
3. 在pip目录下创建pip.ini文件
4. pip.ini文件保存如下内容:
[global]
trusted-host=mirrors.aliyun.com
index-url=http://mirrors.aliyun.com/pypi/simple/
[list]
format=columns

Win10 pip源

  1. 查看%APPDATA%位置

    1
    2
    C:\Windows\SysWOW64>echo %APPDATA%
    C:\Users\admin\AppData\Roaming
  2. 创建pip目录和文件

    1
    2
    3
    4
    C:\Windows\SysWOW64>cd C:\Users\admin\AppData\Roaming
    C:\Users\admin\AppData\Roaming>mkdir pip
    C:\Users\admin\AppData\Roaming>cd pip
    C:\Users\admin\AppData\Roaming\pip>echo > pip.ini
  3. 修改pip.ini配置文件

    1
    2
    3
    4
    5
    6
    C:\Users\admin\AppData\Roaming\pip>type pip.ini
    [global]
    timeout = 6000
    trusted-host=mirrors.aliyun.com
    index-url=http://mirrors.aliyun.com/pypi/simple/
    format=columns
  4. 查看当前安装的插件

    1
    2
    3
    4
    5
    C:\Windows\SysWOW64>pip list
    Package Version
    ---------- -------
    pip 9.0.1
    setuptools 28.8.0

python virtualenv install

安装virtualenv

  • 方式一: yum

    1
    2
    3
    4
    [root@localhost ~]# rpm -qa python
    python-2.7.5-48.el7.x86_64

    [root@localhost ~]# yum -y install python-virtualenv
  • 方式二: pip

    1
    2
    3
    4
    5
    [root@localhost ~]# rpm -qa python
    python-2.7.5-48.el7.x86_64

    [root@localhost ~]# yum -y install python2-pip
    [root@localhost ~]# pip install virtualenv

使用virtualenv

  • 创建一个虚拟空间

    1
    [root@localhost ~]# virtualenv -p /usr/bin/python2.7 myenv
  • 切换到虚拟空间

    1
    2
    [root@localhost ~]# source myenv/bin/activate
    (myenv)[root@localhost ~]#
  • 退出虚拟空间

    1
    2
    (myenv)[root@localhost ~]# deactivate
    [root@localhost ~]#

zookeeper monitor

zookeeper监控指令

1
2
3
4
5
6
7
8
9
10
11
12
* conf   输出相关服务配置的详细信息
* cons 列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息(包括"接受 / 发送"的包数量,会话id,操作延迟,最后的操作执行等等信息)
* dump 列出未经处理的会话和临时节点
* envi 输出关于服务环境的详细信息(区别于 conf 命令)
* reqs 列出未经处理的请求
* ruok 测试服务是否运行正常.如果确实如此,那么服务返回"imok",否则不做任何相应
* stat 输出关于性能和连接的客户端的列表
* wchs 列出服务器 watch 的详细信息
* wchc 通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表
* wchp 通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径
* srvr 列出server的简要信息
* srst 重置server的状态,不建议执行!!!

zookeeper 检测是否正常

1
2
[root@10 ~]# echo ruok | nc 10.0.3.41 2181     
imok //返回imok,说明zookeeper运行正常

用于监控zookeeper健康状态的各种参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@10 ~]# echo mntr | nc 10.0.3.41 2181     
zk_version 3.4.6-1569965, built on 02/20/2014 09:09 GMT //版本
zk_avg_latency 1 //平均延迟
zk_max_latency 886 //最大延迟
zk_min_latency 0 //最小延迟
zk_packets_received 4598897 //接收包
zk_packets_sent 4727418 //发送包
zk_num_alive_connections 4 //连接数
zk_outstanding_requests 0 //未完成客户端请求数
zk_server_state leader //zk角色leader/follower
zk_znode_count 483 //znode数
zk_watch_count 28 //watch数
zk_ephemerals_count 52 //临时节点数
zk_approximate_data_size 35923 //
zk_open_file_descriptor_count 35 //打开文件描述符数
zk_max_file_descriptor_count 65536 //最大打开文件描述符数
zk_followers 2 //zk follower数
zk_synced_followers 2 //zk 同步follower数
zk_pending_syncs 0 //zk 等待同步follower数

zookeeper 配置参数查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@10 ~]# echo conf | nc 10.0.3.41 2181
clientPort=2181 //客户端端口
dataDir=/mnt/data/zookeeper/version-2 //数据存放路径
dataLogDir=/mnt/log/zookeeper/version-2 //日志存放路径
tickTime=2000 //间隔单位时间
maxClientCnxns=60 //
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=41
initLimit=5
syncLimit=2
electionAlg=3
electionPort=4181
quorumPort=3181
peerType=0

列出server的简要信息

1
2
3
4
5
6
7
8
9
10
[root@10 ~]# echo srvr | nc 10.0.3.41 2181     
Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT
Latency min/avg/max: 0/1/886
Received: 4597328
Sent: 4725788
Connections: 5
Outstanding: 0
Zxid: 0x1003e6eeb
Mode: leader
Node count: 483

列服务器环境信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@10 ~]# echo envi | nc 10.0.3.41 2181      
Environment:
zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT
host.name=localhost
java.version=1.8.0_73
java.vendor=Oracle Corporation
java.home=/mnt/app/java/jre
java.class.path=/mnt/app/zookeeper/bin/../build/classes:/mnt/app/zookeeper/bin/../build/lib/*.jar:/mnt/app/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/mnt/app/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/mnt/app/zookeeper/bin/../lib/netty-3.7.0.Final.jar:/mnt/app/zookeeper/bin/../lib/log4j-1.2.16.jar:/mnt/app/zookeeper/bin/../lib/jline-0.9.94.jar:/mnt/app/zookeeper/bin/../zookeeper-3.4.6.jar:/mnt/app/zookeeper/bin/../src/java/lib/*.jar:/mnt/app/zookeeper/bin/../conf:.:/mnt/app/java/lib:/mnt/app/java/jre/lib
java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.io.tmpdir=/tmp
java.compiler=<NA>
os.name=Linux
os.arch=amd64
os.version=3.10.0-123.9.3.el7.x86_64
user.name=wisdom
user.home=/home/wisdom
user.dir=/home/wisdom

列出性能和连接的客户端列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@10 ~]# echo stats | nc 10.0.3.41 2181     
Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT
Clients:
/1.1.1.1:64115[1](queued=0,recved=0,sent=0)
/10.0.3.41:41921[1](queued=0,recved=623,sent=657)
/2.2.2.2:37177[1](queued=0,recved=27282,sent=27282)
/10.0.3.41:41925[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/1/886
Received: 4594796
Sent: 4723167
Connections: 4
Outstanding: 0
Zxid: 0x1003e669c
Mode: leader
Node count: 483

列出所有连接到服务器的客户端的完全的连接

1
2
3
[root@10 ~]# echo cons | nc 10.0.3.41 2181
/1.1.1.1:64115[1](queued=0,recved=0,sent=0) /2.2.2.2:37177[1](queued=0,recved=26679,sent=26679,sid=0x2a5a6f2424c90056,lop=SETD,est=1488507549618,to=6000,lcxid=0x22183,lzxid=0x1003e5e2e,lresp=1488522616395,llat=5,minlat=0,avglat=2,maxlat=126)
/3.3.3.3:41910[0](queued=0,recved=1,sent=0)

列出未经处理的请求

1
[root@10 ~]# echo reqs | nc 10.0.3.41 2181

列出未经处理的会话和临时节点

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
[root@10 ~]# echo dump | nc 10.0.3.41 2181     
SessionTracker dump:
Session Sets (8):
0 expire at Fri Mar 03 14:32:32 CST 2017:
0 expire at Fri Mar 03 14:32:34 CST 2017:
0 expire at Fri Mar 03 14:32:36 CST 2017:
11 expire at Fri Mar 03 14:32:38 CST 2017:
0x295a6f2424ce0060
0x2a5a6f2424c90057
0x285a6f2425ba0096
0x295a6f2424ce00a2
0x295a6f2424ce00a5
0x2a5a6f2424c90056
0x285a6f2425ba00c4
0x295a6f2424ce0001
0x285a6f2425ba00c3
0x2a5a6f2424c90000
0x2a5a6f2424c90055
0 expire at Fri Mar 03 14:32:44 CST 2017:
0 expire at Fri Mar 03 14:32:46 CST 2017:
1 expire at Fri Mar 03 14:32:54 CST 2017:
0x285a6f2425ba0019
2 expire at Fri Mar 03 14:32:56 CST 2017:
0x285a6f2425ba0017
0x285a6f2425ba0018
ephemeral nodes dump:
Sessions with Ephemerals (11):
0x2a5a6f2424c90057:
/consumers/flume/owners/v5-inbound-request/4
/consumers/flume/owners/v5-inbound-request/2
/consumers/flume/ids/flume_gateway2.zdp.ol-1488187633466-719a2fc5
/consumers/flume/owners/v5-inbound-request/3
/consumers/flume/owners/v5-inbound-request/0
/consumers/flume/owners/v5-inbound-request/1
0x285a6f2425ba00c4:
/consumers/flume/owners/v5-outbound-metric-avail/4
/consumers/flume/ids/flume_gateway2.zdp.ol-1488187633262-e6b79549
/consumers/flume/owners/v5-outbound-metric-avail/0
/consumers/flume/owners/v5-outbound-metric-avail/1
/consumers/flume/owners/v5-outbound-metric-avail/2
/consumers/flume/owners/v5-outbound-metric-avail/3
0x2a5a6f2424c90056:
/consumers/flume/ids/flume_gateway2.zdp.ol-1488187633465-b1247702
/consumers/flume/owners/v5-inbound-metric/0
/consumers/flume/owners/v5-inbound-metric/1
/consumers/flume/owners/v5-inbound-metric/2
/consumers/flume/owners/v5-inbound-metric/3
/consumers/flume/owners/v5-inbound-metric/4
0x2a5a6f2424c90055:
/consumers/flume/ids/flume_gateway2.zdp.ol-1488187633465-7be69da4
/consumers/flume/owners/v5-inv-request/0
/consumers/flume/owners/v5-inv-request/1
/consumers/flume/owners/v5-inv-request/2
/consumers/flume/owners/v5-inv-request/3
/consumers/flume/owners/v5-inv-request/4
0x285a6f2425ba00c3:
/consumers/flume/owners/v5-3rdservice-request/0
/consumers/flume/ids/flume_gateway2.zdp.ol-1488187633261-613ec6e4
/consumers/flume/owners/v5-3rdservice-request/3
/consumers/flume/owners/v5-3rdservice-request/4
/consumers/flume/owners/v5-3rdservice-request/1
/consumers/flume/owners/v5-3rdservice-request/2
0x295a6f2424ce0060:
/consumers/flume/ids/flume_gateway2.zdp.ol-1488187633465-8124b5c4
/consumers/flume/owners/v5-avail-request/4
/consumers/flume/owners/v5-avail-request/2
/consumers/flume/owners/v5-avail-request/3
/consumers/flume/owners/v5-avail-request/0
/consumers/flume/owners/v5-avail-request/1
0x295a6f2424ce0001:
/brokers/ids/42
0x285a6f2425ba0096:
/consumers/flume/owners/v5-rate-request/1
/consumers/flume/owners/v5-rate-request/2
/consumers/flume/owners/v5-rate-request/3
/consumers/flume/owners/v5-rate-request/4
/consumers/flume/owners/v5-rate-request/0
/consumers/flume/ids/flume_gateway2.zdp.ol-1488187633466-1c0d7513
0x295a6f2424ce00a2:
/consumers/flume/owners/v5-outbound-metric-rate/2
/consumers/flume/owners/v5-outbound-metric-rate/1
/consumers/flume/owners/v5-outbound-metric-rate/0
/consumers/flume/owners/v5-outbound-metric-rate/4
/consumers/flume/owners/v5-outbound-metric-rate/3
/consumers/flume/ids/flume_gateway2.zdp.ol-1488187633263-1ba4161c
0x295a6f2424ce00a5:
/brokers/ids/40
0x2a5a6f2424c90000:
/brokers/ids/41
/controller

列出服务器watch详细信息

1
2
3
[root@10 ~]# echo wchs | nc 10.0.3.41 2181
2 connections watching 21 paths
Total watches:22

通过session列出服务器watch详细信息

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
[root@10 ~]# echo wchc | nc 10.0.3.41 2181  
0x295a6f2424ce00a5
/controller
/config/changes
0x2a5a6f2424c90000
/isr_change_notification
/admin/preferred_replica_election
/brokers/ids
/admin/delete_topics
/brokers/topics/v5-inv-request
/brokers/topics/__consumer_offsets
/brokers/topics
/controller
/brokers/topics/v5-inbound-request
/brokers/topics/v5-inbound-metric
/admin/reassign_partitions
/brokers/topics/v5-apiweb-request-selectroom
/brokers/topics/v5-outbound-metric-avail
/brokers/topics/v5-rate-metric
/brokers/topics/v5-rate-request
/brokers/topics/v5-outbound-metric-rate
/brokers/topics/v5-inv-metric
/brokers/topics/v5-avail-request
/config/changes
/brokers/topics/v5-3rdservice-request
0x2a5a6f2424c90056
/brokers/topics/v5-inbound-metric
/consumers/flume/ids

通过路列出服务器watch的详细信息

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[root@10 ~]# echo wchp | nc 10.0.3.41 2181  
/admin/delete_topics
0x2a5a6f2424c90000
/brokers/topics
0x2a5a6f2424c90000
/brokers/topics/v5-inbound-metric
0x2a5a6f2424c90000
0x2a5a6f2424c90056
/admin/reassign_partitions
0x2a5a6f2424c90000
/brokers/topics/v5-apiweb-request-selectroom
0x2a5a6f2424c90000
/brokers/topics/v5-3rdservice-request
0x2a5a6f2424c90000
/isr_change_notification
0x2a5a6f2424c90000
/admin/preferred_replica_election
0x2a5a6f2424c90000
/brokers/ids
0x2a5a6f2424c90000
/brokers/topics/v5-inv-request
0x2a5a6f2424c90000
/brokers/topics/__consumer_offsets
0x2a5a6f2424c90000
/controller
0x2a5a6f2424c90000
0x295a6f2424ce00a5
/consumers/flume/ids
0x2a5a6f2424c90056
/brokers/topics/v5-inbound-request
0x2a5a6f2424c90000
/brokers/topics/v5-outbound-metric-avail
0x2a5a6f2424c90000
/brokers/topics/v5-rate-metric
0x2a5a6f2424c90000
/brokers/topics/v5-rate-request
0x2a5a6f2424c90000
/brokers/topics/v5-outbound-metric-rate
0x2a5a6f2424c90000
/brokers/topics/v5-inv-metric
0x2a5a6f2424c90000
/brokers/topics/v5-avail-request
0x2a5a6f2424c90000
/config/changes
0x2a5a6f2424c90000
0x295a6f2424ce00a5

mysql master slave switch

mysql 主从切换

1. Master 查看slave主机列表

1
2
3
4
5
6
mysql> show slave hosts;
+-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID |
+-----------+------+------+-----------+--------------------------------------+
| 108 | | 3306 | 111 | dff3b8d4-cab5-11e6-bcb2-080027c784a4 |
+-----------+------+------+-----------+--------------------------------------+

2. Slave 在slave上执行停止IO同步

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
mysql> stop slave IO_THREAD;
Query OK, 0 rows affected (0.06 sec)

mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.1.111
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 491
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 377
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: No
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 491
Relay_Log_Space: 551
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 111
Master_UUID: a2207dde-caaf-11e6-bc89-080027770ec0
Master_Info_File: /mnt/data/mysql/3306/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
ERROR:
No query specified

3. Slave 在slave上重置master状态

1
2
mysql> reset master;
Query OK, 0 rows affected (0.06 sec)

4. Slave 上创建同步账号

1
2
mysql> GRANT REPLICATION SLAVE ON *.* to 'repl'@'%' identified by 'repl123';
mysql> flush privileges;

5. Master 在master上同步slave

1
2
mysql> change master to master_host='192.168.1.112',master_port=3306,master_user='repl',master_password='repl123';
mysql> start slave;

6. Master 在master验证

1
2
mysql> show slave status \G;
mysql> show processlist \G;

mysql error info

sleep 太多:
show global variables like ‘wait_timeout’;

  • interactive_timeout:
    参数含义:服务器关闭交互式连接前等待活动的秒数.交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端.
    参数默认值:28800秒(8小时)
  • wait_timeout:
    参数含义:服务器关闭非交互连接之前等待活动的秒数.
    在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)
    参数默认值:28800秒(8小时)
  1. 这里为什么要同时设置interactive_timeout,wait_timeout的设置才会生效?
    不设置interactive_timeout,wait_timeout也会生效
  2. interactive的值如果设置的和wait_timeout不同,为什么Interactive_timeout会覆盖wait_timeout?
    在交互模式下(CLIENT_INTERACTIVE),interactive_timeout才生效,非交互模式下,不生效
  3. 在进行MySQL优化时,因为interactive_timeout决定的是交互连接的时间长短,而wait_timeout决定的是非交互连接的时间长短.如果在进行连接配置时mysql_real_connect()最后一个参数client_flag不设置为CLIENT_INTERACTIVE,是不是interactive_timeout的值不会覆盖wait_timeout?
    可以做实验试试
  4. 为了减少长连接的数量,在设置优化时是不是可以将interactive_timeout的值设置的大些,而wait_timeout的值设置的小些?但是问题2的描述好像又不允许这样
    在交互模式下,interactive_timeout取代wait_timeout.
    如果客户端是交互模式方式连接mysql server,那么客户端的timeout受制于interactive_timeout.
    如果客户端是非交互模式方式连接mysql server,那么客户端的timeout受制于wait_timeout.
    注意:是否是交互模式的连接,由客户端决定

mysql explain

MySQL中的explain命令显示了mysql如何使用索引来处理select语句以及连接表.explain显示的信息可以帮助选择更好的索引和写出更优化的查询语句.

  1. EXPLAIN的使用方法:
    在select语句前加上explain就可以了,例如:
    explain select surname,first_name form a,b where a.id=b.id;
  2. EXPLAIN列的解释:
    • table
      显示这一行的数据是关于哪张表的
    • type
      这是重要的列,显示连接使用了何种类型.从最好到最差的连接类型为const,eq_reg,ref,range,indexhe和ALL
    • possible_keys
      显示可能应用在这张表中的索引.如果为空,没有可能的索引.可以为相关的域从WHERE语句中选择一个合适的语句
    • key
      实际使用的索引.如果为NULL,则没有使用索引.很少的情况下,MYSQL会选择优化不足的索引.这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
    • key_len
      使用的索引的长度.在不损失精确性的情况下,长度越短越好
    • ref
      显示索引的哪一列被使用了,如果可能的话,是一个常数
    • rows
      MYSQL认为必须检查的用来返回请求数据的行数
    • Extra
      关于MYSQL如何解析查询的额外信息.坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢
  3. Extra列返回的描述的意义:
    • Distinct
      一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
    • Not exists
      MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了
    • Range checked for each Record(index map:#)
      没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行.这是使用索引的最慢的连接之一
    • Using filesort
      看到这个的时候,查询就需要优化了.MYSQL需要进行额外的步骤来发现如何对返回的行排序.它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行
    • Using index
      列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候
    • Using temporary
      看到这个的时候,查询需要优化了.这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上
    • Where used
      使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户.如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题不同连接类型的解释()按照效率高低的顺序排序)
    • system 表只有一行:system表
      这是const连接类型的特殊情况
    • const
      表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引).因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待
    • eq_ref
      在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用
    • ref
      这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生.对于之前的表的每一个行联合,全部记录都将从表中读出.这个类型严重依赖于根据索引匹配的记录多少—越少越好
    • range
      这个连接类型使用索引返回一个范围中的行,比如使用>或<查找东西时发生的情况
    • index
      这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)
    • ALL
      这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免

mysql table size

查看数据库和表大小

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> use information_schema;

//要查询表所占的容量,就是把表的数据和索引加起来就可以了
mysql> select sum(DATA_LENGTH)+sum(INDEX_LENGTH) from information_schema.tables;

//查询所有的数据大小
mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') from tables;

//查询某个表的数据
mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') from tables where table_schema='pmsmonitorlog' AND table_name='$i';

//查询数据库大小
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='home';

mysql partition

mysql partition分为 水平分区 和 垂直分区

  1. 水平分区
    举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录
    几种常见模式:
    • Range()
      这种模式允许DBA将数据划分不同范围
      例如DBA可以将一个表通过年份划分成三个分区,80年代(1980’s)的数据,90年代(1990’s)的数据以及任何在2000年(包括2000年)后的数据
    • Hash(哈希)
      这中模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区
      例如DBA可以建立一个对表主键进行分区的表
    • Key(键值)
      此模式是上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的
    • List(预定义列表)
      这种模式允许系统通过DBA定义的列表的值所对应的行数据进行分割.
      例如DBA建立了一个横跨三个分区的表,分别根据2004年2005年和2006年值所对应的数据
    • Composite(复合模式)
      其实是以上模式的组合使用而已
      举例在初始化已经进行了Range范围分区的表上,我们可以对其中一个分区再进行hash哈希分区
  2. 垂直分区
    举个简单例子:一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度

查看分区表和删除分区表

1
2
mysql> SELECT partition_name part,partition_expression expr,partition_description descr,table_rows FROM information_schema.partitions  WHERE table_schema = SCHEMA() AND table_name='table_name';
mysql> alter table table_name drop partition partition_name;

查看表是否分配分区

1
2
mysql> use information_schema;
mysql> select TABLE_SCHEMA,TABLE_NAME,PARTITION_NAME from PARTITIONS where TABLE_SCHEMA='pmsmonitorlog';

mysql grant

只读账号

1
2
3
mysql> GRANT SELECT ON *.* TO 'readonly'@'%' IDENTIFIED BY "123456";
mysql> GRANT SELECT ON *.* TO 'readonly'@'%' IDENTIFIED BY "123456";
mysql> flush privileges;

撤销账号

1
2
mysql> revoke insert,update ON user.test from 'readonly'@'%';
mysql> flush privileges;

mysql授权

1
2
mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;  
mysql> flush privileges;

删除权限

1
2
3
4
mysql> revoke all on *.* from ssproot@'10.0.2.111';
mysql> FLUSH PRIVILEGES;
mysql> delete from mysql.user where user='ssproot' and host='10.0.2.111' ;
mysql> FLUSH PRIVILEGES;