2017年7月

CentOS6下安装GraphicsMagick过程记录

GraphicsMagick号称图像处理领域的瑞士军刀。 短小精悍的代码却提供了一个鲁棒、高效的工具和库集合,来处理图像的读取、写入和操作,支持超过88种图像格式,包括重要的DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM和TIFF。

通过使用OpenMP可是利用多线程进行图片处理,增强了通过扩展CPU提高处理能力。GraphicsMagick可以再绝大多数的平台上使用,Linux、Mac、Windows都没有问题。

GraphicsMagick支持大图片的处理,并且已经做过GB级别的图像处理实验。GraphicsMagick能够动态的生成图片,特别适用于互联网的应用。可以用来处理调整尺寸、旋转、加亮、颜色调整、增加特效等方面。GaphicsMagick不仅支持命令行的模式,同时也支持C、C++、Perl、PHP、Tcl、Ruby等的调用。事实上,GraphicsMagick是从 ImageMagick 5.5.2 分支出来的,但是现在他变得更稳定和优秀。

GraphicsMagick官网:http://www.graphicsmagick.org/index.html 目前最新版本为 1.3.26

安装建议:

先解压GraphicsMagick-1.3.26.tar.gz包 ./configure 检查png与jpg的支持情况,如不支持,请安装相应的图片库之后再安装GM服务。
安装一些基础包:

yum install libtool* libpng.x86_64 libpng-devel.x86_64 libpng-static.x86_64

安装常见图片库jpeg及png

建立jpeg安装目录

mkdir /usr/local/jpeg6
mkdir /usr/local/jpeg6/bin
mkdir /usr/local/jpeg6/include
mkdir /usr/local/jpeg6/lib
mkdir /usr/local/jpeg6/man
mkdir /usr/local/jpeg6/man/man1

解压安装jpeg

tar xvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
cp /usr/share/libtool/config/config.sub .
cp /usr/share/libtool/config/config.guess .
./configure --prefix=/usr/local/jpeg6/ --enable-shared --enable-static
make
make install

64位系统以上两个cp务必执行,否则会报错
make: ./libtool:命令未找到
make: * [jcapimin.lo] 错误 127




---阅读剩余部分---

Oracle 修改SYS、system用户密码

SYS用户是Oracle中权限最高的用户,而SYSTEM是一个用于数据库管理的用户。在数据库安装完之后,应立即修改SYS,SYSTEM这两个用户的密码,以保证数据库的安全。
新密码不能一数字开头不能纯数字。
安装完之后修改密码方法:

cmd命令行下输入 sqlplus / as sysdba;
法1.SQL>alter user sys identified by "xxxxxx"
法2.SQL>grant connect to sys identified by "xxxxxxxxxx"
法3. SQL> password system
更改 system 的口令
新口令:
重新键入新口令:
口令已更改
(注:法3只适用于SYSTEM)

验证:

SQL> conn system/xxxxx
已连接。
SQL> show user
USER 为 "SYSTEM"
SQL> exit

注:SYS和SYSTEM用户之间可以相互修改口令



---阅读剩余部分---

RMAN连接数据库 多实例场景下需要指定SID

RMAN 是Oracle数据库软件自带的备份恢复工具,一种是类似于DOS,通过键盘操作的 命令行方式。

通过RMAN连接本地数据库非常简单,以 Windows 平台为例,进入到命令提示符界面:

C:/Documents and Settings/admin> SET ORACLE_SID =jssbook

C:/Documents and Settings/admin> RMAN TARGET /

Recovery Manager: Release 10.2.0.1.0 - Production on Tue Mar 17 21:12:17 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

connected to target database: JSSBOOK (DBID=1415261003)

RMAN>
如上所示,使用RMAN连接本地数据库之前必须首先设置操作系统环境变量:ORACLE_SID,并指定该值等于目标数据库的实例名。如果本地库只有一个实例并已经设置了ORACLE_SID环境变量,则不需要再指定ORACLE_SID。RMAN会自动连接到默认实例。

Linux/UNIX 环境下设置操作系统环境变量应使用 export 命令,另外ORACLE_SID必须为大写。例如:


---阅读剩余部分---

Oracle Dba常用命令

1 运行SQLPLUS工具
sqlplus

2 以OS的默认身份连接
/ as sysdba

3 显示当前用户名
show user

4 直接进入SQLPLUS命令提示符
sqlplus /nolog

