質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

2回答

10198閲覧

シェルでのmysql実行がうまくいかない

arttrh

総合スコア9

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2017/06/29 05:05

編集2017/06/29 05:15

###やりたいこと

シェルスクリプトでmysqlを実行をしようとしていますが、うまく実行されず困っています。
詳しい方教えてください。お願いします!

test.sh ファイルの内容

bash

1#!/bin/sh 2 3confpath=/home/my.cnf 4dbhost=myhost 5dbname=dbname 6 7COMMAND="mysql --default-extra-file=${confpath} -h ${dbhost} ${dbname}" 8# SQL="SHOW TABLES;" 9SQL="INSERT INTO test (name) VALUES ('aaaa');" 10 11# これで出力されたコマンドを実行すると、成功する 12# echo ${COMMAND} -e \"${SQL}\" 13 14${COMMAND} -e \"${SQL}\" 15

###実行

bash

1sudo sh ./test.sh

###メッセージ
実行するとエラーではないのですが、mysql --helpを実行した時のメッセージが出ます。

mysql Ver 14.14 Distrib 5.6.32, for Linux (x86_64) using EditLine wrapper Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Usage: mysql [OPTIONS] [database] . . .

###補足

  • 実行されるコマンドをechoで出力し、それを実行するとINSERTは成功しますので、

--default-extra-file=${confpath}で指定しているものは間違っていないです。

  • mysql -u user -p passwordと変えても状況は変わらず、メッセージも同じです。出力されたものを実行すると成功します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ヒアドキュメントSQLを埋めてできると思います。

bash

1#!/bin/sh 2 3dbhost=myhost 4dbname=dbname 5user=hoge 6pass=password 7 8COMMAND="mysql -h ${dbhost} -u${user} -p${pass} ${dbname}" 9# SQL="SHOW TABLES;" 10 11SQL="INSERT INTO test (name) VALUES ('aaaa');" 12 13# これで出力されたコマンドを実行すると、成功する 14# echo ${COMMAND} -e \"${SQL}\" 15 16${COMMAND} <<_EOF_ 17$SQL 18_EOF_ 19

投稿2017/06/29 09:07

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

mysqlクライアントへの入力はリダイレクトでSQL文のファイルを指定するほうがよいのでは?
また-pをつかうときはパスワードとの間に半角スペースを開けないでください

mysql -u user -ppassword < test.sql

投稿2017/06/29 05:22

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arttrh

2017/06/29 06:11

ありがとうございます! 試してみましたが、 ``` Warning: Using a password on the command line interface can be insecure. mysql Ver 14.14 Distrib 5.6.32, for Linux (x86_64) using EditLine wrapper . . . ``` とWarningが増えたのみでその後は変わらず、実行出来ませんでした。 test.sqlにSQLを書いて実行も試しましたが変わらずでした。 コマンドラインから ``` mysql -u user -ppassword < test.sql ``` を実行すると出来ますが、前述のtest.shファイルの実行だと駄目でした。
yambejp

2017/06/29 06:19

リダイレクトですから、こうでしょう echo "INSERT INTO db.test (name) VALUES ('aaaa');" | mysql -u user -ppassword
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問