更新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 | 1. 在文件管理器中输入"%APPDATA%" |
Win10 pip源
查看%APPDATA%位置
1
2C:\Windows\SysWOW64>echo %APPDATA%
C:\Users\admin\AppData\Roaming创建pip目录和文件
1
2
3
4C:\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修改pip.ini配置文件
1
2
3
4
5
6C:\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查看当前安装的插件
1
2
3
4
5C:\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 | * conf 输出相关服务配置的详细信息 |
zookeeper 检测是否正常
1 | [root@10 ~]# echo ruok | nc 10.0.3.41 2181 |
用于监控zookeeper健康状态的各种参数
1 | [root@10 ~]# echo mntr | nc 10.0.3.41 2181 |
zookeeper 配置参数查看
1 | [root@10 ~]# echo conf | nc 10.0.3.41 2181 |
列出server的简要信息
1 | [root@10 ~]# echo srvr | nc 10.0.3.41 2181 |
列服务器环境信息
1 | [root@10 ~]# echo envi | nc 10.0.3.41 2181 |
列出性能和连接的客户端列表
1 | [root@10 ~]# echo stats | nc 10.0.3.41 2181 |
列出所有连接到服务器的客户端的完全的连接
1 | [root@10 ~]# echo cons | nc 10.0.3.41 2181 |
列出未经处理的请求
1 | [root@10 ~]# echo reqs | nc 10.0.3.41 2181 |
列出未经处理的会话和临时节点
1 | [root@10 ~]# echo dump | nc 10.0.3.41 2181 |
列出服务器watch详细信息
1 | [root@10 ~]# echo wchs | nc 10.0.3.41 2181 |
通过session列出服务器watch详细信息
1 | [root@10 ~]# echo wchc | nc 10.0.3.41 2181 |
通过路列出服务器watch的详细信息
1 | [root@10 ~]# echo wchp | nc 10.0.3.41 2181 |
mysql master slave switch
mysql 主从切换
1. Master 查看slave主机列表
1 | mysql> show slave hosts; |
2. Slave 在slave上执行停止IO同步
1 | mysql> stop slave IO_THREAD; |
3. Slave 在slave上重置master状态
1 | mysql> reset master; |
4. Slave 上创建同步账号
1 | mysql> GRANT REPLICATION SLAVE ON *.* to 'repl'@'%' identified by 'repl123'; |
5. Master 在master上同步slave
1 | mysql> change master to master_host='192.168.1.112',master_port=3306,master_user='repl',master_password='repl123'; |
6. Master 在master验证
1 | mysql> show slave status \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小时)
- 这里为什么要同时设置interactive_timeout,wait_timeout的设置才会生效?
不设置interactive_timeout,wait_timeout也会生效 - interactive的值如果设置的和wait_timeout不同,为什么Interactive_timeout会覆盖wait_timeout?
在交互模式下(CLIENT_INTERACTIVE),interactive_timeout才生效,非交互模式下,不生效 - 在进行MySQL优化时,因为interactive_timeout决定的是交互连接的时间长短,而wait_timeout决定的是非交互连接的时间长短.如果在进行连接配置时mysql_real_connect()最后一个参数client_flag不设置为CLIENT_INTERACTIVE,是不是interactive_timeout的值不会覆盖wait_timeout?
可以做实验试试 - 为了减少长连接的数量,在设置优化时是不是可以将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显示的信息可以帮助选择更好的索引和写出更优化的查询语句.
- EXPLAIN的使用方法:
在select语句前加上explain就可以了,例如:
explain select surname,first_name form a,b where a.id=b.id; - 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根本不能使用索引,结果是检索会很慢
- table
- 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
这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免
- Distinct
mysql table size
查看数据库和表大小
1 | mysql> use information_schema; |
mysql partition
mysql partition分为 水平分区 和 垂直分区
- 水平分区
举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录
几种常见模式:- 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哈希分区
- Range()
- 垂直分区
举个简单例子:一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度
查看分区表和删除分区表
1 | 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'; |
查看表是否分配分区
1 | mysql> use information_schema; |
mysql grant
只读账号
1 | mysql> GRANT SELECT ON *.* TO 'readonly'@'%' IDENTIFIED BY "123456"; |
撤销账号
1 | mysql> revoke insert,update ON user.test from 'readonly'@'%'; |
mysql授权
1 | mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; |
删除权限
1 | mysql> revoke all on *.* from ssproot@'10.0.2.111'; |