20190302のMySQLに関する記事は4件です。

MAMP(Windows)のMySQLに接続する

MAMP(Windows)のMySQLに接続する

$dsn = 'mysql:dbname=mysql;host=localhost;charset=utf8;port=3306';
$user = 'root';
$pass = 'root';
$pdo = new PDO($dsn, $user, $pass);

ちなみにMAMPのサーバー起動中に下記にアクセスするとphpMyAdminも確認できた
http://127.0.0.1/phpMyAdmin/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker-compose で PHP7.2 + Apache + MySQL + phpMyAdmin 環境を構築

Docker の学習メモです。

本記事でのコンテナ作成は全て Docker Hub の image を使用して行なっています。
Dockerfile からのイメージ作成はまた今度。

ディレクトリ構造

  .
  ├── docker-compose.yml
  └── html
  │    └── index.php
  └── php.ini

docker-compose.yml

docker-compose.yml
version: '3'

services:
  php:
    image: php:7.2-apache
    volumes:
      - ./php.ini:/usr/local/etc/php/php.ini
      - ./html:/var/www/html
    ports:
      - 8080:80
  mysql:
    image: mysql:5.7
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=test
      - MYSQL_USER=test
      - MYSQL_PASSWORD=test
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=test
      - PMA_PASSWORD=test
    links:
      - mysql
    ports:
      - 4040:80
    volumes:
      - ./phpmyadmin/sessions:/sessions

index.php

html/index.php
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>php7.2-apache</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<?php phpinfo(); ?>
</body>
</html>

php.ini

php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

現在のコンテナ稼働状況を確認

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

稼働中のコンテナが存在していないため、何も表示されない。

コンテナの作成と開始

$ docker-compose up -d
Creating network "php72-apache_default" with the default driver
Creating php72-apache_mysql_1 ... done
Creating php72-apache_php_1        ... done
Creating php72-apache_phpmyadmin_1 ... done

コンテナの稼働状況を確認する。

$ docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED              STATUS              PORTS                            NAMES
120e4b86b987        phpmyadmin/phpmyadmin   "/run.sh supervisord…"   About a minute ago   Up About a minute   9000/tcp, 0.0.0.0:4040->80/tcp   php72-apache_phpmyadmin_1
bf42cd71d3d4        php:7.2-apache          "docker-php-entrypoi…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp             php72-apache_php_1
699f32a6424e        mysql:5.7               "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp, 33060/tcp              php72-apache_mysql_1

PHP の確認

http://localhost:8080/

ローカルの html/index.php の内容を変更すると反映される。

MySQL + phpMyAdmin の確認

http://localhost:4040/

サービスの停止

docker-compose.yml に記載されているサービスのコンテナが全て停止される。

$ docker-compose stop
Stopping php72-apache_phpmyadmin_1 ... done
Stopping php72-apache_php_1        ... done
Stopping php72-apache_mysql_1      ... done

コンテナの稼働状況を確認する。
停止しているコンテナを表示する為に -a オプションを使用します。

$ docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                      PORTS               NAMES
120e4b86b987        phpmyadmin/phpmyadmin   "/run.sh supervisord…"   3 minutes ago       Exited (0) 11 seconds ago                       php72-apache_phpmyadmin_1
bf42cd71d3d4        php:7.2-apache          "docker-php-entrypoi…"   3 minutes ago       Exited (0) 11 seconds ago                       php72-apache_php_1
699f32a6424e        mysql:5.7               "docker-entrypoint.s…"   3 minutes ago       Exited (0) 11 seconds ago                       php72-apache_mysql_1

サービスの開始

docker-compose.yml に記載されているサービスのコンテナが稼働する。
あらかじめ、コンテナが作成されている必要がある。

$ docker-compose start
Starting php        ... done
Starting mysql      ... done
Starting phpmyadmin ... done
$ docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                            NAMES
120e4b86b987        phpmyadmin/phpmyadmin   "/run.sh supervisord…"   8 minutes ago       Up 10 seconds       9000/tcp, 0.0.0.0:4040->80/tcp   php72-apache_phpmyadmin_1
bf42cd71d3d4        php:7.2-apache          "docker-php-entrypoi…"   8 minutes ago       Up 11 seconds       0.0.0.0:8080->80/tcp             php72-apache_php_1
699f32a6424e        mysql:5.7               "docker-entrypoint.s…"   8 minutes ago       Up 12 seconds       3306/tcp, 33060/tcp              php72-apache_mysql_1

コンテナの削除

docker-compose.yml に記載されているサービスのコンテナを停止、コンテナとネットワークが削除される。

