从 shell 脚本更改 my.cnf 中的 mysql bind-address 的最佳方法是什么?是否有办法使用像 mysqladmin 这样的工具,或者我应该使用 sed,或者我应该简单地将其附加到 my.cnf 并希望第二个条目覆盖第一个条目(这个听起来很恶心)。我尝试为 vagrant 编写一个简单的 shell 配置程序,它在安装 mysql-server 后运行,以允许来自 vm 外部的连接。
答案1
除了 @nonsenz 所说的内容外,如果您使用 puphpet.com 的配置脚本,则可以将 bash 文件添加到 /puphpet/files/startup-always 文件夹并将所有命令放入其中。每当 vagrant 启动或重新加载时,它都会调用该脚本:
mysql 脚本
#!/bin/bash
echo "Updating mysql configs in /etc/mysql/my.cnf."
if [ 'sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf' ]; then
echo "Updated mysql bind address in /etc/mysql/my.cnf to 0.0.0.0 to allow external connections."
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
fi
甚至更好(以实现更清晰的输出)
mysql 脚本
#!/bin/bash
echo "Updating mysql configs in /etc/mysql/my.cnf."
sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
echo "Updated mysql bind address in /etc/mysql/my.cnf to 0.0.0.0 to allow external connections."
sudo service mysql stop
sudo service mysql start
这使我能够通过 vagrant 将我的 IDE(PhpStorm)直接连接到我的客户机上的数据库。当然,我授予客户机 mysql 用户对“%”的访问权限,并将客户机上的端口 3306 转发到主机上的端口(3309)。访问授权也可以在此文件中完成。
甚至更好(mysql 执行插件)
mysql 脚本
#!/bin/bash
echo "Updating mysql configs in /etc/mysql/my.cnf."
sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
echo "Updated mysql bind address in /etc/mysql/my.cnf to 0.0.0.0 to allow external connections."
echo "Assigning mysql user user1 access on %."
sudo mysql -u user1 -pyourpassword --execute "GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' IDENTIFIED BY 'yourpassword' with GRANT OPTION; FLUSH PRIVILEGES;" yourdatabase
echo "Assigned mysql user user1 access on all hosts."
sudo service mysql stop
sudo service mysql start
答案2
在这种情况下(全新安装后),看起来 sed 是最简单的方法:
sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
答案3
augtool -s set '/files/etc/mysql/my.cnf/target[ . = "mysqld"]/bind-address 0.0.0.0'
Ubuntu 软件包名为“augeas-tools”