如何允许远程mysql登录?

时间:2017-02-23 17:43:19

标签: php mysql vagrant

我有简单的vagrant多机配置:

Vagrant.configure(2) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.provision :shell, path: "vagrant/ubuntu-16.04/provision.sh"
  config.vm.synced_folder "ed", "/var/www/html"
  config.vm.provider "virtualbox" do |v|
    v.memory = 1024
    v.cpus = 2
  end
  config.vm.define "node1", primary: true do |node|
    node.vm.hostname = 'node1'
    node.vm.network :private_network, ip: "192.168.56.101"
    node.vm.network :forwarded_port, guest: 22, host: 10122, id: "ssh"
    node.vm.provision :hosts, :sync_hosts => true
  end
  config.vm.define "node2" do |node|
    node.vm.hostname = "node2"
    node.vm.network :private_network, ip: "192.168.56.102"
    node.vm.network :forwarded_port, guest: 22, host: 10123, id: "ssh"
    node.vm.provision :hosts, :sync_hosts => true
  end
end

On node1我有php和on node2我有mysql。
当我从mysql -uuser -ppass -P3306 -hlocalhost运行vagrant@node2时,它有效,
但是当我尝试从mysql -uuser -ppass -P3306 -h192.168.56.102运行vagrant@node1时,它将无效,我收到错误:

  

ERROR 2003(HY000):无法连接到'192.168.56.102'上的MySQL服务器(111)

我可以从node2 ping node1,反之亦然。

2 个答案:

答案 0 :(得分:4)

在mysql中,默认情况下禁用远程用户登录。出于安全原因,它仅允许localhost。

要进行交叉验证,请登录mysql并运行命令:

mysql> select user,host from mysql.user;
+------+--------------------------------+
| user | host                           |
+------+--------------------------------+
| root | localhost                      | 
| root | ::1                            |
+------+--------------------------------+
2 rows in set (0.00 sec)

如果仅提供localhost。这意味着您只能从localhost和用户root登录(在此示例中)。

如果您想允许从远程系统登录,则必须添加如下:

GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

此命令将允许从所有远程IP登录,并允许所有数据库访问用户名user

如果您想允许来自特定的IP地址并且只允许访问特定的数据库,那么您可以运行:

GRANT ALL PRIVILEGES ON databasename.* TO 'user'@'ipaddress' IDENTIFIED BY 'password' WITH GRANT OPTION;

注意:不要忘记更改bind-address中的/etc/mysql/my.cnf

打开文件/etc/mysql/my.cnf并将bind-address127.0.0.1更改为0.0.0.0或注释掉bind-address并重新启动mysql服务。

答案 1 :(得分:2)

如果MySQL端口(默认为3306)被防火墙阻止,则会发生这种情况。

另一个可能的原因是MySQL配置文件中的bind_address设置。默认设置为127.0.0.1。将其设置为0.0.0.0以启用所有IP地址的MySQL。