事故是这样出现的
原来给ubuntu8.04版本写过一个自动化安装运行环境的脚本,能自动配置nginx, apache2, mysql, java, tomcat等软件及系统的相关设置。
而这次需要安装一台装有ubumtu9.10的server,没仔细考虑版本差异,只是把apt的sources.list文件作了处理。其他的让脚本自动安装。
结果就卡在了mysql的安装上,装完运行不起来,并直接导致新版的phpmyadmin连不上mysql创建不了phpmyadmin的配置数据库,也安装失败。
回头查脚本,发现安装mysql的命令里只作了将原来的my.cnf文件覆盖到/etc/mysql/my.cnf。看来是老版本的mysql配置文件与新版mysql不兼容。
得,因为是直接覆盖掉原文件,没留原始配置文件的备份,而手头也没有9.10的ubuntu,所以第一时间想到的就是将mysql删除后重新装。
问题就此开始复杂化
运行apt-get remove mysql-server后,说安装过程中的dpkg报错,应该是phpmyadmin没安装失败导致的,于是先apt-get remove phpmyadmin,但又卡在了phpmyadmin要先删除mysql里的配置数据库,却连不上mysql,因为这时mysql根本就没运行。干!
想不到原因,直接重启再说。因为是远程操作看不到控制台输出,重启完成后进系统运行ps aux|grep mysql居然发现mysql运行起来了。以为重启前的安装出错是灵异现象。直接进phpmyadmin想看看是否一切ok。这时却说找不到mysql的pid文件。但进程中却明明有mysql进程在运行。怪异得很。
没折,还是先把这两个家伙删除干净再重新来,当删除完phpmyadmin和mysql后发现/etc/mysql目录下的东西都还在,重新安装后里面的配置都没重新安装,可能是ubuntu认为你重新安装只是为了修复程序本身,却不去改动用户的自定义配置文件。于是就想到,我把配置文件目录手动删除,这下你安装时总得给我重写了吧。
得,当我这么操作完又安装一遍之后,mysql报错说找不到/etc/mysql/my.cnf文件。nnd,这下头大了,手动删除它居然也不重写my.cnf文件。但这时其实mysql已经在运行了,从phpmyadmin也能进到mysql里,但会报一些警告信息。没有my.cnf是绝对不行的。目前没法子了只得google,找到说需要先删除再安装时连mysql-common这个包一起安装,因为初始配置文件是来自这个包。但是按此方法一试还是没用。还报出新的错误:
/etc/mysql/debian-start: No such file or directory
最后从ubuntu的论坛找到了 这篇文章 才解决, 还有 这篇也是正解 。其实也是so easy,是自己对 apt-get命令不熟悉:
apt-get autoremove --purge mysql-server apt-get install mysql-server
最后的最后总结教训
修改任何/etc/下文件时最好先作个备份。
多熟悉系统命令,其实删除这步也是卡在了--purge这个参数上。我查--help知道有这个purge,但却用为:apt-get purge mysql-server
faint~~
E: Sub-process /usr/bin/dpkg returned an error code (1)cd /var/lib/dpkg/
sudo mv info info.bak
sudo mkdir info
然后再:
sudo apt-get install -f还是不行,看来得再删除一次,把配置文件信息也一并删除
apt-get autoremove --purge mysql*
reboot
sudo aptitude install mysql-server-5.1 重新下载安装