LoginSignup
1
1

More than 1 year has passed since last update.

【MySQL】シェルスクリプトでMySQLのSQLを実行する

Posted at

シェルスクリプトでMySQLのSQLを動かそうとしたら詰まりに詰まったので備忘録として

やりたいこと

・ rootユーザでシェルスクリプトからmysqlのSQLを実行する
・ 対話処理は悲しいのでやりたくない

環境

・ホストOS: Windows11
・ゲストOS: Ubuntu20.04
・MySQL 8.0.26
・bash

ソースコード

#!/bin/bash

service mysql start
mysql -u root --password='password' -e "drop database if exists dbname;"
mysql -u root --password='password' -e "create database dbname;"
mysql -u root --password='password' dbname < file.sql

このシェルスクリプトを実行すると mysql: [Warning] Using a password on the command line interface can be insecure. という警告文が表示されて処理が失敗しました。

どうやらスクリプトやコマンドにパスワードを直書きすると怒られるようです。

解決方法

パスワードを外部ファイルに切り出してそれを --defaults-extra-file オプションで読み込むと解消できました。

/etc/mysql/my.cnf

[client]
user = root
password = password
# 今回はスクリプトを実行するホストとDBのホストが同一なのでhostnameは省略

パスワードが書かれたファイルなので権限は最低限にしておきます。

chmod 600 /etc/mysql/my.cnf

スクリプトを以下のように書き換えて再度実行します。

create_database.sh
service mysql start
mysql --defaults-extra-file=/etc/mysql/my.cnf -u root -e "drop database if exists dbname;"
mysql --defaults-extra-file=/etc/mysql/my.cnf -u root -e "create database dbname;"
mysql --defaults-extra-file=/etc/mysql/my.cnf -u root dbname < file.sql

警告が出ずに正常にデータベースが作成されました。

まとめ

この方法だと自動でデータベースを操作できるので定期的なバックアップやデータベースのメンテナンスも実現できそうですね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1