在Ubuntu上下载了Navicat用于可视化数据库管理,结果报错,报错信息如下:
1 |
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) |
毕竟确实很久没有手动安装MySQL了,我第一感觉是我配置错误,随后按网上教程乱设置了一通,结果任然不行。
奇怪的是在终端中却是正常工作的,所以我决定先卸载MySQL重装再判断。
如果是通过
1 |
sudo apt-get remove mysql-server |
来卸载MySQL的话是卸载不干净的,需要按如下方法完整卸载。
Ubuntu18.8彻底卸载MySQL
首先在终端中查看MySQL的依赖项:
1 |
dpkg --list|grep mysql |
卸载:sudo apt-get remove mysql-common
1 |
sudo apt-get remove mysql-common |
卸载:sudo apt-get autoremove –purge mysql-server-5.7
1 |
sudo apt-get autoremove --purge mysql-server-5.7 |
清除残留数据:dpkg -l|grep ^rc|awk ‘{print$2}’|sudo xargs dpkg -P
1 |
dpkg -l|grep ^rc|awk '{print$2}'|sudo xargs dpkg -P |
再次查看MySQL的剩余依赖项
1 |
dpkg --list|grep mysql |
继续删除剩余依赖项,如:sudo apt-get autoremove –purge mysql-apt-config
安装MySQL
1 |
sudo apt install mysql-server |
安装完成之后可以使用如下命令来检查是否安装成功:
1 |
netstat -tap | grep mysql |
通过上述命令检查之后,如果看到有 mysql 的socket处于 LISTEN 状态则表示安装成功。
登录mysql数据库可以通过如下命令:
1 |
mysql -u root -p |
-u 表示选择登陆的用户名, -p 表示登陆的用户密码,现在是mysql数据库是没有密码的,Enter password:处直接回车,就能够进入mysql数据库。
然后通过 show databases; 就可以查看当前的所有数据库。
接下来,为了确保数据库的安全性和正常运转,对数据库进行初始化操作。这个初始化操作涉及下面5个步骤。
- (1)安装验证密码插件。
- (2)设置root管理员在数据库中的专有密码。
- (3)随后删除匿名账户,并使用root管理员从远程登录数据库,以确保数据库上运行的业务的安全性。
- (4)删除默认的测试数据库,取消测试数据库的一系列访问权限。
- (5)刷新授权列表,让初始化的设定立即生效。
对于上述数据库初始化的操作步骤,在下面的输出信息旁边我做了简单注释。
1 2 3 4 5 6 7 8 9 10 |
root@ubuntu-virtual-machine:~# mysql_secure_installation Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? |
# 要安装验证密码插件吗?
1 |
Press Y|Y for Yes, any other key for No: N |
# 这里我选择N
1 2 3 |
Please set the password for root here. New password: |
# 输入要为root管理员设置的数据库密码
1 |
Re-enter new password: |
# 再次输入密码
1 2 3 4 5 6 7 8 9 |
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. |
# 删除匿名账户
1 2 3 4 5 |
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : N |
# 禁止root管理员从远程登录,这里我没有禁止
1 2 3 4 5 6 7 8 9 |
... skipping. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y - Dropping test database... Success. |
# 删除test数据库并取消对它的访问权限
1 2 3 4 5 6 7 8 |
- Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. |
# 刷新授权表,让初始化后的设定立即生效
重装完成!
检查mysql服务状态:
1 |
systemctl status mysql |
显示如下结果说明mysql服务运行是正常的:
修复navicat mysql.sock错误
好了,现在我们确定MySQL很干净,并且是重装的,原则上肯定是没有问题的。
剥离网上搜到的乱七八糟的结果,我们来看问题的本质:
1 |
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) |
这个文件为什么会报错,他会不会只是单纯的不存在?
在/etc/mysql/mysql.conf.de/下找到mysqld.cnf,我们需要看看配置文件中的socket路径
可以看到文件中显示的路径是:
1 |
/var/run/mysqld/mysqld.sock |
与Navicat所需要的路径:
1 |
/var/lib/mysql/mysql.sock |
两者需求是不一致的,故而会报错。
找到原因后,我们就来解决它。
软连接
此刻,我们只需要设置一个软链接就能解决这个问题,软链接可以粗略的认为是Windows下的快捷方式,具体来讲是这样的:
Linux/Unix 档案系统中,有所谓的连结(link),我们可以将其视为档案的别名,而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link),硬连结的意思是一个档案可以有多个名称,而软连结的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中,而软连结却可以跨越不同的档案系统。
ln source dist 是产生一个连结(dist)到 source,至于使用硬连结或软链结则由参数决定。
不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
- -f : 链结时先将与 dist 同档名的档案删除
- -d : 允许系统管理者硬链结自己的目录
- -i : 在删除与 dist 同档名的档案时先进行询问
- -n : 在进行软连结时,将 dist 视为一般的档案
- -s : 进行软链结(symbolic link)
- -v : 在连结之前显示其档名
- -b : 将在链结时会被覆写或删除的档案进行备份
- -S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾
- -V METHOD : 指定备份的方式
- –help : 显示辅助说明
- –version : 显示版本
看明白上面的说明后,我们只需要下面这样一句代码运行在终端中,即可!
1 |
ln -s /var/run/mysqld/mysqld.sock /var/lib/mysql/mysql.sock |
查看当前文件夹可以看到这个软链接已经创建完成
关闭Navicat,重新打开,再次链接,我们就能正确连接上数据库,并且没有再报错。
原创文章,作者:蓝洛水深,如若转载,请注明出处:https://blog.lanluo.cn/8662