blog - MySQLのユーザ登録を一括でバッチ処理する方法
LinuxなどのコマンドラインからMySQLのCREATEUSERとかをバッチで一括で実行するには、以下のとおり。
まず、MySQLのCREATEUSERで一人分のユーザを登録するシェルスクリプトのバッチファイルをfoo.shなどとして保存する。
以下の例では、引数に文字列 *** を指定すると、MySQLのアカウント名は user*** 、パスワードは、 pass*** となる。さらに、アカウント名と同じ名前のデータベースを作成して(CREATE DATABASE)、全権限を与えている(GRANT ALL PRIVILEGES)。MySQLサーバはlocalhostとしている。
次に、foo.shをすべてのアカウント分を実行するシェルスクリプトをfoo.sh.txtなどとテキストファイルにする。この例では、文字列として、001, 002, 003 .....といった3桁の連番を指定する。このテキストファイルは、エクセルのオートフィルなどで連番の数字を生成すると簡単に作成できる。結果として、アカウント名は、user001,user002,user003......となる。
さらに、以下のように、foo.sh.txtを実行すると、人数分のCREATEUSERを実行するMySQLのスクリプトが書き出されるので、テキストファイルmysql_foo.sh.txtに保存する。
最後に、以下のようにmysql_foo.sh.txtに保存されたスクリプトをMySQLに読み込ませて実行し、アカウントを生成する。
なお、-pオプションにパスワードを記述するとパスワードを聞かれない。
まず、MySQLのCREATEUSERで一人分のユーザを登録するシェルスクリプトのバッチファイルをfoo.shなどとして保存する。
以下の例では、引数に文字列 *** を指定すると、MySQLのアカウント名は user*** 、パスワードは、 pass*** となる。さらに、アカウント名と同じ名前のデータベースを作成して(CREATE DATABASE)、全権限を与えている(GRANT ALL PRIVILEGES)。MySQLサーバはlocalhostとしている。
name=`printf user"$1"`
passw=`printf pass"$1"`
echo "CREATE USER '$name'@'localhost' IDENTIFIED BY '$passw';"
echo "GRANT USAGE ON * . * TO '$name'@'localhost' IDENTIFIED BY '$passw' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;"
echo "CREATE DATABASE IF NOT EXISTS \`$name\` ;"
echo "GRANT ALL PRIVILEGES ON \`$name\` . * TO '$name'@'localhost';"
echo ""
次に、foo.shをすべてのアカウント分を実行するシェルスクリプトをfoo.sh.txtなどとテキストファイルにする。この例では、文字列として、001, 002, 003 .....といった3桁の連番を指定する。このテキストファイルは、エクセルのオートフィルなどで連番の数字を生成すると簡単に作成できる。結果として、アカウント名は、user001,user002,user003......となる。
sh foo.sh 001
sh foo.sh 002
sh foo.sh 003
sh foo.sh 004
sh foo.sh 005
....
さらに、以下のように、foo.sh.txtを実行すると、人数分のCREATEUSERを実行するMySQLのスクリプトが書き出されるので、テキストファイルmysql_foo.sh.txtに保存する。
sh foo.sh.txt > mysql_foo.sh.txt
最後に、以下のようにmysql_foo.sh.txtに保存されたスクリプトをMySQLに読み込ませて実行し、アカウントを生成する。
mysql -u hoge -p < mysql_foo.sh.txt
なお、-pオプションにパスワードを記述するとパスワードを聞かれない。