MySQL をコマンドラインで使う

自動化するならコマンドラインですね。ということで、最近使った MySQLコマンドラインを記録しておきます。

データベースを作成する

mysql -u<ユーザID> -p<パスワード> -e "CREATE DATABASE <データベース名> CHARACTER SET utf8mb4"

※ -u と -p の後ろは空けない

そのデータベースに全権を持つユーザを作成する

mysql -u<ユーザID> -p<パスワード> <データベース名> -e "GRANT ALL ON <データベース名>.* TO <新しいユーザ名>@localhost"


その作成したユーザにパスワードを設定する

mysql -u<ユーザID> -p<パスワード> <データベース名> -e "SET PASSWORD FOR <ユーザ名>@localhost=password('<セットするパスワード>')"


そのデータベースにデータをインポートする

zcat <gzip圧縮されたSQL文> | mysql -u<ユーザID> -p<パスワード> <データベース名>


UPDATE文を発行してインポートしたデータを修正する

mysql -u<ユーザID> -p<パスワード> <データベース名> -e "UPDATE wp_options SET option_value=<変更後の値> WHERE option_name='siteurl'"

※ここでは Wordpress の wp_options を直す例



上記はバッチ/スクリプトにできるので、例えば新しくデータベースを作成して、そのデータベースと同名のユーザにそのデータベースへの全権を付与して、何らかのデータをインポートする といったことであれば、以下のようにできます。

#!/bin/bash

mysql -u<ユーザID> -p<パスワード> -e "CREATE DATABASE $1 CHARACTER SET utf8mb4"
mysql -u<ユーザID> -p<パスワード> $1 -e "GRANT ALL ON $1.* TO $1@localhost"
mysql -u<ユーザID> -p<パスワード> $1 -e "SET PASSWORD FOR $1@localhost=password('$1')"
wget http://<どこかのサーバに置いてあるデータ>/data.sql.gz
zcat data.sql.gz | mysql -u<ユーザID> -p<パスワード> $1
rm -f data.sql.gz

この例では可変なのはデータベース名(ユーザ名)のみですが、可変にしたい箇所は引数として受け取るようにすればよいでしょう。

これを c.sh として保存したすると、使うときは、

sh c.sh <データベース名>

となります。