$ docker-compose down
Stopping php72-apache_phpmyadmin_1 ... done
Stopping php72-apache_php_1        ... done
Stopping php72-apache_mysql_1      ... done
Removing php72-apache_phpmyadmin_1 ... done
Removing php72-apache_php_1        ... done
Removing php72-apache_mysql_1      ... done
Removing network php72-apache_default
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ノンプログラマー、はじめてのSQL

全く知識のない状態からSQLを叩けるようになるまで何をしたかをざっくりまとめました。因みに大体二週間程度でそこそこ書けるようになりました。

自己紹介

元公務員志望のバリバリ文系大学生。プログラミングはPythonをたまに書くくらいの感じで知識は特にない。Qiita初投稿なのでなにか変なところあったら言ってください。

SQLを始めた背景

ノリと勢いで某IT企業の長期インターンに参加。そこでSQLに触れることに。Redashを自由に使っていいとのことだったのでアサインされていた業務で練習をはじめました。

はじめにやったこと

とりあえず『 SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus) 』を一周だけさらっと読んでおく。
image.png 
基本を押さえておいて、あとは手を動かしながら覚えようと思っていたので、基本の構文と本のどこにどの内容が載っているかを意識して読み進めていきました。

実際に書き始める

辞書の代わりに先ほどの本と『 達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ』を準備。
image.png

意識したこと

  • 検索・質問をしまくる
  • 紙に書き出す

検索・質問をしまくる

はじめたてで、知識がないため考えたところでわからないという状態でした。少しでも躓いたら即検索、即質問が効率的だなと。便利な世の中になりましたね。どんなに些細なことでもすぐにやりました。あと、詳しい人に書いたコードについてレビューしてもらったりも。

紙に書き出す

想像してる内容を文でも図でもいいので書いてみる。私の場合、集合で考えていたのでベン図書いてそこに適宜情報追加していくような感じでした。それを設計図にすることもしばしば。

スパゲッティ職人

2週間ほどが経ち、業務にも慣れてきた・そこそこSQLにも慣れてきたという状況で怠惰な心が「一気に必要なデータを集めてしまえ」と語りかけてきて、実行。超大作イケイケコードが見事に出来上がりました。しかし、実行すると返ってこない。おかしい。これは他部署にも迷惑がかかるぞと焦りまくりサーバーの管理をしている方に頼み、キューを削除してもらいました。

原因と対処

単純な指令を集めて書いたが、元のデータが大きい+集めすぎて結局複雑すぎる指令になった(所謂スパゲッティクエリ)ことが原因となった。めっちゃ反省したとともに、いかにサーバーに負担をかけず、高速なクエリを書くかというところに焦点を当て始めた。
そこで、『SQLアンチパターン』を読むことに。image.png

この本にはわかりやすくアンチパターンや事例が掲載されており、とても勉強になりました。

最後に

といった雑な感じですがこんな感じで3週間ほど勉強したら粗削りなりにそこそこMySQLが書けるようになりました。拙い文章で恐縮でしたが、ここまで読んでいただきありがとうございました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL8.0 にしたら Sequel Pro が使えなくなっちゃった

はじめに

Docker で DB コンテナを MySQL のイメージを使って作った。
(この認識で合っているのか?)
その時、バージョンの指定をしていないので最新が入った(のか?)

mysql
# mysql --version
mysql  Ver 8.0.15 for Linux on x86_64 (MySQL Community Server - GPL)

まあ、なんにせよ、バージョンは 8.0 なわけである。

作った時に書いた記事

研修で sequel pro と言う MySQL の GUI ツールの存在を知ったので、
せっかくなら自習でも使ってみようと言うことでインストールをした。

やったことと起こったと

1. インストール

brew
$ brew cask install sequel-pro

image.png
パンケーキだ

2. 接続

サーバの立ち上げについては割愛

情報を入力して、
image.png

接続が成功しました を確認
⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️

image.png

は???成功したんじゃねえのかよ

と、このように、キレてはいけません。

冷静に
⬇️

3. ググった

ら、すぐ出てきた
解決方法
公式のissue

なんと パンケーキは MySQL8.0 に対応していないらしい。
パンケーキの夜版???をインストールする必要があるらしい。

4. 解決黒頭巾

リンク先の方法に習って、 sequel pro の再インストールをした
夜バージョンに交換
同じ名前のアプリを2つ持てないから削除する必要があるのであーる

brew
$ brew cask uninstall sequel-pro
$ brew cask install homebrew/cask-versions/sequel-pro-nightly

できた。
image.png

パンケーキ(はがねタイプ)

接続がめん
image.png
できた
image.png

...かっこいい...とてもクールだ、さすが夜バージョン

まとめ

『メタルコート』を持たせた『 Sequel Pro 』 を夜に通信交換したら進化する

って感じ
...通じない人はポケットモンスター金/銀 をやってください
image.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む