5 在命令提示符以OS身份连接
connect / as sysdba

6 以SYSTEM的身份连接
connect system/xxxxxxx@服务名

7 显示当然用户有哪些表
select * from tab;

8 显示有用户名和帐户的状态
select username,account_status from dba_users;









---阅读剩余部分---

Oracle删除归档日志

1、切换oracle用户
su - oracle

2、登录 ramn
rlwrap rman target /

3、查看归档日志列表
RMAN> list archivelog all;

查看失效的归档日志列表:
RMAN> list expired archivelog all;

4、删除归档日志
delete archivelog all completed before 'sysdate-10'; 删除十天前的日志
delete force archivelog all completed before 'sysdate-10';

5、删除物理文件不存在的归档日志
RMAN> crosscheck archivelog all; 检查控制文件和实际物理文件的差别。
RMAN> delete expired archivelog all; 同步控制文件的信息和实际物理文件的信息。

下面的命令用于校验归档日志的有效性,列出无效的归档日志,以及以何种方式清除归档日志,列出几种常用的:

DELETE NOPROMPT ARCHIVELOG UNTIL TIME "TO_DATE('XXXX-XX-XX','YYYY-MM-DD')";

delete noprompt archivelog until time "to_date('2016-09-14 18:00:00','YYYY-MM-DD ')"
    
crosscheck archivelog all;                            --->校验日志的可用性

list expired archivelog all;                          --->列出所有失效的归档日志

delete archivelog until sequence 16;                  --->删除log sequence为16及16之前的所有归档日志

delete archivelog all completed before 'sysdate-7';    --->删除系统时间7天以前的归档日志,不会删除闪回区有效的归档日志

delete archivelog all completed before 'sysdate - 1';  --->同上,1天以前的

delete archivelog from time 'sysdate-1';              --->注意这个命令,删除系统时间1天以内到现在的归档日志

delete noprompt archivelog all completed before 'sysdate';  --->该命令清除所有的归档日志

delete noprompt archivelog all;                              --->同上一命令  

Oracle配置归档日志模式log_archive_format的相关参数

归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档日志中.当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库.
日志操作模式:ARCHIVELOG NOARCHIVELOG

检查当前日志操作模式

SELECT log_mode from v$database;

手工归档

从oracle database 10g开始,当将日志操作模式转变未ARCHIVELOG模式时,oracle会自动启动ARCH进程.如果要使用手工归档.那么在改变日志操作模式时必须使用命令ALTER DATABASE ARCHIVELOG MANUAL.

需要注意,使用手工归档方式,数据库管理员必须手工执行归档命令.如果没有执行手工归档命令,日志组的原有内容将不能被覆盖.ALTER DATABASE ARCHIVELOG MANUAL 命令是为了与先前的版本兼容而保留的,.将来的oracle版本会淘汰该命令,使用手工归档方式是,数据库管理员可以执行以下命令归档重做日志:

ALTER SYSTEM ARCHIVELOG ALL;

配置归档进程


---阅读剩余部分---

Oracle开启归档模式及修改归档路径

Oracle10G和11G默认的日志归档路径为闪回恢复区($ORACLE_BASE/flash_recovery_area)。对于这个路径,ORACLE有一个限制,就是默认只有2G的空间,而且不只是归档日志的默认路径,也是备份文件和闪回日志的默认地址,这样的话归档日志锁使用的空间就达不到2G,在没有设置好这个路径大小的情况下,很多系统都遇到过 归档日志满而无法归档导致数据库夯住的问题。
切换到归档模式之前,做一次完全备份,因为非归档日志模式下产生的备份日志对于归档模式已经不可用了.

查看是否为归档模式

SQL> archive log list
Database log mode              No Archive Mode     #数据库日志模式             非存档模式
Automatic archival             Disabled            #自动存档             禁用
Archive destination            USE_DB_RECOVERY_FILE_DEST    #存档终点            USE_DB_RECOVERY_FILE_DES
Oldest online log sequence     13            #最早的联机日志序列        13
Current log sequence           15            #当前日志序列             15

上面的存档终点USE_DB_RECOVERY_FILE_DEST默认就是闪回恢复区($ORACLE_BASE/flash_recovery_area),可以通过下面的SQL查看闪回恢复区的信息。


---阅读剩余部分---

MySQL导出查询结果到csv文件中

select 后面跟上 into outfile, fields terminated by, optionally enclosed by, line terminated by语句实现导出csv

