MySQLを使っているときに、遭遇したエラーとその解決方法を記録しておく。
○エラー その1
mysqlimport: Error: 1049 Unknown database 'aa'
発生内容:DATABASE 'aa'が見つからない。
入力内容:mysqlimport -u root -p --local aa /home/hogehoge/mywork/test.csv
原 因:インポート先のDB名を間違って’aa’と入力したため。
対 応:正しいDB名に変えた。
○エラー その2(よくやってしまう)
ERROR 1046 (3D000): No database selected
発生内容:DATABASEが選択されていない。
入力内容:ログイン後、すぐにSELECT文やCREATE文を実行。
原 因:USE DB名で作業したいデータベースを指定しなかったため。
対 応:USE DB名を実行した。
○エラー その3(定番)
ERROR 1064 (42000): You have an error in your SQL syntax;
発生内容:構文にエラーがあります。
入力内容:SELECT * FORM tbl_stocks WHERE order_id = '90';など
原 因:予約語などの綴り間違い、()の閉じ忘れなど。
対 応:正確に入力した。
○エラー その4
ERROR 1068 (42000): Multiple primary key defined
発生内容:PrimaryKeyが複数定義されています。
入力内容:ALTER TABLE tbl_staff ADD PRIMARY KEY (staff_name);
原 因:CREATE文で既にキーを設定していたため。
対 応:一度、PRIMARYキーを外して、ALTER文でまとめて指定する。もしくはテーブルを作り直す。
*AUTO_INCREMENTを指定している場合は、CHANGEでAUTO_INCREMENTを外し、その後、キーを外して、とか手間がかかる。
○エラー その5
mysqlimport: Error: 3948, Loading local data is disabled;
発生内容:データのロードが出来ない。
入力内容:mysqlimport -u root -p --local test1 /home/hogehoge/mywork/test.csv
原 因:ファイル読み書きの許可をしていなかった。
対 応:サーバー側、クライアント側双方で、使用できるよう許可を出す。
・サーバー側 local_infileの値を1にセット
SET PERSIST local_infile= 1;
/*確認*/
mysql> SELECT @@local_infile;
+----------------+
| @@local_infile |
+----------------+
| 1 |
+----------------+
1 row in set (0.00 sec)
・クライアント側 ログイン時にオプションで許可を示す値をセット
mysql -u root -p --enable-local-infile
◯ メモ
・エラー番号と説明で、何となく何が起こったのかは推測できるが、今後はエラーログの出力等を詳しく調べ、不具合だけでなく、動作状況の確認(処理の遅いものなど)ができるようにしたい。