这应该很简单,但我不能让它为我的一生工作。我只是想远程连接到我的MySQL服务器。

连接方式:mysql-u根-h本地主机-p工作正常,但尝试:mysql-uroot-h'这里的任何ip地址'-p失败,错误为:错误1130(00000):主机“xxx.xx.xxx.xxx”不允许连接到此MySQL服务器

在mysql.user表中,主机为“localhost”的用户“root”的条目与主机为“%”的用户完全相同。

我束手无策,不知道该怎么办。欢迎提出任何想法。


当前回答

问题:root@localhost无法连接到openSUSE 42.2-1.150.x86_64上新安装的mysql社区服务器。Mysql拒绝连接-期间。

解决方案:

$ ls -l /var/lib/mysql/mysql/user.*
-rw-rw---- 1 mysql mysql     0 Apr 29 19:44 /var/lib/mysql/mysql/user.MYD
-rw-rw---- 1 mysql mysql  1024 Apr 29 19:44 /var/lib/mysql/mysql/user.MYI
-rw-rw---- 1 mysql mysql 10684 Apr 29 19:44 /var/lib/mysql/mysql/user.frm

文件user.MYD的大小为0(真的?!)。我从另一个工作系统复制了所有3个文件。

$ /usr/sbin/rcmysql stop
$ cd /var/lib/mysql/mysql/
$ scp root@othersytem:/var/lib/mysql/mysql/user.* ./
$ /usr/sbin/rcmysql start
$ cd -
$ mysql -u root -p

我能够登录。然后,这只是重新应用所有模式特权的问题。此外,如果禁用了IPv6,请重新启用它,以便root@::1帐户也可以工作。

其他回答

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

这个错误是因为没有root用户的密码,当您尝试从外部连接时,可能会发生这种情况。

简单的方法是使用root帐户登录phpmyadmin,然后转到mysql数据库并选择用户表,然后编辑root帐户并在host字段中添加%wildcard。然后通过ssh刷新权限

 FLUSH PRIVILEGES;

这适用于任何未来的远程mysql连接!

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

导航到以bind address指令开头的行。应该是这样的:

    bind-address            = 0.0.0.0

以root终端身份登录mysql

    mysql -u root -p
    -- root password

    CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

    GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

    CREATE USER 'username'@'%' IDENTIFIED BY 'password';

    GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

    FLUSH PRIVILEGES;

    EXIT;

最后,使用以下命令授予该计算机远程连接到数据库的独占权限。

    sudo ufw allow from remote_IP_address to any port 3306

1.从终端将您连接到MySQL运行容器

docker exec -it your_container_name_or_id bash

2.在容器中,将您连接到MySQL数据库

mysql -u your_user -p

输入密码以连接到数据库。

3.执行此SQL脚本以列出所有现有数据库用户:

SELECT host, user FROM mysql.user;

结果如下:

host user
127.0.0.1 root
::1 root
localhost mysql.sys
localhost root

您应该添加新行:

host user
% root
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

嗯,上面的答案对我来说没有任何作用。经过大量研究,我找到了一个解决方案。虽然我可能会迟到,但这可能会在未来帮助其他人。

从终端登录SQL server

 mysql -u root -p
 -- root password
GRANT ALL ON *.* to root@'XX.XXX.XXX.XX' IDENTIFIED BY 'password';

这应该可以解决权限问题。

快乐编码!!