升级 MysQL 差点弄丢数据

升级 Mysql 的时候,可能是 lnmp 的脚本问题,导致 mysqld 启动失败,还好脚本在进行升级之前是有对全库进行备份。

仔细排查发现只是初始化失败,mysql 编译还是成功的,所以重新用上述命令初始化 mysql,要保证 data_dir 是空的。

然后赋予 data_dir 全部权限。

再然后,尝试启动 mysql,成功。

但是初始化的时候密码非空,也不知道去哪里找这个密码,所以尝试重置 mysql 密码。

这就跳过了认证。新开一个终端,登陆到 mysql。

切换到 mysql 表,select 了一下,表还挺大的,注意 mysql5.7 之后,字段名字变了,以前的字段名就叫 password,现在是 authentication_string。

提示成功 update 一条记录。

这个时候可以恢复 database 了,注意恢复的方向,我很二地用了> 号,结果把整个恢复文件给弄没了,还好有 VPS 有备份镜像,不然真的得哭死。必须用< 号。

这就完事了,关闭之前 mysqld_safe 的那个终端,然后重启 mysqld。

所有数据都回来了,一切正常。看来升级数据库还是要谨慎再谨慎啊。

回顾 lnmp 升级脚本,主要问题出现在这里:

屏幕快照 2016-03-12 10.34.48

查看了官网文档,发现 5.7.5 之后,这个 mysql_install_db 就不在 scripts 文件夹下了,在 bin 下面,所以导致出现找不到该文件的问题,于是数据库初始化失败,自然 mysqld 就无法驱动了,也是被坑得可以。

然后有去 oneinstack 官网看了下,人家 3 月 3 日更新的最新版,已经修复了这个 bug,好吧,自认倒霉。

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.