Ubuntu 下移动 MySQL 的默认目录

最近配置了一台 Ubuntu 1404 的服务器,装好 MySQL 之后,准备把 MySQL 的数据目录(datadir)移动到其它地方(/srv/mysql),之前在 Debian 下面的话,直接做完下面几步就好了:

# service mysql stop
# cp -rp /var/lb/mysql /srv/mysql
# 在 my.cnf 中修改 datadir = /srv/mysql 
# service mysql start

但,这次在 Ubuntu 下直接启动不成功,抛出 start: Job failed to start,Google 之,发现原来在 Ubuntu 中引入了一个 AppArmor 的安全模组,它可以界定单个程序进入一组文件列表。

所以在 Ubuntu 下还需要做一步操作:

/srv/mysql/ 目录加入到 mysqld 的目录列表中去,编辑 /etc/apparmor.d/usr.sbin.mysqld

# vim /etc/apparmor.d/usr.sbin.mysqld

作以下修改

...
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
+ /srv/mysql/ r,
+ /srv/mysql/** rwk, 
...

重启 apparmor

# /etc/init.d/apparmor restart

然后启动 MySQL 就不会报错了。

# service mysql restart

关于 AppArmor 的官方介绍:https://help.ubuntu.com/14.04/serverguide/apparmor.html

PHP运行于fcgid模式时,上传大文件抛500错误

我在pma上试图导入一个SQL文件时,pma抛给我一个500错误,看日志后发现错误日志为:

mod_fcgid: HTTP request length 135225 (so far) exceeds MaxRequestLen (131072)

我的php是运行在mod_fcgid模式下的,看上去是因为HTTP的请求长度太长,大于现有的131072最大请求长度。看了fcgid的配置文件后,发现并没有配置过MaxRequestLen的参数。看来这个131072的配置是默认的了。于是在fcgid的配置文件里加入这个配置,15728640是15M,因为我的php.ini中设置的最大POST长度是15M,所以把它们设置长一样的:

  MaxRequestLen 15728640

重启APACHE后,上传,导入,OK~

diff的使用及制作patch

VPS上的LANMP都是自己编译出来的,因为个人比较追求新的发布,所以一有新的版本发布,就会上down下来编译更新。之前都会对源码做些个人化的修改后再编译,就经常要对新的发布版本做一样的修改。经常性地这样手动更改很麻烦,所以就想到了制作patch补丁。

diff工具的使用

diff [OPTION]... FILES

FILES 表示多个文件或目录
说明:该命令告诉使用者,为了使文件,如FILES一致,需要修改它们的哪些行。如果用 “-“表示 FILES,则表示标准输入。如果 FILES 是目录,那么 diff 将使用该目录中的同名文件进行比较。
继续阅读diff的使用及制作patch

apache2上配置php-fastcgi


一直以来配置LAMP都会让php以apache handler的方式运行,虽然这样的运行模式会非常高效,但一直觉得它很占我VPS的资源,可怜的128M内存。所以尝试将php以fastcgi的模式运行。

安装

首先安装apache的fastcgi模块,apache下的fastcgi模式有两个:fastcgi_module与fcgid_module,比较后发现fcgid_module比较有优势,所以我选择了fcgid的模块,可以从源安装,也可以从官方下载然后自己编译。图方便,我直接从源安装:

apt-get install libapache2-mod-fcgid

接下去安装php-cgi

apt-get install php5-cgi

如果自己编译的话,记得去掉–with-apxs2,并加上–enable-cgi编译选项。
继续阅读apache2上配置php-fastcgi