语句的格式与作用
into outfile '导出的目录和文件名'
指定导出的目录和文件名

fields terminated by '字段间分隔符'
定义字段间的分隔符

optionally enclosed by '字段包围符'
定义包围字段的字符(数值型字段无效)

lines terminated by '行间分隔符'
定义每行的分隔符
如导出TB_USER表中ID,USERNAME,NICKNAME,MOBILE四个字段的内容到/tmp/zh.csv文件中,实现sql如下:

select ID,USERNAME,NICKNAME,MOBILE from TB_USER INTO OUTFILE '/tmp/zh.csv'  fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';

每个字段以,分隔,字段内容是字符串的以”包围,每条记录使用rn换行。

CentOS安装rlwrap工具

在Windows下使用SQLPLUS都是可以使用上下左右方向键前后左右翻转移动,每句命令也是可以往前或往后修改,但Linux下却不行,可以使用rlwrap实现这个功能:

安装readline

yum install readline* -y

安装rlwrap

rlwrap官网在这里http://utopia.knoware.nl/~hlub/uck/rlwrap/ 貌似不能稳定访问
可以从这个地址下载不同版本http://download.openpkg.org/components/cache/rlwrap/

wget http://download.openpkg.org/components/cache/rlwrap/rlwrap-0.42.tar.gz
tar xvf rlwrap-0.42.tar.gz
cd rlwrap-0.42
./configure
make
make install

配置环境变量

vi /home/oracle/.bash_profile
添加
alias sqlplus='rlwrap sqlplus / as sysdba'
alias rman='rlwrap rman'
alias rl_asmcmd='rlwrap asmcmd'
wq保存以后,
source /home/oracle/.bash_profile

这样以后使用SQLPLUS,直接输入别名sqlplus即可使用上下翻页键,同理使用rman也可以。

MySQL全量(查询)日志general-log的开启

MySQL的General log开销比较大,一般不建议开启,error日志只记录数据库层的报错,binlog只记录增/删/改的记录,但是没记录谁执行,只记录执行用户名,slowlog虽然详细,但是只记录超过设定值的慢查询sql信息.

只有general-log才是记录所有的操作日志,不过他会耗费数据库5%-10%的性能,所以一般没什么特别需要,大多数情况是不开的,例如一些sql审计和不知名的排错等,那就要打开来使用了.

开启方法

先查看当前状态

mysql> show variables like 'general%';
+------------------+--------------------------------------+
| Variable_name    | Value                                |
+------------------+--------------------------------------+
| general_log      | OFF                                  |
| general_log_file | /data/mysql/data/business-data01.log |
+------------------+--------------------------------------+
2 rows in set (0.00 sec)

现在状态是关闭的,开启下:
可以在my.cnf里添加,1开启(0关闭)
general-log = 1
log = /data/mysql/data/business-data01.log 路径
这样要重启才能生效,比较麻烦





---阅读剩余部分---

常见iptables使用规则场景整理

iptables是Linux中重要的访问控制手段,是俗称的 Linux 防火墙系统的重要组成部分。这里记录了iptables 防火墙规则的一些常用的操作指令。

iptables结构图

netfilter.jpeg
order.png

iptables流程

当数据包到达目标主机时,经过PREROUTING链,经路由之后决定是否转发,不转发则进入INPUT链,到达用户空间。进程对外通信时,经由OUTPUT链出去,路由之后到达POSTROUTING链,经网卡出去。当一数据包经过PREROUTING链发现其不是到达本主机,那么数据包经过FORWARD链,到达 POSTROUTING链转发出去。本机进程对发送数据时,经由OUTPUT链路由之后进入POSTROUTING链出去。
iptables匹配规则时,是自上而下匹配的,匹配到第一条规则时既跳出,否则一直往下匹配,没有则使用默认规则。
iptables规则建立时,首先需要确定功能(表),确定报文流向,确定要实现的目标,确定匹配条件。
尽量遵循以下规则:尽量减少规则条目,彼此间无关联,访问条目大放上面,有关联(同一功能),规则更严格的放上面

五个hook函数分别是PREROUTING,INPUT ,OUTPUT,POSTROUTING,FORWARD,我们把这五个钩子函数称为链,Netfilter实现了几功能,raw ,mangle,nat,filter。我们一般把这几个功能称为表,表之间有优先级关系,从低到高为filter—-nat—-mangle—-raw,表与链之间有对应关系,具体见图表。
raw.png






