Content Table

允许其他机器访问 MySQL

A 机器上的 MySQL 默认只能 A 机器上的软件访问,即 localhost,如果 B 机器上的软件想访问 A 机器上的 MySQL,需要 MySQL 对 B 机器的 IP 进行授权。

如果是 Homebrew 安装的 MySQL,修改文件 /usr/local/etc/my.cnf 中的 bind-address = 0.0.0.0 即可,然后重启 MySQL,不能使用下面的方式进行修改。

方式一

  • 进如数据库 mysql: use mysql

  • 任意主机以用户 root 和密码 root 连接到 MySQL 服务器

    1
    2
    3
    4
    5
    6
    7
    8
    # MySQL 5.7
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
    FLUSH PRIVILEGES;

    # MySQL 8.0 创建用户和授权不能使用同一个 SQL 完成
    CREATE user root@'%' IDENTIFIED WITH mysql_native_password BY 'root';
    GRANT ALL ON *.* TO root@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
  • 指定 IP 为(如192.168.10.186)的主机以用户 alice 和密码 Passw0rd 连接到 MySQL 服务器

    1
    2
    GRANT ALL PRIVILEGES ON *.* TO 'alice'@'192.168.10.186' IDENTIFIED BY 'Passw0rd' WITH GRANT OPTION; 
    FLUSH PRIVILEGES;

方式二

网上还看到说直接修改 user 表中 User root 的 Host 为 **%**,最好别这么干,不小心会哭的:

1
2
3
4
USE mysql;
SELECT user, host FROM user;
UPDATE user SET host='%' WHERE user='root';
FLUSH PRIVILEGES;

按照上面的修改 host 为 % 后外网可以访问了,但是本地却访问出错:

1
2
3
mysql -uroot -p 
提示
Access denied for user 'root'@'localhost' (using password: YES) when trying

可用按下面的方式补救:

1
2
3
4
5
6
7
8
9
10
1. 启动 mysqld_safe
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
2. 登陆修改
mysql -u root mysql
use mysql
UPDATE user SET host='localhost' WHERE user='root';
FLUSH PRIVILEGES;
quit

这时可以看到 user 中关于 root 的记录会多一条