MySQLサーバーに接続し、txtファイルから値を挿入するbashスクリプトを作成します。私はこれを書き留めました:
#!/bin/bash
echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('cat test.txt');" | mysql -uroot -ptest test;
しかし、私は次のエラーを受け取っています:
1行目のエラー1136(21S01):列カウントが行1の値カウントと一致しません
エラーはtxtファイルにあると思いますが、多くのバリエーションを試しましたが、まだ成功する見込みはありません。
私のtxtファイルは次のようになります:
10.16.54.29 00:f8:e5:33:22:3fマルサラ
これを試してください:
#!/bin/bash
inputfile="test.txt"
cat $inputfile | while read ip mac server; do
echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('$ip', '$mac', '$server');"
done | mysql -uroot -ptest test;
このようにして、ファイルをストリーミングして、mysqlコマンドの実行も読み取ります。
追加する行がたくさんあると仮定すると、おそらく LOAD DATA INFILE
ステートメント、INSERT
ではありません。ソースファイルはサーバー上にある必要がありますが、ここではそうであるようです。
そんな感じ:
#!/bin/bash
mysql -uroot -ptest test << EOF
LOAD DATA INFILE 'test.txt'
INTO TABLE tbl_name
FIELDS TERMINATED BY ' ';
EOF
LOAD DATA INFILE
には、ドキュメントを読んでわかるように多くのオプションがあります。
3つのパラメーター(IP、MAC、およびSERVER)を必要とするINSERTステートメントでデータベースに文字列として値「cat test.txt」を挿入しようとしているため、このエラーメッセージが表示されます。
最初にテキストファイルを読み取り、IP、MAC、およびサーバーの値を抽出してから、これらの値を一度入力すると次のようなクエリで使用する必要があります。
#!/bin/bash
echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('10.16.54.29', '00:f8:e5:33:22:3f', 'marsara');" | mysql -uroot -ptest test;
私はこれを使用して動作します:
mysql -uroot -proot < infile
または最初にデータベースを選択します
./mysql -uroot -proot db_name < infile
または、SQL全体をクリップボードにコピーして貼り付けます
pbpaste > temp_infile && mysql -uroot -proot < temp_infile && rm temp_infile