在脚本中更改 mysql 绑定地址

在脚本中更改 mysql 绑定地址

从 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”

答案4

听起来你正在寻找奥杰阿斯

项目页面在这里还有一些文档例子在此处。MySQL 包含在库存镜片页面但不幸的是,文档现在链接到 404 页面。

也有一些这里是 Puppet 中的使用示例

相关内容