在脚本中更改mysql绑定地址


10

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

Answers:


17

除了@nonsenz所说的以外,如果您使用puphpet.com的配置脚本,则可以将bash文件添加到/ puphpet / files / startup-always文件夹中,并将所有命令放在此处。每当无业游民启动或重新加载时,它将调用脚本:

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

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

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

这使我可以通过流浪汉将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

底部脚本对我来说很完美,只有一点点点滴(CentOS 6.5框)-使用sudo导致出现“对不起,您必须有tty”错误(仅通过从语句中删除'sudo'进行了修复),并且使用/etc/init.d/mysqld stop/etc/init.d/mysqld start。这两个可能只是CentOS的怪癖,而不是脚本的错误。
亚当·韦斯特布鲁克2014年

9

在这种情况下(干净安装后),看来sed是最简单的方法:

sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf 

2
augtool -s set '/files/etc/mysql/my.cnf/target[ . = "mysqld"]/bind-address 0.0.0.0'

Ubuntu软件包称为“ augeas-tools”


这个答案需要更多的解释。
kasperd 2015年

使用Augeas(如其他答案之一所述)可以操纵配置文件。本示例说明了如何完成此操作。
Peter Childs

从尝试使用此答案: -s是“自动保存所有更新”。 set这是Augeas将为此采取的行动。 /files/etc/mysql/my.cnfAugest将在哪个部分/文件上运行(加载所有/ etc)。 /target是一个解码值的“数组”。 [ . = "mysqld"]选择值为“ mysqld”的目标号码。 bind-address是“ mysqld”部分中的bind-address字段,空格后0.0.0.0的值是它将被设置为的值。
Mike Lutz

0

听起来您正在寻找Augeas

项目页面在这里和一些文档例子都在这里。股票镜头页面上包含MySQL,但是很遗憾,现在文档链接指向404页面。

这里还有一些在Puppet中使用它的示例


看起来很有趣。但是我认为在使用这样的东西之前,只是要更改我坚持使用sed的绑定地址:-)
nonsenz 2014年

一旦摆脱了流浪汉,转而使用专业的配置管理,puppetlabs / inifile也可能会工作...
Michael Hampton

1
sed方法仅在条目已存在的情况下才有效,因为节在inifile中很重要。无论采用哪种Augeas方法都可以,因为它将条目放置在正确的位置。
ℝaphink
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.