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

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

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

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

2回答

2882閲覧

GoでのMySQL接続がうまくいかない

退会済みユーザー

退会済みユーザー

総合スコア0

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2017/08/17 18:56

編集2017/08/17 18:58

前提

GoのフレームワークRevelを使ってWeb開発をしています。

エラー

mysqlでは

sudo mysql use mysql select * from users

としてもEmpty setを表示されます。ここでGormを用いて

var dsn = "root:@/revelapp_development" Db, err = gorm.Open("mysql", dsn)

をするとhttp://localhost:9000に接続すると

dial tcp 127.0.0.1:3306: getsockopt: connection refused

と出ます。
どのようにしたら解決できるでしょうか。よろしくお願いします。

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

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

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

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

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

guest

回答2

0

MySQL が UNIX Domain Socket モードになっているのに TCP モードで接続しているのが原因です。

root:@unix(/var/lib/mysql/mysql.sock)/revelapp_development

これで試して下さい。mysql.sock のパスは存在するか確認下さい。

投稿2017/08/18 02:57

編集2017/08/18 02:57
mattn

総合スコア5030

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

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

退会済みユーザー

退会済みユーザー

2017/08/18 04:20

`/var/lib/mysql`自体がなかったのですが、これはどういうことなのでしょうか?
mattn

2017/08/18 05:06

mysql はどこにインストールされているのでしょうか?
退会済みユーザー

退会済みユーザー

2017/08/18 10:25

自分のpcに入れましたが、ふぁいるがみあたりません、、、 sudo mysqlとするとログインできます、、、
mattn

2017/08/18 16:58

sudo which mysql とすると何が返るでしょうか
退会済みユーザー

退会済みユーザー

2017/08/18 17:13

`/usr/local/bin/mysql`とかえってきます。 よろしくお願いします。
guest

0

まずは MySQL がきちんと 127.0.0.1 からのアクセスを許容する状態で 3306 のポートを Listen しているかを netstat コマンドなどで確認し、確認できたら、データベースに接続するユーザを作成して許可設定をするのがよいでしょう。

マニュアルを読むか "SQL GRANT" などの語で検索エンジンで検索すると手順があると思います。

作成したユーザでデータベースの作成や読み書きを行えば動くようになると思います。

投稿2017/08/17 19:22

takano32

総合スコア87

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

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

退会済みユーザー

退会済みユーザー

2017/08/17 19:26

ローカル環境は`localhost:9000`、つまりポート番号9000で開いていて、mysqlは`3306`で開いていてもうまく動作するのですか?同じでなければならないとかありませんか? よろしくお願いいたします。
takano32

2017/08/17 19:53

9000 は Go が使っていて 3306 は MySQL が使っている、という状態なら特に問題にならないですよ。 同じである必要はありません、というより、同じになってはマズいです。同じようになってしまうと、たいていの場合はどちらかのプログラム(この質問では Go のアプリケーションか MySQL のどちらか)の起動に失敗するようになるはずです。
takano32

2017/08/17 19:55

3306 で MySQL が Listen しているか確認する、というステップが大切です。 MySQL が UNIX ドメインソケットで起動していた場合は TCP ソケットで接続しようとしても接続できません。 UNIXドメインソケットで起動している疑いがあるときは `my.cnf` で設定を変更して、再起動しましょう。
退会済みユーザー

退会済みユーザー

2017/08/18 04:21

初心者ですみません。 ``` netstat -t ``` をみても ``` IPアドレス:3306 ``` などは見当たりません。これはtcpでポート開けていないということですよね? my.cnfをどのように書き換えたらいいのでしょうか?
takano32

2017/08/18 11:27

`sudo netstat -lntp` などとすると TCP で Listen しているプログラムとポートが分かります。 TCP/IP のソケットについて my.cnf で設定する項目は `bind-address` という名前です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問