20211230のMySQLに関する記事は5件です。

Go(Gorm)+MySQLなDocker環境でdial tcp connection refusedが発生した際の対処法

エラー内容 docker-compose up時に以下のエラーが発生しました。 [error] failed to initialize database, got error dial tcp 172.19.0.2:3306: connect: connection refused 原因 docker-composeでcontainer_nameを指定していなかったため 対処法 Before docker-compose.yml version: "3.9" services: backend: build: . ports: - 8000:8000 volumes: - .:/app depends_on: - db db: image: mysql:5.7.22 restart: always environment: MYSQL_DATABASE: ambassador MYSQL_USER: root MYSQL_PASSWORD: root MYSQL_ROOT_PASSWORD: root volumes: - .dbdata:/var/lib/mysql ports: - 33066:3306 main.go var DB *gorm.DB func Connect() { var err error DB, err = gorm.Open(mysql.Open("root:root@tcp(db:3306)/ambassador"), &gorm.Config{}) if err != nil { panic("Could not connect with database!") } } After docker-compose.yml container_name: godockerDBを追加 version: "3.9" services: backend: build: . ports: - 8000:8000 volumes: - .:/app depends_on: - db db: image: mysql:5.7.22 container_name: godockerDB # 追加 restart: always environment: MYSQL_DATABASE: ambassador MYSQL_USER: root MYSQL_PASSWORD: root MYSQL_ROOT_PASSWORD: root volumes: - .dbdata:/var/lib/mysql ports: - 33066:3306 main.go godockerDBを指定 var DB *gorm.DB func Connect() { var err error # container_nameを指定 DB, err = gorm.Open(mysql.Open("root:root@tcp(godockerDB)/ambassador"), &gorm.Config{}) if err != nil { panic("Could not connect with database!") } } 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

「MySQLでデータベース作成」と「PHPでデータベース記録」。(8日目)

Kotlinのスマホアプリ(クライアント)が、ほぼ完成したので、サーバ側で受信したデータを記録する為、データベースを作成していきます。 サーバは、契約済みのロリポップを使用。 前回の記事 Kotlinで地図アプリ(ゴミ拾いアプリ)作成。(7日目) 一週間でやった事 GoogleMap APIを使い、地図+位置情報を表示 移動に合わせて、マップがスクロール ゴミの種類を「大・中・小」にわけ、ボタンアイコンを作成 ボタンにイメージアイコンを作成 ボタンタップ後、サーバー側へHTTPS(GET)でデータを送信(BASIC認証) 送信前に確認ダイアログを表示 送信後、地図上にアイコンを表示 アイコンタップで、種別/時間を表示 サーバー側でBASICに認証 サーバー側でPHPを使いGETデータ記録テスト ロリポップサーバでデータベースを作成 ログインし、会員ページからデータベースを作成 ロリポップサーバへSSHでログイン 既に作成済みなの省略。 詳細は公式サイトの情報は、ネットの情報を参照。 希望があれば、PuTTYを使った公開鍵方式でのログイン方法を紹介しますが、ネット情報を見た方が早いかもです…。 自動ログイン設定 MySQLへのログイン時、毎回、コマンドを打つのが面倒なので、.my.cnfを作成。 SSHで接続し、ホームディレクトリに「.my.cnf」を作成 SSH(ssh.lolipop.jp) $ touch $HOME/.my.cnf $ chmod 600 $HOME/.my.cnf $ vi $HOME/.my.cnf .my.cnfを編集 .my.cnf [client] host=(ホスト) database=(データベース名) user=(ID) password=(PASS) mysql コマンドを叩いてログインテスト SSH(ssh.lolipop.jp) $ mysql -u (ID) 上手くいけばmysqlへのログイン テーブル作成 データベースの選択 SSH(ssh.lolipop.jp) $ mysql > use (データベース名); テーブル作成(日時、ゴミの種類、緯度、経度) SSH(ssh.lolipop.jp) $ mysql > CREATE TABLE GPS ( DATE DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, type int(1) DEFAULT 0, latitude double DEFAULT 0, longitude double DEFAULT 0 ); 終了 SSH(ssh.lolipop.jp) $ mysql > quit; サーバ側で、HTTP GETで受信したデータをPHPでデータベースへ保存 index.php <?php define('HOSTNAME', '(ホスト)'); define('DATABASE', '(データベース名)'); define('USERNAME', '(ID)'); define('PASSWORD', '(PASS)'); if(isset($_GET['DATA']) && $_GET['DATA'] != ''){ try { $db = new PDO('mysql:host=' . HOSTNAME . ';dbname=' . DATABASE, USERNAME, PASSWORD); $db->query('use '.DATABASE); $stmt = $db->query('INSERT INTO GPS VALUES ('.$_GET['DATA'].')'); $databases = $stmt->fetchAll(PDO::FETCH_COLUMN); echo 'OK'; } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } } else{ echo "NG"; } ?> スマホアプリから位置情報を送信し、記録できるのを確認して終了。 ※スマホ側では、送信したデータが正常に記録されたかどうかチェックコードも追加 ※$_GET['DATA']は、スマホ側でMySQLのデータフォーマットに合わせた形式を作成 今後の課題 WEB上で、GoogleMapを表示(HTML,CSS,JavaScript) MySQLのデータを読み込み地図上にマーカー表示(JavaScript,php,Node.js) WEBフレームワークのBootstrap上で、GoogleMap表示
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【MySQL】基本SQL構文まとめ