---阅读剩余部分---

Nginx查看截取切割日志

nginx日志最好实现每天定时切割下,特别是在访问量比较大的时候,方便查看与处理,如果没切割,可以用sed直接切割,

切割日志

查找7月17日访问log导出到17.log文件中:

cat gelin_web_access.log | egrep "17/Jul/2017" | sed  -n '/00:00:00/,/23:59:59/p' > /tmp/17.log

查看访问量前10的IP

awk '{print $1}' 17.log | sort | uniq -c | sort -nr | head -n 10 

查看访问前10的URL

awk '{print $11}' gelin_web_access.log | sort | uniq -c | sort -nr | head -n 10

查询访问最频繁的URL

awk '{print $7}' gelin_web_access.log | sort | uniq -c | sort -n -k 1 -r | more

查询访问最频繁的IP

awk '{print $1}' gelin_web_access.log | sort | uniq -c | sort -n -k 1 -r | more

根据访问IP统计UV

awk '{print $1}' gelin_web_access.log | sort | uniq -c | wc -l

统计访问URL统计PV

awk '{print $7}' gelin_web_access.log | wc -l

根据时间段统计查看日志

cat gelin_web_access.log | sed -n '/17\/Jul\/2017:12/,/17\/Jul\/2017:13/p' | more

Oracle11G用户、表空间、权限、角色、回收、管理及查看用户所有权限

一、登陆

sqlplus / as sysdba;//登陆sys帐户
sqlplus sys as sysdba;//同上
sqlplus scott/tiger;//登陆普通用户scott
sqlplus / as sysdba;//登陆sys帐户
sqlplus sys as sysdba;//同上
sqlplus scott/tiger;//登陆普通用户scott

二、管理用户

A、创建用户的Profile文件
CREATE PROFILE STUDENT LIMIT // student为资源文件名
FAILED_LOGIN_ATTEMPTS 3 //指定锁定用户的登录失败次数
PASSWORD_LOCK_TIME 5 //指定用户被锁定天数
PASSWORD_LIFE_TIME 30 //指定口令可用天数
PASSWORD_LOCK_TIME:用于指定帐户被锁定的天数.
PASSWORD_LIFE_TIME:用于指定口令有效期
PASSWORD_GRACE_TIME:用于指定口令宽限期.
PASSWORD_REUSE_TIME:用于指定口令可重用时间.
PASSWORD_REUSE_MAX;用于指定在重用口令之前口令需要改变的次数.
PASSWORD_VERIFY_FUNCTION;是否校验口令(校验将值改为VERIFY_FUNCTION)
CPU_PER_SESSION:用于指定每个会话可以占用的最大CPU时间.
LOGICAL_READS_PER_SESSON:用于指定会话的最大逻辑读取次数.
PRIVATE_SGA:用于指定会话在共享池中可以分配的最大总计私有空间.需要注意,该选项只使用与共享服务器模式.
COMPOSITE_LIMIT:用于指定会话的总计资源消耗(单位:服务单元).
CPU_PER_CALL:限制每次调用(解析,执行或提取数据)可占用的最大CPU时间(单位:百分之一秒)
LOGICAL_READS_PER_CALL:用于限制每次调用的最大逻辑I/O次数.
SESSIONS_PER_USER:用于指定每个用户的最大并发会话个数.
CONNECT_TIME:用于指定会话的最大连接时间.
IDLE_TIME:用于指定会话的最大空闲时间.

查看一个用户的所有系统权限(包含角色的系统权限)

select privilege from dba_sys_privs where grantee='DATAUSER'  
union  
select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='DATAUSER' );  
























---阅读剩余部分---

浏览器中使用ssh服务管理linux

使用shellinabox可以实现在浏览器中打开ssh操作和使用工具链接ssh服务一样,实现效果如下图:
vbox.png
s.png
42.png
安装方法:

For Debian/Ubuntu
$ sudo apt-get install openssl shellinabox

For RHEL/CentOS
$ sudo yum install openssl shellinabox

For Fedora
$ sudo dnf install openssl shellinabox

Start the Service in systemd based systems.
$ sudo systemctl start shellinaboxd.service

Start the Service in sysvinit based systems.
$ sudo service shellinaboxd start




---阅读剩余部分---

CentOS6.9安装Oracle 11g Release 2、创建监听、实例全记录

