2016-10-10 21 views
1

DBの処理を行うbashスクリプトを作成しています。 MySQL初心者。私はMacを使い、自作でMySQLをインストールしています。ログインせずにmysqlコマンドを実行するか、コマンドごとに-u rootを追加してください。

現在、ユーザー名「root」を使用していますが、pwは設定されていません。私は以下の構文をpwを含むかもしれない他の人々を助けるために含んでいます。

私の目標は、私のbashスクリプトでmysqlのコマンドは、可能な限り「クリーン」としても持つようにヒゲの契約

されていませんが、可能であればこれを行うにしたいと思います。

# If I can do it without logging in (*ideal) 
mysql CREATE DATABASE dbname; 

# Or by logging in with - mysql -u root -pPassword 
CREATE DATABASE dbname; 

# Instead of 
mysql -u root -pPassword -e"CREATE DATABASE dbname"; 

例は、それを簡素化しようとしました。私は、私がしなければならないことがいくつかあるので、できるだけ自分のコードをきれいに保つことになります。私はbashスクリプトでログインしようとしましたが、MySQLにログインするとスクリプトは停止し、コマンドを実行しませんでした。

私は検討していた(が、本当に好きではない)別のオプションは、VARにユーザ名とPWの文字列を保持し、だから、そう

# Set the login string variable 
login_details="-u root -p password -e" 

# example command 
mysql $login_details"CREATE DATABASE dbname"; 

任意のアイデアのようにすべてのcommmandのためにそれを呼び出すことだけだろうか?

答えて

2

新しいbashスクリプトファイルを作成し、このファイルをすべてのコマンドに入れて実行します。あなたのbashスクリプトに正しいユーザー名とパスワードを与えることを忘れないでください。 bashスクリプトの場合

:あなたは、単一のmysqlコマンドを実行したい場合は

#!/bin/bash 
mysql -u root -pSeCrEt << EOF 
use mysql; 
show tables; 
EOF 

mysql -u [user] -p[pass] -e "[mysql commands]"

例:

mysql -h 192.168.1.10 -u root -pSeCrEt -e "show databases" 

実行するために、複数のMySQLコマンド:

mysql -u $user -p$passsword -Bse "command1;command2;....;commandn" 

注:-Bは、それぞれに、カラムセパレータとしてタブを使用してバッチ、印刷結果のためのものです新しい行の行。このオプションを指定すると、mysqlは履歴ファイルを使用しません。バッチモードでは、出力フォーマットが非字形になり、特殊文字がエスケープされます。 -sはサイレントモードです。出力を少なくします。 -eはステートメントを実行して終了します

+1

あなたの最初のメソッドが動作しました。ありがとう!任意の方法で、mysqlの中でコマンドラインに文字列をエコーし​​たり印字する方法を知っていますか? –

+1

それはうまく働いたと聞いてよかったです。はい、この投稿に従ってくださいhttp://stackoverflow.com/questions/8147834/how-to-echo-print-statements-while-executing-a-sql-scriptこれがうまくいかない場合は、提案を試してください。何か助けてください – Jordon

+1

それは働いて、もう一度感謝! –

関連する問題