我有一个使用 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
- 10.0.2.2 可能是使用 VirtualBox“HostOnly”网络的客户操作系统实例的虚拟 IP 地址。
您应该能够使用以下命令连接到来宾实例中的 mysql 服务器
mysql -u root -h 10.0.2.2
- “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@%