MySQL で使うコマンドで忘れやすいものをまとめる。随時更新。
from command line
ホスト、ユーザ名、パスワード、DB を指定して REPL を起動
- 注意
-u
、-p
オプションに指定するユーザ名、パスワード名はオプションとくっつける。例えば、ユーザ名がmyuser
のとき、-u myuser
ではなく、-umyuser
のようにオプションと引数の間にスペースを空けないようにする。
# e.g. ローカルで起動している MySQL サーバの REPL を起動 # ホスト:127.0.0.1、ユーザ名:myuser、パスワード:mypass、DB:test_db mysql -h 127.0.0.1 -umyuser -pmypass test_db
特定の DB に対して SQL ファイルを実行
mysql -h 127.0.0.1 -umyuser -pmypass test_db < init.sql
in REPL
MySQL の REPL で実行するコマンド
MySQL のタイムゾーンのチェックと変更
- タイムゾーンのチェック
-- 現在の日時を表示 mysql> select current_timestamp; -- 現在のタイムゾーンを表示 mysql> show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | UTC | | time_zone | SYSTEM | +------------------+--------+
[mysqld] default-time-zone = 'Asia/Tokyo'
再起動後、もう一度現在のタイムゾーンを表示。
mysql> show variables like '%time_zone%'; +------------------+------------+ | Variable_name | Value | +------------------+------------+ | system_time_zone | UTC | | time_zone | Asia/Tokyo | +------------------+------------+
CSV、TSV ファイルから DB にデータを入れる
infile
の引数として CSV、TSV ファイルの絶対パスを指定する。fields terminated by '◯'
でセパレータを指定する。CSV なら','
、TSV なら'\t'
と記述する。
# csv load data local infile '/docker-entrypoint-initdb.d/data/book.csv' into table book fields terminated by ',' lines terminated by '\n'; # tsv load data local infile '/docker-entrypoint-initdb.d/data/stock.tsv' into table stock fields terminated by '\t' lines terminated by '\n';
エラーハンドリング:Loading local data is disabled...
以下のようにデータを CSV、TSV ファイルから DB に入れようとしたとき、以下のようなエラーが起きた。
$ mysql --local-infile=1 -umyuser -pmypass practice_prisma < /docker-entrypoint-initdb.d/05_load_data.sql ERROR 3948 (42000) at line 5: Loading local data is disabled; this must be enabled on both the client and server sides
セキュリティ上の問題を回避するための挙動である。詳しくは以下を参照。
回避方法は以下。セキュリティ的に問題があるので、本番環境ではやらないこと。
エラーメッセージに習い、サーバ側(この場合、REPL)、クライアント側(この場合、シェル)からファイルをロードできるように設定を変更する。
- サーバ側
mysql> SET GLOBAL local_infile=1;
- クライアント側
--local-infile=1
というオプションを付けて、もう一度load data infile ...
を実行する。
mysql --local-infile=1 -umyuser -pmypass practice_prisma < /docker-entrypoint-initdb.d/05_load_data.sql
エラーが出なければ、ちゃんと CSV、TSV から DB にデータが入っているはずであるので、確認すれば OK。