系统版本:CentOS release 6.9 (Final)
Oracle版本:Oracle Database 11g Release 2 (11.2.0.1.0)
Oracle 11g Release 2下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-linx8664soft-100572.html

一、初始化系统

系统安装时建议采用mini版,单独分区/data用来安装oracle数据库,关闭SELinux,getsebool: SELinux is disabled

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime    #修改时区为上海
*/30 * * * * /usr/sbin/ntpdate pool.ntp.org   #加入定时任务,30分钟更新一次时间
cat <<EOF>> /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
EOF
sed -i "s/1024/65535/g" /etc/security/limits.d/90-nproc.conf
#修改文件句柄数


---阅读剩余部分---

Oracle11g R2启动Enterprise Manager dbconsole进程

要从客户端浏览器访问 Oracle Enterprise Manager Database Control,必须启动 dbconsole 进程。dbconsole 进程在安装之后自动启动。如果该进程没有启动,则您必须在命令行下手工启动。

以 oracle 用户身份登录操作系统。执行以下命令来查看 dbconsole 进程的状态:

emctl status dbconsole  #查看进程状态

Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0 
Copyright (c) 1996, 2009 Oracle Corporation.  All rights reserved.
https://centos6:1158/em/console/aboutApplication
Oracle Enterprise Manager 11g is not running.

emctl start dbconsole  #启动 dbconsole 进程

Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0 
Copyright (c) 1996, 2009 Oracle Corporation.  All rights reserved.
https://centos6:1158/em/console/aboutApplication
Starting Oracle Enterprise Manager 11g Database Control ........ started. 
------------------------------------------------------------------
Logs are generated in directory /data/app/oracle/product/11.2.0/db_1/centos6_orcl/sysman/log 

emctl stop dbconsole  #停止 dbconsole 进程

Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0 
Copyright (c) 1996, 2009 Oracle Corporation.  All rights reserved.
https://centos6:1158/em/console/aboutApplication
Stopping Oracle Enterprise Manager 11g Database Control ... 
 ...  Stopped. 

---阅读剩余部分---

MySQL索引

MySQL索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。
创建索引时,你需要确保该索引是应用在SQL 查询语句的条件(一般作为 WHERE 子句的条件)。
实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

优点:

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。

缺点:

但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
建立索引会占用磁盘空间的索引文件。

创建索引

在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。

1.ALTER TABLE(添加索引)

添加单个索引的语法:

ALTER TABLE `表名` ADD INDEX `索引名` (`字段名` 顺序) ;
ALTER TABLE `UC_USER_PROPERTY_LEVEL` ADD INDEX `IDX_USER_ID` (`USER_ID` ASC) ;

ALTER TABLE用来添加普通索引、UNIQUE索引或PRIMARY KEY索引。
ALTER TABLE table_name ADD INDEX index_name (column_list)
ALTER TABLE table_name ADD UNIQUE (column_list)
ALTER TABLE table_name ADD PRIMARY KEY (column_list)

其中table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。索引名index_name可选,缺省时,MySQL将根据第一个索引列赋一个名称。另外,ALTER TABLE允许在单个语句中更改多个表,因此可以在同时创建多个索引。





---阅读剩余部分---

MySQL EXPLAIN详解

EXPLAIN显示了MySQL如何使用索引来处理SELECT语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句,一般主要用来SQL查询优化·
使用方法,在select语句前加上EXPLAIN就可以了,如下面的sql查询:

EXPLAIN 
SELECT 
  uc.ID AS userId,
  uc.USER_NAME AS userName,
  uc.USER_PWD AS PASSWORD,
  uc.BIRTHDAY AS birthday,
  uc.EMAIL AS email,
  uc.MOBILE AS mobile,
  uc.NICKNAME AS nickName,
  uc.CREATE_DATE AS createdDate,
  uc.UPDATE_DATE AS updatedDate,
  uc.IS_DEL AS isDel,
  uc.SEX AS sex,
  uc.LAST_LOGIN_DATE AS lastLoginDate,
  uc.USER_MALL AS projectId,
  level.UC_USER_LEVEL_ID AS ucUserLevelId,
  uclevel.LEVEL_NAME AS ucUserLevelName,
  level.RISE_RANK_DATE AS riseRankDate,
  growth.ID AS ucUserGrowthId,
  growth.GROWTH_VALUE AS growthValue,
  point.ID AS ucUserPointId,
  point.BONUSPOINT AS bonuspoint 
