博客基本恢复运行

!本文可能 超过1年没有更新,今后内容也许不会被维护或者支持,部分内容可能具有时效性,涉及技术细节或者软件使用方面,本人不保证相应的兼容和可操作性。

今天早上的MySQL的崩溃让我下定决心要升级老旧的MySQL,哪知道遇到了一堆麻烦的事情,也让我感到服务器升级前一定要慎重再慎重的重要性。

首先就是MySQL就够我折腾的了,升级到5.5版本,本来以为只需要apt-get install就可以解决的问题,但是出现了杯具的错误,首先是Unable to set password for the MYSQL root…This may happened because the account already has a password…subprocess installed post-installation script return error exit。然后mysqld守护进程启动失败!于是想是不是MySQL 5.1没有卸载干净?本来是想直接从5.1升级的,结果死活升级不了,于是使用apt-get dist-upgrade,但是提示需要REMOVE mysql-server,下定决心后按下y回车,然后老旧的MySQL华丽丽的被卸掉了。好了,后来我采取下面两句罗列并删除所有和mysql有关的package:

dpkg --get-selections | grep 'mysql-' | awk '{print $1}'
# purge表示清除配置文件,也就是彻底删除
apt-get purge package1 package2 ...

接着使用dotdeb的源,出现mysql-server: Depends: mysql-server-5.5 but it is not going to be installed,然后提示缺少什么perl库(perlapi),死活装不了啊,然后好不容易找到了这个库的源,更新,安装。又出错了,和刚才的问题一样,我陷入了沉思……仔细搜索了安装的输出,找到这么一句话“Unknown/unsupported storage engine: InnoDB”原来老旧的配置文件my.cnf没有被清除掉,里面配置是skip-innodb,而MySQL5.5 GA默认引擎为InnoDB,所以出错了。两种解决办法:一是启用InnoDB;二是通过在my.cnf的[mysqld]节配置default-storage-engine=MyISAM,来修改默认存储引擎。做完这些终于勉强把新版本的MySQL装上去了。

接下来是重新安装PHPMyAdmin,仍然使用万能方便的apt-get install phpmyadmin,结果提示Apache什么的,没理它,继续安装,终于装好了,然后因为需要,重启了VPS,结果重启后,当进入系统时我差点把喝的水喷到屏幕上,竟然给我搞了个Apache2替换了我的Nginx,进程里N多Apache2,我可怜的内存就这样被消耗了。赶紧卸载:

sudo apt-get purge apache2 apache2.2-common
sudo apt-get purge apache2-mpm-prefork apache2-utils
sudo apt-get purge apache2.2-bin libapache2-mod-php5
sudo apt-get autoremove apache2
sudo rm /etc/apache2 -rf
sudo rm /etc/init.d/apache2

然后通过invoke-rc.d nginx start看看我的Nginx是不是还活着,还好Nginx还在,勉强恢复了运行,但是PHP页面还是显示502 Bad Gateway,看来php-cgi放假了,ps aux一看果然找不到php-cgi。赶紧invoke-rc.d php-cgi start启动。

结果相当不顺利,提示:“php-cgi unable to open pidfile php.pid”,跑到/var/run里面一看,原来这个pid文件应该在/var/run/www目录里面的,结果www目录没有了,当然无法创建了:

cd /var/run
mkdir www
chown www-data:www-data www

做完这些启动php-cgi,测试了一下WordPress,WordPress运行竟然也出错了,开启wp-config.php里面的WP_DEBUG为true,再次运行,PHP报错如下:

Fatal error: Call-time pass-by-reference has been removed in...

意思是调用时引用传参已经被移除了,就是不能通过function(&$a)这种方式传参调用函数。奇怪的是为什么我以前没有遇到过?继续查看发现PHP竟然被升级到最新版本5.4了,凹,万能的apt-get,既然已经升级就只有改WordPress了,好在出错的主要是其中的插件,我把不需要的给禁用,还有些自己改了插件代码,勉强能够运行了。我想升级了php,有些扩展需要重新编译了,比如eAccelerator,结果编译eAccelerator出现了“error zend_class_entry has no member named line_start”编译错误,看来又是和PHP 5.4有关系,eAccelerator貌似已经停止开发了,所以只有放弃,后改用APC。

这还不算完,当我再次重启VPS后,php-cgi又挂了,还是之前的问题:/var/run/www目录又神奇消失了,好在没有帮我把apache又装上去。算了,我也不想纠结于这个问题,干脆提前换php-fpm吧,apt-get install php5-fpm。

这个搞定后浏览了下博客,还算正常,但是接着又出现错误,PHP报错“Fatal error: Internal Zend error – Missing class information for in /MY PATH/wp-super-cache/wp-cache-base.php on line 5”,wp-super-cache又有问题了!上网搜索一下,找到《SuperCache “Internal Zend error” WTF?》,看来是和APC有关系,楼下老兄给出办法:

echo "apc.filters=wp-cache-config" >> /etc/php5/conf.d/apc.ini
echo "apc.include_once_override=0" >> /etc/php5/conf.d/apc.ini

姑且先试一下,不行的话只有停用APC了。最后想反正已经用了php-fpm了,下次php-cgi可以不启动了,遂决定update-rc.d -f php-cgi remove将php-cgi的启动项移除,结果又失败!算了,这个不影响大局,先凑合着吧。

今天算是吃尽升级的苦头了,伤不起啊。

参考文档:《APCとWP Super Cacheを併用していると500エラーがたまに出る問題の解決策》

若无特别说明,本网站文章均为原创,原则上这些文章不允许转载,但是如果阁下是出于研究学习目的可以转载到阁下的个人博客或者主页,转载遵循创作共同性“署名-非商业性使用-相同方式共享”原则,请转载时注明作者出处谢绝商业性、非署名、采集站、垃圾站或者纯粹为了流量的转载。谢谢合作!

请稍后...

发表评论

电子邮件地址不会被公开。 必填项已用*标注