做seo优化就难免与网站打交道,我们很多SEO学员做网站时间长了,购买的虚拟主机总觉得速度不给力,还动不动挂掉,随着现在阿里云ECS价格不断下降,手上有2、3个网站的人几乎都会选择性价比更高的ECS云服务器,不想折腾的可能会选择轻量应用服务器,但配置受限,软件版本很低,也很难体验到速度和效率更高的mysql和php,最主要是性价比也确实不高,一台轻量应用服务器再加2、300元足可以配一台低配的标准的ECS云服务器了,数据库和php都可以选择自己想要的。
前两天小编在折腾公司香港服务器的时候就遇到了一个非常棘手的问题,如果处理不慎,也可以说损失惨重,但我不能放弃,在这里做个小记。
自mysql5.5版本以后,随着大家对Mysql数据库要求越来越高,也有越来越多的服务器环境在安装Mysql数据库的时候默认使用InnoDB数据库引擎做为默认引擎,而之前使用MyISAM数据库引擎的人也为了应对复杂的事务处理和高并发而转向InooDB。
InnoDB数据库引擎应对复杂事件和并发是好很多但在这些好处面前,以前的网站运营人员也面临一个问题,那就是偶然有一天,你的服务器上数据库因一个误操作导致数据库服务挂掉了,怎么重启都重启不起来。这个时候,很多人都会想到把数据库文件备份,重新安装不就解决了吗?想法很美好,但现实确不是那么回事,innodb类型的数据库直接拷文件过去根本就读不出来。
小编以前使用的数据库默认数据库引擎都是MyISAM,网站换服务器的时候,只需要把数据库文件打包复制到新的服务器就可以了,前段时间由于想尝试新的服务器软件和PHP7.2带来的优越性能,安装数据库的时候选择了mysql5.7.22版本,默认的数据库引擎则选择了InnoDB,昨天检查服务器的时候,发现数据库日志里面产生了很多错误提示,经检查,是一个wordpress网站的数据库一个表因不能被InnoDB读取不断的产生错误日志,通过phpmyadmin 对有问题的进行修复,由于数据库使用的数据库引擎是MyISAM,于是我点了修复,结果提示:2006, MySQL server has gone away ,然后我就想着试一下优化怎么样,点击后,phpmyadmin控制面板的root账号直接退出了,再登录就提示:connect(): (HY000/2002): No such file or directory ,再一看服务器上的网站,所有网站打开时都提示数据库连接失败,这下玩大了!
但知道原因是数据库服务挂了,连接ssh重启数据库服务,结果提示:Starting MySQL. ERROR! The server quit without updating PID file (/www/data/twk2.pid),在网上找了一番后最后还是放弃了,备份原来的数据库,卸载服务器上的数据库,重新安装,安装完后重启都没问题,但原来数据库里面MyISAM类型的数据库文件拷入后在phpmyadmin里面查看都读得出来,也都没问题,但是innodb类型的数据库文件拷入后,读不出来,从网上看了很多innodb相关的数据库备份的内容也知道是ibdata1的文件,备份新数据库目录下面的ibdata1文件,停止数据库服务,删除ibdata1以及ib_logfile0和ib_logfile1两个文件夹,拷入原来备份的数据库下面的ibdata1文件到新的数据库目录,重启数据库,没反应,还是提示:Starting MySQL. ERROR! The server quit without updating PID file (/www/data/twk2.pid),这可怎么办?
换一种思路,想办法把原来数据库中InnoDB类型的数据库导出来,然后再导入到新的数据库中这样问题就解决了,在网上一番查找和测试,终于找到了解决问题的方法。步骤如下:
以没重装数据库为例,还是原来的数据库,数据库服务启动不起来,删除ib_logfile0和ib_logfile1两个文件夹,修改数据库配置文件my.cnf,在[mysqld] 下面加入
innodb_force_recovery = 6
innodb_purge_thread = 0
保存文件,重启数据库服务发现可以启动起来了,登录phpmyadmin控制面板也没问题了,这时候在具体的数据库(InnoDB类型)里面也可以看到文件了,但这些文件都是只读的,你如果这时候想登录网站后台,是登录不了的,所以这也不是长久解决问题的办法,所以直接使用工具导出数据库是最稳妥的办法。MyISAM类型的数据库不受这个影响,直接把文件拷贝到其它服务器上就可以使用。有时候查找问题比重装数据库用的时间更久,所以建议还是直接卸载原来的数据库重装比较快,然后新建所有数据库导入数据就行了。
如果你已经卸载了服务器上的数据库进行了重装,那么备份新装的数据库所有文件,停止数据库服务,删除新装的数据库目录下面ibdata1以及ib_logfile0和ib_logfile1两个文件夹,把旧数据库目录下面的ibdata1文件拷贝到新安装的数据库目录下面,然后修改数据库配置文件my.cnf,在[mysqld] 下面加入
innodb_force_recovery = 6
innodb_purge_thread = 0
保存,重启数据库服务,登录phpmyadmin,导出原来想要导出的innodb类型的数据库,恢复新数据库的ibdata1文件,删除ib_logfile0和ib_logfile1两个文件夹以及数据库配置文件my.cnf加入的那两行代码,保存,重启数据库服务就可以了,新建数据库把导出的数据库文件导入进去就行了。
网上那些修复Starting MySQL. ERROR! The server quit without updating PID file (/www/data/twk2.pid) 的方法,例如:修改数据库目录权限,把配置文件里面的localhost修改成127.0.0.1,方法很多但几乎没用。
如果不适应InnoDB这种数据库类型,觉得不方便,你也可以通过SQL命令把InnoDB类型的数据库转换成MyISAM类型,这样如果数据库服务出问题,只需要把数据库文件下载拷贝到新的数据库中就可以了。转换方法如下:以wordpress数据库为例,打开数据库,点到SQL
输入:
ALTER TABLE wp_commentmeta ENGINE=MYISAM;
ALTER TABLE wp_termmeta ENGINE=MYISAM;
ALTER TABLE wp_comments ENGINE=MYISAM;
ALTER TABLE wp_links ENGINE=MYISAM;
ALTER TABLE wp_options ENGINE=MYISAM;
ALTER TABLE wp_postmeta ENGINE=MYISAM;
ALTER TABLE wp_posts ENGINE=MYISAM;
ALTER TABLE wp_terms ENGINE=MYISAM;
ALTER TABLE wp_term_relationships ENGINE=MYISAM;
ALTER TABLE wp_term_taxonomy ENGINE=MYISAM;
ALTER TABLE wp_usermeta ENGINE=MYISAM;
ALTER TABLE wp_users ENGINE=MYISAM;
点执行,执行结束会给出执行结果,如果有提示错误,就按错误提示加入或者删除对应的转换行命令,这样就可以把原来的InnoDB类型的数据库转换成MyISAM了,如果你的网站程序不是wordpress,那只需要把表名改成你的数据库表名就可以了。
做seo就是这样,折腾次数多了你遇到的问题多了,解决问题的方法也就多了,记得问题解决了别记了做个记录分享给大家,帮助下次遇到这个问题的朋友,喜欢就转发吧。