Vagrant/Puppet/MySQL 本地主机问题

Vagrant/Puppet/MySQL 本地主机问题

我有一个使用 puppet 来配置 mysql 的 vagrant 文件。

以下是default.pp中的相关代码:

class { '::mysql::server':
  override_options => { 'mysqld' => { 'bind_address' => '0.0.0.0' } },


  grants => {
    '[email protected]/*.*' => {
      ensure     => 'present',
      options    => ['GRANT'],
      privileges => ['ALL'],
      table      => '*.*',
      user       => '[email protected]',
    },
  },
}

这可行,但是从主机(不是虚拟机)我只能通过 127.0.0.1 访问 mysql,并且我希望能够通过 localhost(mysql 客户端的默认设置)访问。

所以我的问题是:1)10.0.2.2 的意义是什么?(从示例中复制并粘贴)2)如何配置 VM 上的 mysql 安装,以便从主机操作系统(mac)访问

mysql -u root -h localhost

我还应该注意,我尝试改变[电子邮件保护]到 root@localhost 但这不起作用。

谢谢!phil

答案1

  1. 10.0.2.2 可能是使用 VirtualBox“HostOnly”网络的客户操作系统实例的虚拟 IP 地址。

您应该能够使用以下命令连接到来宾实例中的 mysql 服务器

mysql -u root -h 10.0.2.2
  1. “localhost” 对于 MySQL 具有特殊含义,它使客户端尝试通过 Unix 域套接字而不是 TCP 进行连接。因此,它会尝试使用套接字文件(通常是/tmp/mysql.sock/var/run/mysql/mysql.sock)进行连接,这些是仅供同一操作系统实例上的进程本地访问的特殊文件。

但是,您的虚拟机是不同的操作系统实例,因此主机mysql操作系统上的客户端无法访问客户操作系统上的域套接字文件。

答案2

10.0.2.2 表示您授予用户访问哪个远程IP的权限,通过研究vagrant puphpet模板vagrant/puphpet/puphpet/nodes/Mysql.pp您可以看到模板定义宣言,ruby代码:

  each( $grants ) |$key, $grant| {
    # if no host passed with username, default to localhost
    if '@' in $grant['user'] {
      $user = $grant['user']
    } else {
      $user = "${grant['user']}@localhost"
    }

因此用户必须通过 yaml puphpet 配置如下

grants:
     mysql:
         user: dbuser@%

相关内容