0%

mysql | 记录一次 ubuntu 下 mysql 的修复

先说明一下,最终,该机器下的 mysql 还是没有修复成功。但是,里面经历了很多我个人觉得颇具直到意义,所以,在此记录一下。


环境说明


  • ubuntu 18.04

参考资料



错误说明


有一天,链接 mysql 的时候突然出现下面错误

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

经过检查得知, /var/run/mysqld/ 下面确实没有 sock 文件。

尝试过,自己生成、开启和关闭等。

表现的情况如下

  • 自己生成「touch
    • 毫无作用
  • 重启 mysql
    • 可以关闭,但是,重启的时候出现错误

因为无法 start mysql ,所以,使用

systemctl status mysql.service

但是,没啥用处。

这个时候就要检查一下 mysql 的日志文件。你可以通过 mysql 的配置文件来查看日志放在哪里,一般在

/etc/mysql/
/etc/mysql/conf.d

可能还有其他路径,看一下 /etc/mysql/my.cnf 的配置。

其中,mysql 的日志文件放在

/var/log/mysql/error.log

我看了一下没有有用信息,就看了一下系统的日志,在

/var/log/syslog
tail -300f syslog

发现,mysql 在不断的重启,也就是,mysql 确实是坏了,现阶段,我唯一想到的办法就是重装 mysql


卸载 mysql


在卸载前,首先应该备份 mysql 的数据。并且,查明 mysql 的版本

mysql --version

但是,因为 mysql 进不去,导致 mysqldump 用不了,所以,使用网上教授的方法,备份 /var/lib/mysql

新建一个文件夹,进入后

cp -ar /var/lib/mysql ./

加上 a 的目的是,把文件的所属关系之类的一并复制过来。

备份好后,开始卸载 mysql

对了,在卸载之前,我先是局部卸载,比如

sudo apt-get remove mysql-server

接着

sudo apt-get install mysql-server

发现不行,于是打算全部卸载。

sudo apt-get remove mysql-*

但是,有时候会遇到使用这个命令依然不能卸载的情况,这个时候,就要用

dpkg --list|grep mysql

来查看,具体叫什么。然后使用

sudo apt-get remove 跟具体的名字
sudo apt-get autoremove 具体名字

来单独卸载,直到

dpkg --list|grep mysql

没有显示东西。接着卸载用户文件

dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

会弹出一个对话框,让你是否卸载数据库,这里选择 yes


安装 mysql


我上面查到的 mysql 的版本是 8.0 ,但是,如果直接 apt-get 安装的话,安装的版本是 5.7

使用命令下载存储库软件包:

wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb

使用命令安装上边下载的安装包:

sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb

安装过程中提示选择安装版本,默认安装的就是8.0版本,所以直接选择 OK 确认即可;

从所有已配置的存储库(包括最近添加的MySQL存储库)下载最新的包信息。

sudo apt update

然后运行以下命令为MySQL社区服务器,客户端和数据库公共文件安装软件包。

sudo apt-get install mysql-server

安装过程中会让你输入密码。

输入之后会出现选择加密方式的提示界面,我在网上的教程中看到默认的mysql8.0的加密方式与ubuntu18.04 不兼容,所以选择5.x的加密方式;建议选择下边的那个:

不出意外,应该是安装好了。


迁移数据库


这里可以把数据库进行重新指向,也可以把备份数据 copy 过来。

但是,我 copy 之后,发现,又出现了

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

经过,长时间的解决,发现最终无法解决,不得已,开始重装系统。

请我喝杯咖啡吧~