はじめに MySQLを勉強していますが、構文が多くてなかなか覚えられないので、チートシートとして本記事を書きました。 環境 以下のバージョンを使用していることが前提となります。 MySQLバージョン:Ver 8.0.27 基本SQL構文 データベース操作 データベース一覧の確認 mysql SHOW DATABASES; 使用するデータベースの選択 mysql USE データベース名; データベース作成 CREATE DATABASE データベース名; データベース削除 DELETE DATABASE データベース名; テーブル操作 テーブル一覧の確認 SHOW TABLES; テーブルの作成 mysql CREATE TABLE テーブル名 ( カラム名1 データ型1 (オプション1), カラム名2 データ型2 (オプション2),     ・     ・ カラム名n データ型n ); データ型の例:数値型(INT, DECIMALなど)、文字列型(CHAR, VARCHARなど)、時間型(DATE, TIMEなど)など 詳しいデータ型については下記MySQLホームページが参考になります。 https://dev.mysql.com/doc/refman/8.0/en/data-types.html オプションの例 UNSIGNED:0を含む自然数のみ扱うようにする。例としてINTにUNSIGNEDオプションをつけると0〜4294967295まで扱えるようになる CREATE TABLEはいろいろと細かく設定できるので、詳しい内容は下記MySQLホームページが参考になります。 https://dev.mysql.com/doc/refman/8.0/en/create-table.html レコード追加 mysql INSERT INTO テーブル名 (カラム名1, カラム名2) VALUES (値1, 値2); mysql INSERT INTO テーブル名 (カラム名1, カラム名2) VALUES (値1, 値2), (値3, 値4), ・・・; 上記のように複数のレコードを一度に入れることも可能。 テーブルの削除 mysql DROP TABLE テーブル名; データ取得 mysql SELECT カラム名1, カラム名2 FROM テーブル名; mysql SELECT * FROM テーブル名; 全てのカラムのデータ取得する 条件を指定してデータ取得 mysql SELECT * FROM テーブル WHERE カラム名1 >= 10; 上記例ではカラム名1が10以上のレコード(WHERE カラム名 >= 10)の全てのカラムデータ(*)を取得する。 WHEREで使える比較演算子 比較演算子 意味 > ~より大きい >= ~以上 < ~より小さい <= ~以下 = ~と等しい !=または<> ~と等しくない 条件の組み合わせ(AND:かつ) mysql SELECT * FROM テーブル WHERE カラム名1 >= 10 AND カラム名1 <= 20; カラム名1が10以上かつ20以下のレコードの全てのカラムのデータを取得する。以下のようにも書くことができる。 mysql SELECT * FROM table1 WHERE カラム名1 BETWEEN 10 AND 20; 条件の組み合わせ(OR:または) mysql SELECT * FROM テーブル名 WHERE カラム名1 = 5 OR カラム名1 = 10; カラム名1が5または10であるレコードの全てのカラムのデータを取得。以下のようにも書くことができる。 mysql SELECT * FROM テーブル名 WHERE カラム名1 IN (5, 10); 特定の文字列を持つデータ抽出 mysql SELECT * FROM テーブル名 WHERE カラム名 LIKE 'UTSUBO'; カラム内に'UTSUBO'という文字列を持つレコードの全てのカラムデータを取得する。 ※'UTSUBO'の大文字・小文字を区別しない mysql SELECT * FROM テーブル名 WHERE カラム名 NOT LIKE 'UTSUBO'; カラム内に'UTSUBO'という文字列を持たないレコードの全てのカラムデータを取得する。 ※'UTSUBO'の大文字・小文字を区別しない 上記だと大文字、大文字・小文字の区別ができないので、 mysql SELECT * FROM テーブル名 WHERE カラム名 LIKE BINARY 'utsubo'; とすると、小文字の'utsubo'を持つレコードの全てのカラムデータを取得する。 また%や_のワイルドカードを使うことができる。 %や_自体の抽出をしたいときは\%や\_のようにバックスラッシュをつける。 NULLの抽出にはISを使う。条件反転はIS NOT mysql SELECT * FROM テーブル名 WHERE カラム名 IS NULL; 抽出したデータの並び替え mysql SELECT * FROM テーブル名 ORDER BY カラム名; カラム名を小さい順で並べる(アルファベットの場合Aから並べる) mysql SELECT * FROM テーブル名 ORDER BY カラム名 DESC; カラム名を大きい順で並べる(アルファベットの場合Zから並べる) 上位のレコードの抽出 mysql SELECT * FROM テーブル名 LIMIT 3; 上位3つのレコードを抽出する mysql SELECT * FROM テーブル名 ORDER BY カラム名 DESC LIMIT 3; 上記のように大きい順に並べ替えた後に上位3つを抽出することもできる。 また、OFFSETをつけることもできる。 mysql SELECT * FROM テーブル名 ORDER BY カラム名 DESC LIMIT 3 OFFSET 2; 上記を実行すると上から2つのレコードを無視して、大きい順に並び替えた後、上位から3, 4, 5つ目のレコードを抽出する。 レコードの更新 mysql UPDATE テーブル名 SET カラム名1 = カラム名1 + 5 WHERE カラム名1 >= 10; 上記ではカラム名1内で値が10以下のデータ(WHERE カラム名1 >=10)に5を加えている(カラム名1 =カラム名1 + 5)。 ※カラム名1 += 5のように書くとエラーになるので注意 レコードの削除 mysql DELETE FROM テーブル名 WHERE カラム名 < 10; カラム名内のデータが10未満のレコードを削除する 全てのレコードの削除 mysql TRUNCATE TABLE テーブル名; カラムの追加 mysql ALTER TABLE テーブル名 ADD カラム名 データ型; mysql ALTER TABLE テーブル名 ADD カラム名2 データ型 AFTER カラム名1; 上記のように追加したいカラムの列を指定できる。上記ではカラム1の次にカラム名2を追加している。 mysql ALTER TABLE テーブル名 ADD カラム名2 データ型 FIRST; 上記を実行すると元のテーブルの初めの列にカラム名1があるとして、カラム名1の前の列にカラム名2を追加できる。 カラムの削除 mysql ALTER TABLE テーブル名 DROP カラム名; カラムの変更 mysql ALTER TABLE カラム名1 CHANGE カラム名2 データ型2; カラム名1からカラム名2、データ型2へ変更する カラム名の変更 mysql ALTER TABLE カラム名1 RENAME カラム名2; カラム名1をカラム名2に変更する。 参考記事 以下の記事を参考にさせていただきました。 【これだけ覚えてたらOK!】SQL構文まとめ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【AWS】EC2とRDS(MySQL)を接続してみた

