下午刚回家就有人报告45s服务器老是500,于是爬上去看了下。发现php老重启,于是把iis重启了一下。接着顺手把mysql也重启了一下,这一重启把mysql搞得再起不能了= =。半天没搞懂为什么。后来把系统也重启了还是没法恢复,mysql错误日志和windows系统日志都看不出问题,mysql启动后就卡住了。
没办法。打开万能的Process Monitor,这才发现mysql在不断的读取C:\Windows\Temp下的文件,且文件名都是sess_开头的,这才发现是php session搞的鬼。本来以前php的session保存目录都被设置在php自身目录下的tmp目录中的,但是上次更新php后iis 的php manager自动给设回C:\Windows\Temp了。没办法用del sess_*来删除这些session文件。然后重设的php及mysql的配置。
php设置参考了php session.save_path设置中的N值设置来优化磁盘性能,结合从php源码目录中的ext/session下找到的mod_files.bat来辅助生成session子目录。mod_files.bat的参数如下
Usage mod_files.bat <basedir> <depth> [hash_bits]
Where <basedir> is the session directory
<depth> is the number of levels defined in session.save_path
[hash_bits] is the number of bits defined in session.hash_bits_per_character
php默认配置session.hash_bits_per_character为5,我打算把N设为3,于是输入”mod_files.bat tmppath 3 5“来生成session的临时文件目录。然后相应的把php配置文件中的session.save_path值改成”3;tmppath“,上面2处的tmppath为选择的session存储路径,建议php配置文件中用绝对路径。
mysql则在配置文件中的[mysqld]下添加了tmpdir的配置,在mysql所在目录新建了一个temp文件夹然后把tmpdir的值指向了那个目录。
至此问题解决了