FROM
  UC_USER uc 
  LEFT JOIN UC_USER_PROPERTY_GROWTH growth 
    ON uc.ID = growth.USER_ID 
  LEFT JOIN UC_USER_PROPERTY_LEVEL level
    ON uc.ID = level.USER_ID 
  LEFT JOIN UC_USER_LEVEL uclevel 
    ON uclevel.ID = level.UC_USER_LEVEL_ID 
  LEFT JOIN UC_USER_PROPERTY_POINT point 
    ON uc.ID = point.USER_ID 
WHERE uc.IS_DEL = '0' 
ORDER BY uc.LAST_LOGIN_DATE DESC,
  uc.ID DESC 
LIMIT 0, 20;

返回结果如下

+----+-------------+---------+------------+--------+---------------+---------+---------+----------------------------------+------+----------+----------------------------------------------------+
| id | select_type | table   | partitions | type   | possible_keys | key     | key_len | ref                              | rows | filtered | Extra                                              |
+----+-------------+---------+------------+--------+---------------+---------+---------+----------------------------------+------+----------+----------------------------------------------------+
|  1 | SIMPLE      | uc      | NULL       | ALL    | NULL          | NULL    | NULL    | NULL                             | 4728 |    10.00 | Using where; Using temporary; Using filesort       |
|  1 | SIMPLE      | growth  | NULL       | ALL    | NULL          | NULL    | NULL    | NULL                             | 4308 |   100.00 | Using where; Using join buffer (Block Nested Loop) |
|  1 | SIMPLE      | level   | NULL       | ALL    | NULL          | NULL    | NULL    | NULL                             | 4512 |   100.00 | Using where; Using join buffer (Block Nested Loop) |
|  1 | SIMPLE      | uclevel | NULL       | eq_ref | PRIMARY       | PRIMARY | 8       | weixin_db.level.UC_USER_LEVEL_ID |    1 |   100.00 | NULL                                               |
|  1 | SIMPLE      | point   | NULL       | ALL    | NULL          | NULL    | NULL    | NULL                             | 3699 |   100.00 | Using where; Using join buffer (Block Nested Loop) |
+----+-------------+---------+------------+--------+---------------+---------+---------+----------------------------------+------+----------+----------------------------------------------------+
5 rows in set, 1 warning (0.00 sec)

id.png
EXPLAIN出来的信息有12列,分别是id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、Extra,下面对这些字段出现的可能进行解释:



---阅读剩余部分---

php中调用系统命令

hp提供了system(),exec(),passthru()这三个函数来调用外部的命令.
虽然这三个命令都能执行linux系统的shell命令,但是其实他们是有区别的:
system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。

相同点:都可以获得命令执行的状态码

在PHP中调用外部命令,可以用如下三种方法来实现:

1) 用PHP提供的专门函数
PHP提供了3个专门的执行外部命令的函数:system(),exec(),passthru()。
system()
原型:string system (string command [, int return_var])
system()函数和其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。









---阅读剩余部分---

php页面调用vnstat显示机器网卡流量

在php页面上实时显示网卡流量,调用的是vnstat,可以实时、按小时、按月份统计网卡流量
通用安装

debian/ubuntu安装
apt-get install vnstat -y
/etc/init.d/vnstat start
update-rc.d vnstat enable
或
RHEL/CentOS安装:
yum install vnstat -y
/etc/init.d/vnstat start
chkconfig vnstat on

vnstat基本使用命令
vnstat -i eth0 -l #实时流量情况
vnstat -i eth0 -h #按小时查询流量情况
vnstat -i eth0 -d #按天数查询流量情况
vnstat -i eth0 -m #按月数查询流量情况
vnstat -i eth0 -w #按周数查询流量情况
vnstat -i eth0 -t #查询TOP10流量情况
vnstat -i eth0 -q #查询vnstat数据库流量情况
更多命令帮助信息可以 vnstat --help 进行查看。










---阅读剩余部分---

最新

分类

归档

评论

  • 安安: 都是af
  • Liang: 嗯,有点不通顺·
  • 王庭威: “MySQL互为主从...
  • Liang: 贴下编译参数和步骤,...
  • shao3911: 您好,为什么我在编译...
  • aliang: 先看是yum安装还是...
  • aliang: 将原来的nginx安...
  • yen: 3、如果要回滚的话,...
  • yen: 刚好需要升级ngin...
  • 文雨: 一些新的method...

其它