在脚本中更改 mysql 绑定地址

non*_*enz 12 mysql shell provisioning vagrant

从 shell 脚本更改 my.cnf 中的 mysql 绑定地址的最佳方法是什么?有没有办法使用像 mysqladmin 这样的工具,或者我应该使用 sed 还是我应该简单地将它附加到 my.cnf 并希望第二个条目覆盖第一个条目(这听起来很恶心)。我尝试为 vagrant 编写一个简单的 shell 配置器,它在安装 mysql-server 后运行,以允许来自 vm 外部的连接。

小智 19

添加@nonsenz 所说的内容,如果您使用 puphpet.com 的配置脚本,那么您可以将 bash 文件添加到 /puphpet/files/startup-always 文件夹并将所有命令放在那里。任何时候 vagrant 启动或重新加载它都会调用脚本:

mysql.sh

#!/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
Run Code Online (Sandbox Code Playgroud)

更好(以实现更清洁的输出)

mysql.sh

#!/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
Run Code Online (Sandbox Code Playgroud)

这使我能够通过 vagrant 将我的 IDE (PhpStorm) 直接连接到我的来宾计算机上的数据库。当然,我给了来宾 mysql 用户访问 '%' 的权限,并将来宾上的端口 3306 转发到主机上的端口 (3309)。访问授权也可以在这个文件中完成。

更好(mysql执行添加)

mysql.sh

#!/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
Run Code Online (Sandbox Code Playgroud)


non*_*enz 13

在这种情况下,sed 看起来是最简单的方法(在全新安装之后):

sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf 
Run Code Online (Sandbox Code Playgroud)