手工编译内核安装virtualbox出错提示Please install the build and header files for your current Linux kernel

核心提示:

检查/lib/module/{内核版本号}/kernel/目录下的文件(符号链接) header,及source是否有效,它们应该链到你的内核编译目录里

使用centos 6.x的linux,嫌自带内核太老,自己编译的内核3.0.32.

virtualbox长期没更新,今天更新一下,到vbox官方下载安装包VirtualBox-4.2.12-84980-Linux_x86.run,sh 运行之,但得到提示:

[root@fsc download]# sh VirtualBox-4.2.12-84980-Linux_x86.run
Verifying archive integrity... All good.
Uncompressing VirtualBox for Linux installation............
VirtualBox Version 4.2.12 r84980 (2013-04-12T10:19:13Z) installer
Please install the build and header files for your current Linux kernel.
The current kernel version is 3.0.32
Problems were found which would prevent VirtualBox from installing.
Please correct these problems and try again.

印象中编译内核时安装装过header,要不然上次是不可能安装成功的。

思考原因,是否因为内核某些地方出错了原因,如某些环境变量或者什么东西,实在不想再次重新编译内核,麻烦,好像还得另外下载并编译网卡驱动。于是考虑找个别人编译好的rpm包装上,找到了一个叫 ELRepo 的项目,提供一系列的内核rpm包 http://elrepo.org/linux/kernel/el6/i386/RPMS/ 看上去还是相当不错的,可以安装他们的yum源。

正准备下载,突然想到,机器换固态硬盘了,是直接使用cp带-p参数拷过来的,而家目录里的很多文件在机械硬盘上,通过符号链接链到~/opdata,当时的内核文件就在其中。联想到/lib/module/`uname -r`/目录里有两个符号链接,是链接到编译内核的目录里的。是否安装kernel-header其实并没有将相应文件拷到某个目录里,而只是符号链接过去。去检查一下。

[root@fsc download]# cd /lib/modules/3.0.32/kernel/
[root@fsc kernel]# ls -alh ..
总用量 3.8M
drwxr-xr-x.  4 root root 4.0K 12月  2 11:05 .
dr-xr-xr-x. 16 root root 4.0K 6月   2 10:47 ..
lrwxrwxrwx.  1 root root   39 5月  26 2012 build -> /home/feng/software/kernel/linux-3.0.32
drwxr-xr-x. 12 root root 4.0K 6月  24 2012 kernel
......
-rw-r--r--.  1 root root 964K 12月  2 11:05 modules.usbmap
lrwxrwxrwx.  1 root root   39 6月  24 2012 source -> /home/feng/software/kernel/linux-3.0.32

果然,build, source两个链接文件,还是链接到原来的位置,而且被shell以红背景提示是“死链接”。

删除这两个链接文件,并重建有效的链接

rm build source
ln -s /home/feng/optdata/software/kernel/linux-3.0.32/ build
ln -s /home/feng/optdata/software/kernel/linux-3.0.32/ source

再次运行sh VirtualBox-4.2.12-84980-Linux_x86.run,virtualbox顺利安装。

mysql join查询时,参与join的字段字符集编码不同,对性能影响是巨大的

本文一直以来都只是个标题,在三个月后的今天,熬夜补上内容。

直接上代码:

建utf-8编码的表 t1:

CREATE TABLE IF NOT EXISTS `t1` (
  `name` varchar(50) NOT NULL DEFAULT '',
  KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

随便插入些数据,数量大一点,后面实验结果更清晰,偷个懒,构造随机字符串插入语句

insert into t1(name) 
select concat(
char(round((rand())*25)+97),
char(round((rand())*25)+65),
char(round((rand())*25)+65),
char(round((rand())*25)+97),
char(round((rand())*25)+65),
char(round((rand())*25)+65),
char(round((rand())*25)+97),
char(round((rand())*25)+65)
)

每次执行插入一条记录,用你熟悉的脚本(python,php,shell等都行)写个循环,执行一万次以上。

将该表复制成一个新表t2,删除一部分数据,1000条左右即可。(推荐使用phpMyAdmin)

再将t2复制为t3,并将字段改为gb2312编码。

使用一个left join语句,写一个语句,查出t2/t3比t1少了哪些记录。

语句很简单,如下:

SELECT SQL_NO_CACHE t1.name, t2.name
FROM t1
LEFT JOIN t2 ON t1.name = t2.name
WHERE t2.name IS NULL 
LIMIT 0 , 30

注意加入 SQL_NO_CACHE ,禁用mysql缓存。

先看编码一致的t2表,phpMyAdmin里执行结果:

显示行 0 - 29 ( 1,129 总计, 查询花费 0.0010 秒)

平均耗时大概为0.0010秒

SELECT SQL_NO_CACHE t1.name, t3.name
FROM t1
LEFT JOIN t3 ON t1.name = t3.name
WHERE t2.name IS NULL 
LIMIT 0 , 30

phpMyAdmin执行结果:

显示行 0 - 29 ( 30 总计, 查询花费 0.1871 秒)

差两个数量级!

查询语句解释:

t2

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index NULL name 152 NULL 11129 Using index
1 SIMPLE t2 ref name name 152 test.t1.name 1 Using where; Using index; Not exists

t3

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index NULL name 152 NULL 11129 Using index
1 SIMPLE t3 index NULL name 102 NULL 10000 Using where; Using index; Not exists

附带上本次实验的三个表及数据
实验用表导出备份test.sql

 

phpmyadmin删除“追踪”(就是在表名旁的眼睛图标)/phpmyadmin(v3.3+)追踪功能简介

数据库phpmyadmin里的表pma_tracking,打开,里面即是追踪项的配置记录,删掉就可以了。

使用新版本的phpmyadmin,试用里面的追踪功能,不过用过后不知道怎么删掉了。于是google到这里,网上有人问同样问题,但没人回答。于是只好做罢,自己动手,丰衣足食。

猜想这是否是phpmyadmin本身的功能,而非mysql的;因为之前google这个问题时,搜索mysql trace并没有发现说mysql有这样的追踪功能。

于是查找phpmyadmin库,见表pma_tracking打开,删除记录,问题解决。

 

附:phpmyadmin官方中文文档的“追踪”功能简介:

$cfg['Servers'][$i]['tracking'] 字符串
自 3.3.x 起可以使用追踪功能。它可以帮你追踪每个通过 phpMyAdmin 执行的 SQL 命令。它支持记录数据修改和数据定义语句。启用后还可以创建数据表的版本。

创建版本会造成两个影响:

  • phpMyAdmin 保存当前数据表的快照,包括结构和索引。
  • phpMyAdmin 针对当前数据表记录的所有修改结构和/或数据的命令都将与版本关联。

当然你也能查看追踪到的修改。在"追踪"页里每个版本都会有一份完整的报告。你可以在报告中搜索,如你可以只列出一段时间内的语句。若想根据用户名搜索可以输入 * 表示任意用户或者输入 ',' 分隔的用户列表。你还可以导出 (包括搜索结果) 报告为文件或者临时数据库。

要启用此功能:

  • 设置好 pmadb 和 phpMyAdmin 高级功能
  • put the table name in $cfg['Servers'][$i]['tracking'] (e.g. 'pma_tracking')
$cfg['Servers'][$i]['tracking_version_auto_create'] 布尔
设置追踪系统是否自动为数据表和视图创建版本。默认为 false 。

若设为 true 然后你通过

  • CREATE TABLE ...
  • CREATE VIEW ...

创建了一张表或视图并且它当前没有任何版本,系统将会自动为你创建一个版本。

一次linux下mysql服务优化(环境为vps上的centos5)

一台vps服务器,使用centos 5操作操作系统,销售商声称是“上海戴尔VM/HV(IP)512M内存20G硬盘”,基于xen虚拟化技术,算是比中低端的vps了,上面跑一个ecshop的商城系统。

主要运行的服务为

apache (httpd-2.2.3-53.el5.centos.3/php-5.1.6-27.el5_7.5)

mysqld (mysql-server-5.0.95-1.el5_7.1)

ecshop商城上线后,访问量还并不很大,但web经常卡死,几乎访问不动。ssh登录服务器后,内存用尽,连swap都使用过半。top显示有几十个httpd进程;mysql占用cpu持续超过50%,经常达80%甚至100%, 这个状况,不死就怪了。

起初以为是apache子进程太多了,修改apache配置,只开8个子进程;同时还注意到有个yum 进程在运行,于是停掉apache,mysql,运行yum update ,升级一下系统。当时是周五下午,搞好后看起来比较正常了,

然而到了周一,问题依旧,apache进程数多达100多个!

网上有人说apache进程数过多,很可能不是apache的问题,而是web应用的问题,导致一些子进程假死或死掉。通过phpmyadmin查看mysql的进程,很多类似如下的语句:

SELECT a.attr_name
FROM `ecs_attribute` AS a, `ecs_goods_attr` AS ga, `ecs_goods` AS g
WHERE (
g.cat_id
IN ('105', '171', '173', '106', '111', '108', '113', '151', '112', '157', '153', '152', '110', '150', '147', '155', '148', '156', '172', '109', '149', '114')
OR g.goods_id
IN ('')
)
AND a.attr_id = ga.attr_id
AND g.goods_id = ga.goods_id
AND g.is_delete =0
AND g.is_on_sale =1
AND g.is_alone_sale =1
AND a.attr_id = '219'

而且查询执行时间多数比较长,经常出现多个耗时达5秒以上的语句在执行。状态经常是 Copying to tmp table,或sending data. 怀疑mysql问题比较大,开始关注mysql配置,通过phpmyadmin查看mysql变量,与一台运行平稳的实体服务器比对,主要看是缓存、临时表等变量。果然,这些值都相当的小。

查看mysql配置文件如下:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

参看windows版mysql官方自带的配置文件(\MySQL\MySQL Server 5.0\my-large.ini),修改配置文件如下:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql

myisam_sort_buffer_size=64M
key_buffer = 64M
table_cache = 128
read_buffer_size = 1M
read_rnd_buffer_size = 1M
sort_buffer_size = 2M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M

# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

重启mysql,apache,再通过phpmyadmin看查询进程,比之前大为改观。通过几个小时的观查,已经较少出现查询耗时超过5秒的进程。基本上每2、3秒重新一下一下phpmyadmin的“进程”,有一半以上机会看不到正在执行的语句。也就是说,大多数语句都可以很快执行完,以致于较很少有机会看到它们。这个现象与那台参考的实体服务器上的mysql相同。

通过free查看内存使用情况:

[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           503        469         33          0         25        305
-/+ buffers/cache:        138        364
Swap:         1023         23       1000

swap几乎没有使用,物理内存(除去缓存)占用并也不高。

通过top查看进程:

top - 13:19:21 up 165 days,  3:11,  2 users,  load average: 0.47, 0.36, 0.52
Tasks: 101 total,   1 running,  98 sleeping,   2 stopped,   0 zombie
Cpu(s): 20.3%us, 12.5%sy,  0.0%ni, 62.1%id,  0.0%wa,  1.0%hi,  4.1%si,  0.0%st
Mem:    515268k total,   504416k used,    10852k free,    26712k buffers
Swap:  1048568k total,    23712k used,  1024856k free,   314496k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 6848 mysql     23   0  225m  56m 4432 S 32.1 11.3  33:48.61 mysqld
 7399 apache    15   0 33516  13m 4384 S  0.0  2.7   0:09.48 httpd
 7401 apache    15   0 33328  13m 3884 S  2.6  2.6   0:08.00 httpd
 7406 apache    15   0 32864  12m 3848 S  0.0  2.5   0:07.92 httpd
 7429 apache    15   0 32704  12m 3528 S  0.0  2.4   0:00.57 httpd
 7400 apache    15   0 32672  12m 3740 S  5.6  2.4   0:09.77 httpd
 7428 apache    15   0 32684  12m 3544 S  0.0  2.4   0:01.34 httpd
 7404 apache    15   0 32348  12m 3736 S  0.0  2.4   0:08.98 httpd
 7407 apache    15   0 32100  12m 3884 S  0.0  2.4   0:08.02 httpd
 7411 apache    15   0 32436  12m 3848 S  0.0  2.4   0:06.43 httpd
 7405 apache    15   0 32184  11m 3740 S  0.0  2.4   0:09.60 httpd
 7408 apache    15   0 32432  11m 3588 S  0.0  2.4   0:07.21 httpd
 7427 apache    15   0 32368  11m 3540 S  0.0  2.4   0:00.98 httpd
 6874 root      18   0 27512 9448 5672 S  0.0  1.8   0:00.40 httpd
 1765 root      34  19 27884 3200 1148 S  0.0  0.6   9:33.82 yum-updatesd
 7112 root      18   0 10216 2980 2372 S  0.0  0.6   0:00.20 sshd
 7024 root      15   0  7620 2664 1952 T  0.0  0.5   0:00.10 vim
 7114 root      15   0  6656 1608 1188 S  0.0  0.3   0:00.05 sftp-server
12180 root      15   0 25424 1188  804 S  0.0  0.2   0:34.97 snmpd
 5411 root      15   0  8520 1124 1120 T  0.0  0.2   0:00.01 mysql
 5085 root      15   0  2688 1028  800 S  0.0  0.2   0:00.20 bash
 6801 root      22   0  2504 1000  856 S  0.0  0.2   0:00.00 mysqld_safe
 7432 root      18   0  2292 1000  792 R  0.3  0.2   0:00.24 top
 1429 dbus      15   0  2964  792  544 S  0.0  0.2   2:55.54 dbus-daemon
 5077 root      15   0 10220  792  668 S  0.3  0.2   0:04.47 sshd
12307 root      15   0  9348  576  408 S  0.0  0.1   0:05.80 sendmail
12197 root      20   0 13564  572  412 S  0.0  0.1   0:04.28 snmptrapd
...

mysql的内存占用也不高,httpd进程数目也正常。

也就是说,改后的配置参数,整个vps服务器运行状态还是比较正常。

只是因为vps本身性能并不高,而访问量较多时候load average值达5以上;不过即便这时,网站还能访问;之前假死时,页面超过半分钟都打不开的。

fckeditor清理word代码,默认勾选"清理 CSS 样式"

修改文件

editor/dialog/fck_paste.html

大概339行

                    <br />
                    <input id="chkRemoveStyles" type="checkbox" checked="checked" />
                    <label for="chkRemoveStyles" fcklang="DlgPasteRemoveStyles">
                        Remove Styles definitions</label>

加入 checked="checked" 即可.

效果如图:

firefox弹出窗口错在新标签里打开/phpMyAdmin

使用phpMyAdmin,打开编辑sql语句,正常情况下是在新窗口中打开的,但突然变成新标签了,而且firefox的主窗口大小变成sql语句编辑窗口那么大小,很是难受。

之前也遇到过这种情况,当时是把当前用户目录下的firefox文件全部删掉(或者移走),这样对当前用户而言firefox就成了第一次使用,要重新配置,重新安装插件(当然也可以从备份文件里拷回相应目录、文件),这是一件很麻烦的工作。

这种问题出现过几次了。上次通过删除部分文件的方式,找到问题在于文件prefs.js。该文件里面很多配置项目,似乎是about:config配置项目保存的地方。但没有找到具体是哪一行或几行。

这次就单独针对本文件处理,折半法,删除一半,找问题在于哪一半,然后在有问题的一半里再删除其中一半....如此循环(或许叫递归),最终发现问题在于这样的一行:

user_pref("browser.link.open_newwindow.restriction", 0);

把这一行删掉,就可以了。不过这一行什么时候被添加上,什么时候会出现这样的问题,还不清楚。

Selenium的安装使用

简述

Selenium是个针对浏览器的可编程的自动化工具,通过一致的编程接口用于控制浏览器打开URL、点击页面上链接等。尤其适合做机械的、重复的、固定的操作。有Java, Python, C#, Ruby等多种编程接口。

在实际使用中,推荐把Selenium安装在单独的机器(如虚拟机)上,而在其它的机器上通过编程接口操纵它们。没错,这里用的是“它们”,即你可以有很多Selenium机,而只在(另外的)一台机器上跑控制主机(叫“Selenium Client")。

各种现代浏览器都是支持的,推荐使用Firefox ESR版。

安装

因为Selenium依赖Java环境,需要事先安装JDK,并确认已设置好环境变量PATH.

下载安装Selenium服务器端,官方下载页Selenium Standalone Server,在服务器端适合的目录里,比如保存为 C:\tools\selenium\selenium-server-standalone-3.xxx.yy.jar  ,设置一个启动脚本 run_selenium_server.bat 内容为如下一行
java -jar C:\tools\selenium\selenium-server-standalone-3.xxx.yy.jar

安装好浏览器,把浏览器的安装目录放到PATH环境变量中。典型PATH变量示例:

在官方下载页的 Third Party Drivers, Bindings, and Plugins ,找您浏览器的驱动,下载,然后解压缩到浏览器的安装目录中。

使用

参考官方下载页的 Selenium Client & WebDriver Language Bindings ,有多种编程语言。

Python版编程接口  https://seleniumhq.github.io/selenium/docs/api/py/index.html

某些问题

如果浏览器的更新到版本,旧的Driver可能不再适配,就要下载新版本Driver并覆盖掉旧版。

 

 

 

centos 6 linux下禁用触摸板(通过命令行实现)

禁用触摸板

synclient TouchpadOff=1

启用触摸板

synclient TouchpadOff=0

synclient 可以设置很多参数,查看如下

[feng@fsc ~]$ synclient -l
Parameter settings:
LeftEdge                = 1781
RightEdge               = 5579
TopEdge                 = 1646
BottomEdge              = 4582
FingerLow               = 24
FingerHigh              = 29
FingerPress             = 255
MaxTapTime              = 180
MaxTapMove              = 245
MaxDoubleTapTime        = 180
SingleTapTimeout        = 180
ClickTime               = 100
FastTaps                = 0
EmulateMidButtonTime    = 75
EmulateTwoFingerMinZ    = 280
EmulateTwoFingerMinW    = 6
VertScrollDelta         = 111
HorizScrollDelta        = 111
VertEdgeScroll          = 0
HorizEdgeScroll         = 0
CornerCoasting          = 0
VertTwoFingerScroll     = 1
HorizTwoFingerScroll    = 1
MinSpeed                = 0.4
MaxSpeed                = 0.7
AccelFactor             = 0.00896057
TrackstickSpeed         = 40
EdgeMotionMinZ          = 29
EdgeMotionMaxZ          = 159
EdgeMotionMinSpeed      = 1
EdgeMotionMaxSpeed      = 446
EdgeMotionUseAlways     = 0
UpDownScrolling         = 1
LeftRightScrolling      = 1
UpDownScrollRepeat      = 1
LeftRightScrollRepeat   = 1
ScrollButtonRepeat      = 100
TouchpadOff             = 0
GuestMouseOff           = 0
LockedDrags             = 0
LockedDragTimeout       = 5000
RTCornerButton          = 0
RBCornerButton          = 0
LTCornerButton          = 0
LBCornerButton          = 0
TapButton1              = 1
TapButton2              = 3
TapButton3              = 2
ClickFinger1            = 1
ClickFinger2            = 1
ClickFinger3            = 1
CircularScrolling       = 0
CircScrollDelta         = 0.1
CircScrollTrigger       = 0
CircularPad             = 0
PalmDetect              = 0
PalmMinWidth            = 9
PalmMinZ                = 199
CoastingSpeed           = 0
PressureMotionMinZ      = 29
PressureMotionMaxZ      = 159
PressureMotionMinFactor = 1
PressureMotionMaxFactor = 1
GrabEventDevice         = 1
TapAndDragGesture       = 1
AreaLeftEdge            = 0
AreaRightEdge           = 0
AreaTopEdge             = 0
AreaBottomEdge          = 0

方法参考于 http://forum.ubuntu.org.cn/viewtopic.php?t=240353

Pages: Prev 1 2 3 4 5 Next