MySQLを構成するスクリプトを作成しようとしています。ポートを3333に設定したいので、設定ファイルに次の行を含めたいとします
[mysqld]
port=3333
[client]
port=3333
最初は、単に新しい行をecho
ingしていました:
echo "[mysqld]" >> /etc/mysql/my.cnf
echo "port=3333" >> /etc/mysql/my.cnf
echo "[client]" >> /etc/mysql/my.cnf
echo "port=3333" >> /etc/mysql/my.cnf
しかし、その後、構成ファイルに複数回実行すると、構成ファイルにすべてのエントリが数回含まれることに気付きました。したがって、関数を使用してチェックを適用しました。
function appendconfig {
grep -qF "$1" "$2" || echo "$1" >> "$2"
}
cfg=/etc/mysql/my.cnf
appendconfig "[client]" $cfg
appendconfig "port=3333" $cfg
appendconfig "[mysqld]" $cfg
appendconfig "port=3333" $cfg
その関数は、まだ存在しない場合にのみ行を追加します。
残念ながら、port=3333
セクションで[mysqld]
を設定すると、port=3333
が既に存在することを検出します(ただし、[client]
にあります)。
Linux BashスクリプトでmySQLのような設定ファイルをどのように書きますか?
基本的に私は次のようなものを探しています
setconfigvalue <section> <value> <file>
だから私は書くことができます
setconfigvalue [mysqld] port=3333 /etc/mysql/my.cnf
このU&L姉妹サイトの質問「スクリプトを使用してINIのようなファイルを編集する」 からの提案を試しました。
受け入れられた答えは、OPの問題に対してハードコーディングされたソリューションを提供するだけです。私はそれらを適応させる必要がありますが、それは間違いがちです。
私はcrudini
を試しましたが、これはその構文からは正しいツールのようです。ただし、次の理由により、mySQL構成ファイルを解析できません。
crudini --get /etc/mysql/my.cnf client port
File contains parsing errors: <???>
[line 22]: !includedir /etc/mysql/conf.d/
[line 23]: !includedir /etc/mysql/mariadb.conf.d/
公式パッケージからcrudini
のバージョン0.7-1がインストールされていることがわかりました。新しいバージョンがあります Githubで利用可能 、執筆時点では0.9です。
wget
を使用して、古いバージョンを新しいバージョンに置き換えました。
wget -q https://raw.githubusercontent.com/pixelb/crudini/master/crudini -O /usr/bin/crudini
そのようにして、解析エラーに関するエラーメッセージが消えました。
crudini --get /etc/mysql/my.cnf mysqld port
Parameter not found: port
そして、必要なパラメーターを設定できました。
crudini --set /etc/mysql/my.cnf mysqld port 3333
crudini --get /etc/mysql/my.cnf mysqld port
3333