はじめに AWSのサービスについて色々学習してく中で、EC2からDBに接続するような構成は多々見ると思います。今回はEC2からRDS(MySQL)に接続する方法について記述していきます。 前提 EC2インスタンスは構築済みという前提で記述していきます。EC2はLinuxでインスタンスタイプはt2.microです。 また、様々な手順を一部省略して記載していきます。最低限コンソールを操作できる知識とスキルは持ち合わせているものとして記述していきます。 セキュリティグループ作成 EC2⇒セキュリティグループ⇒セキュリティグループのを作成の順でクリックします。 ・セキュリティグループ名 セキュリティグループの名前を設定します。任意の名前を入れていください。入力は必須です。 ・説明 セキュリティグループの説明を入力します。 ・VPC どのVPCにセキュリティグループを作成するかを指定します。 今回は、EC2とRDSを同じVPC内に構築するので、その二つと同じVPCにしてください。 ・インバウンドルール RDSに対してどの通信を許可するかを指定します。今回はEC2からの接続のみ許可すれば良いので画像のように入力します。 ただ、IPアドレスの部分は各自のEC2のプライベートIPアドレスを入力してください。 サブネットグループ作成 次にサブネットグループの作成を行います。 RDS⇒サブネットグループ⇒サブネットグループを作成の順でクリックしていきます。 ・名前 サブネットグループの名前を設定します。入力は必須です。 ・説明 サブネットグループの説明を入力します。 ・VPC どのVPCにセキュリティグループを作成するかを指定します。 今回は、EC2とRDSを同じVPC内に構築するので、その二つと同じVPCにしてください。 ・アベイラビリティゾーン マルチAZ構成にする場合は二つのAZに属したRDSを構築するため、AZ-aのとAZ-cのAZを選択します。 今回はマルチAZ構成にしないため一つでも構いません。EC2インスタンスと同じAZを選択しましょう。(画像は二つ選択していますが気にしないでください。) ・サブネット 選択したAZに属するサブネットを選択しています。本来ですと、EC2をパブリックサブネットでRDSをプライベートサブネットに配置したりする構成が多いと思いますが、今回は特に気にせず同じサブネットに置いてみます。 AZを一つしか選択していない人はサブネットも一つで十分です。 DB作成 次にDBを作成していきます。 RDS⇒データベース⇒データベースを作成の順でクリックしていきます。 データベース作成方法は標準作成を選択肢、エンジンはMySQLを選択します。 バージョンはお好きなものを選択。特に指定等なければ最新のバージョンで構いません。 テンプレートは無料利用枠を選択します。 DBインスタンス識別子は先頭にtest等をつけてわかりやすくしましょう。 パスワードは自身のパスワードを利用します。 DBインスタンスサイズはdb.t2.micro、ストレージは20GBとします。 VPCはEC2と同じ環境を選択しましょう。 ※後でVPCの変更はできませんのでご留意ください。 サブネットグループは先ほど作成したサブネットグループを指定。 セキュリティグループも先ほど作成したセキュリティグループを指定します。 パブリックアクセスは今回は行わないため、なしにチェックを入れてください。 データベースの作成をクリックします。データベース起動までに数分かかりますので、少し待ちましょう。 データベースが作成できたら、作成したDBをクリックするとエンドポイントが表示されているので、それをメモしておきます。 DB接続 事前に構築してあるEC2にSSHで接続します。 以下コマンドを実行してmysqlをインストールします。 最後の完了しましたと表示されたらOKです。 $ sudo yum -y install mysql 次に以下のコマンドを実行します。 RDSのエンドポイントは各自のエンドポイントを入力します。 $ mysql -u admin -p -h <RDSのエンドポイント> パスワードを聞かれるのでDBインスタンスを作成する際に指定したパスワードを入力します。 以下のようにMySQL [(none)]>と表示されれば接続完了です。 [ec2-user@ip-172-31-33-168 ~]$ mysql -u admin -p -h <エンドポイント> Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 15 Server version: 8.0.23 Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> さいごに 以上がEC2とRDS(MySQL)の接続手順になります。 今度はマルチAZや複数のEC2から接続する方法などの記事を作成しようと思っていますので、ぜひそちらもごらんください。 最後までご覧いただきありがとうございました!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【 rails db:migrate実行時のエラー 】

カラムを新しく追加し、rails db:migrateを実行したが、エラー発生 deviseを導入し、ユーザー管理機能を実装していました。 login_idカラムを追加しようと思い、マイグレーションファイルにカラムを追記し、 rails db:migrateを実行したところ、 Mysql2::Error: Table 'users' already existsと表示される。 (usersテーブルは既に存在していますよ〜) なぜ? 原因はよく分からないまま、エラーをもとに検索。 結果 rails db:dorpで一度データベースを削除し、 rails db:createで再生成。 その後rails db:migrateを実行すると、エラーも無く、 login_idカラムも追加されていました。 反省 configディレクトリ内のdatabase.ymlファイルに記してある、 utf-8mb4をutf-8に変更していなかった事が原因と考えられます。 この二つではデータの保存形式が異なるそうです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む