スクリプト内でのmysql bind-addressの変更


10

シェルスクリプトからmy.cnfのmysql bind-addressを変更する最良の方法は何ですか?mysqladminのようなツールを使用する方法はありますか、またはsedを使用するか、それを単にmy.cnfに追加して、2番目のエントリが最初のエントリを上書きすることを望みますか(これは具合が悪いようです)。mysql-serverのインストール後に実行され、vmの外部からの接続を許可するvagrantの単純なシェルプロビジョナーを作成しようとしています。

回答:


17

@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

さらに良い(よりきれいな出力を可能にするため)

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)をvagrant経由でゲストマシンのデータベースに直接接続できました。もちろん、ゲスト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」を削除するだけで修正されます)、MySQLサービスが使用して再起動されました/etc/init.d/mysqld stop/etc/init.d/mysqld start。これらはどちらも、スクリプトのエラーではなく、単にCentOSの癖である可能性があります。
Adam Westbrook

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

Augeasを使用すると(他の回答の1つで述べたように)、構成ファイルを操作できます。この例は、これがどのように行われるかを示しています。
Peter Childs、2015年

この回答を使おうとする -sと、「更新を自動保存」です。 setAugeasがこの行でこれを実行するアクションです。 /files/etc/mysql/my.cnfAugestが機能する部分/ファイル(/ etcのすべてをロードします)。 /targetデコードされた値の(?array?)です。 [ . = "mysqld"]「mysqld」という値を持つターゲット番号を選択します。 bind-address「mysqld」セクションのbind-addressフィールドであり、スペースの後0.0.0.0の値は、設定される値です。
Mike Lutz

0

Augeasを探しているようですね。

プロジェクトページはこちらですと、いくつかのドキュメント例がここにあります。MySQLはストックレンズページに含まれていますが、残念ながらドキュメントは404ページにリンクしています。

Puppet内での使用例もいくつかあります


面白いですね。しかし、私はバインドアドレスを変更するためにこのようなものを使用する前に、sedを使用することを考えています:-)
nonsenz

puppetlabs / inifileも動作する可能性があります。浮浪者を排除して専門の構成管理に移行すると...
マイケルハンプトン

1
sedアプローチは、セクションがinifileで重要であるため、エントリがすでに存在する場合にのみ機能します。Augeasアプローチは、エントリを正しい位置に配置するため、関係なく機能します。
ℝaphink
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.