MySQL无法本地连接

今天在GPU上安装MySQL,折腾了大半天,服务器用的是arch系统,之前没接触过,遇到了不少问题,我现在从安装开始讲:

在Arch上安装MySQL

MariaDB 现在是 Arch Linux 官方默认的 MySQL 实现。Oracle MySQL 已被移动到 AUR,推荐所有用户升级[broken link: invalid section]到 MariaDB。参见这条公告。
MySQL (简体中文)

安装步骤比较简单,安装网上的说明文档一步步来就好了。

1
sudo pacman -S mariadb mariadb-clients

安装完软件包之后,再运行

1
# mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

结束后,启动MySQL

1
sudo systemctl start mysqld

设置密码

1
mysqladmin -u root password '12345678'

搞定!

设置远程登录

这TM的坑就来了,不知道怎么的就把原来数据库的值给改了,下面我一步一步说:
网上的教程大部分都是这样的:

更改配置文件

不同系统的目录可能不一样,大家应该不难找到:

1
sudo vim /etc/mysql/my.cnf

在旧版本中找到 skip-networking,把它注释掉就可以了

1
#skip-networking

在新版本中:

1
2
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.

找到 :bind-address = 127.0.0.1 这一行要注释掉

1
#bind-address = 127.0.0.1

修改权限

格式:grant 权限 on 数据库名.表名 用户@登录主机 identified by “用户密码”;

1
grant select,update,insert,delete on *.* to root@'%' identified by '123456';

或者所有权限

1
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '123456';

接着执行

1
flush privileges; 使授权生效

修改user表(坑)

MySQL建用户的时候会指定一个host,默认是127.0.0.1/localhost,那么这个用户就只能本机访问,其它机器用这个用户帐号访问会提示没有权限,host改为%,表示允许所有机器访问。

然后呢,一些博客里面就让我们把原来的localhost改为"%"

Host User
xxx root
127.0.0.1 root
::1 root
localhost root
% root

恩,没错就是这里。这里的127.0.0.1localhost是不一样的,我们平常默认登录是用mysql -uroot -p,这样的话(前提是没有修改过配置文件中的对应设置),我们本机地址是localhost,如果不小心把这个改没了。。。。那你就登不上喽:

1
error: 'Access denied for user 'root'@'localhost' (using password: YES)'

恩,没错,就是这样的提示,刚开始我还以为密码错了。。。。结果重置了好几遍密码都不行,知道后来才知道,原来是登录地址的权限不对/(ㄒoㄒ)/~~
你想登录的话要这样

1
mysql -h 127.0.0.1 -uroot -p

哈哈哈,登录进去了吧,这就说明127.0.0.1localhost是不一样的。
那么解决办法呢,就是再新增一条127.0.0.1的记录,我们可以直接拷贝原有记录,其余不变,把host中的记录改为127.0.0.1即可。