ドッカーCLIで実行するシェルスクリプトを作成し、コマンドライン変数として渡されたホストIPを使用してMySQLユーザーを作成します。mysqlにユーザー定義変数を挿入するCREATE USER
#!/bin/sh
docker exec -i atb-mariadb bash <<'EOF'
mysql -uroot -pmypass
set @ip='172.17.0.1';
CREATE USER 'exporter'@@ip IDENTIFIED BY 'mypass';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'exporter'@'172.17.0.1';
GRANT SELECT ON performance_schema.* TO 'exporter'@'172.17.0.1';
SELECT user, host FROM mysql.user;
exit
EOF
これは私が試したいくつかの他の人と一緒に、構文エラーになり: だから私のスクリプトでそれは私がSQL文の一部にのみ変数を挿入し、このようなものを使用して開始しようとした./create_user.sh 172.17.0.1
だろう:
CREATE USER CONCAT_WS('exporter','@',@ip) IDENTIFIED BY 'mypass';
CREATE USER 'exporter'@CONCAT_WS('',@ip) IDENTIFIED BY 'mypass';
これはもちろん、スクリプトのSQL文の部分内の変数だけです。シェルスクリプト全体で変数を使用し、それをsql bashに渡すことは、まだ私がまだ来ていないという問題です。
ありがとうございました!
を更新し
私はレイモンドNijlandのソリューションを試してみましたが、それがSQL可変部分のために働きました。しかし、まだ次のスクリプトのために失敗しているコマンドラインを使用して変数の値を渡そうと:出力
$ ./create_user.sh 172.18.0.5
script received 172.18.0.5
exec received 172.18.0.5
mysql Ver 15.1 Distrib 10.2.9-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Usage: mysql [OPTIONS] [database]
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
The following groups are read: mysql client client-server client-mariadb
The following options may be given as the first argument:
--print-defaults Print the program argument list and exit.
......and so on
で
#!/bin/sh
echo script received $1
docker exec -e ipa=$1 -i atb-mariadb bash <<'EOF'
echo exec received $ipa
mysql -uroot -pmypass -e "
SET @ip='${ipa}';
SET @createUser = 'CONCAT("CREATE USER [email protected]",@ip,"IDENTIFIED BY'mypass'")';
PREPARE smtpCreateUser FROM @createUser;
EXECUTE smtpCreateUser;";
exit
EOF
私はいつものアプローチは、別の.sqlスクリプトを実行することですunderstad -eハンドル付きのファイルですが、残念なことに、このファイルをデフォルトのmariadbコンテナにバインドマウントしたり、カスタムイメージを作成したりすることは、現在の要件では不可能です。
mysql workbenchのようなエディタでクエリを実行しようとしましたか?エラー出力は何ですか? – T30