20190622のMySQLに関する記事は10件です。

【MySQL】JOIN句

INNER JOIN

複数のテーブルを結合し、指定したカラムで一致するデータのみ取得する

SELECT * FROM ginkou.user A
INNER JOIN ginkou.member b
ON A.status = B.status;

取得結果
WS000001.JPG

LEFT OUTER JOIN

左のテーブルの全データを取得し、右のテーブルのデータを結合する
右のテーブルにマッチするデータがない場合≪NULL≫となる

SELECT * FROM ginkou.user A
LEFT OUTER JOIN ginkou.member b
ON A.status = B.status;

取得結果
WS000000.JPG

RIGHT OUTER JOIN

右のテーブルの全データを取得し、左のテーブルのデータを結合する
左のテーブルにマッチするデータがない場合≪NULL≫となる

SELECT * FROM ginkou.user A
RIGHT OUTER JOIN ginkou.member b
ON A.status = B.status;

WS000000.JPG

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

【Mac、mysql5.7】ローカルでmysqlのパスワードを変更する方法

はじめに

本番環境でmysqlのパスワードを変更しようとしたらいつの間にかローカルのパスワードも変わってしまった!ということがあったので備忘録として。
ローカルではパスワードを設定したくないので、今回は空で設定しています。

①ターミナルでmysqlの起動を停止させる

ホームディレクトリで構いません。

$ mysql.server stop

Shutting down MySQL
. SUCCESS! 

②mysqlをセーフモードで起動

$ sudo mysqld_safe --skip-grant-tables --skip-networking

③起動したターミナルをそのままにし、⌘+tなどでもう一つターミナルのタブを開く

④③で新しく開いたタブにてmysqlにログイン

$ mysql -u root

セーフモードで立ち上げているため、本来であれば上記のコマンドでパスワードが必要なく入れるはずなのですがなぜか自分のPCでは入れませんでした・・。
できない人は下のコマンドにてパスワードを入力してログインしましょう。

$ mysql -u root -p

⑤パスワードの変更

mysql> update user set authentication_string=password("パスワード") where user='root';
mysql> FLUSH PRIVILEGES;
mysql> exit

自分の場合、今回はパスワードは設定したくなかったため、新しいパスワードというところは下記のようにしました。
authentication_string=password("")

⑥mysqlの再起動

$ mysql.server restart

以上でパスワードが変わっているはずです。

【参考記事】
・MySQLのrootユーザーのパスワードを変更
http://ktykwsk.com/mysql%E3%81%AEroot%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%82%92%E5%A4%89%E6%9B%B4/

・MySQL 5.7.6でroot用パスワードが変わらなくて困った話
https://qiita.com/gatchan0807/items/7323a5d2dd365308cb94

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

【Mac、msyql5.7】ローカルでmysqlのパスワードを変更する方法

はじめに

本番環境でmysqlのパスワードを変更しようとしたらいつの間にかローカルのパスワードも変わってしまった!ということがあったので備忘録として。
ローカルではパスワードを設定したくないので、今回は空で設定しています。

①ターミナルでmysqlの起動を停止させる

ホームディレクトリで構いません。

$ mysql.server stop

Shutting down MySQL
. SUCCESS! 

②mysqlをセーフモードで起動

$ sudo mysqld_safe --skip-grant-tables --skip-networking

③起動したターミナルをそのままにし、⌘+tなどでもう一つターミナルのタブを開く

④③で新しく開いたタブにてmysqlにログイン

$ mysql -u root

セーフモードで立ち上げているため、本来であれば上記のコマンドでパスワードが必要なく入れるはずなのですがなぜか自分のPCでは入れませんでした・・。
できない人は下のコマンドにてパスワードを入力してログインしましょう。

$ mysql -u root -p

⑤パスワードの変更

mysql> update user set authentication_string=password("パスワード") where user='root';
mysql> FLUSH PRIVILEGES;
mysql> exit

自分の場合、今回はパスワードは設定したくなかったため、新しいパスワードというところは下記のようにしました。
authentication_string=password("")

⑥mysqlの再起動

$ mysql.server restart

以上でパスワードが変わっているはずです。

【参考記事】
・MySQLのrootユーザーのパスワードを変更
http://ktykwsk.com/mysql%E3%81%AEroot%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%82%92%E5%A4%89%E6%9B%B4/

・MySQL 5.7.6でroot用パスワードが変わらなくて困った話
https://qiita.com/gatchan0807/items/7323a5d2dd365308cb94

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

ローカルでインストールしたのMySQLにGUIツールに接続してみよう!

対象読者

MySQLをローカル環境を整えた人
GUIを使って管理したい人
繋げ方がわからない人

やること

MySQL WorkbenchもしくはSequel Proのどちらかを使ってGUIで管理していきます。

GUIって?

グラフィカルユーザインターフェース(Graphical User Interface)の略語です。
ディスプレイとマウスを使って、操作するのがGUIです。

前提

  • こちらを読んでMySQLのインストールが終わっている方。
  • Sequel ProもしくはMySQL Workbenchをインストールしている方
    • Sequel Proのインストールはこちらからできます。
    • MySQL Workbenchのインストールはこちらからできます。

WindowsユーザはMySQL Workbenchをインストールしてください。
Macユーザはどちらでもいいです。

Sequel Proを使う(Macのみ)

開くと下記の画面が表示されます。

スクリーンショット 2019-06-22 午後3.46.00.png
各フォームに以下の情報を入れてください。

  • 名前
    • 適当に自分の好きな名前をつけてください。
  • ホスト名
    • 127.0.0.1(もしくはlocalhost)
  • ユーザ名
    • root
  • パスワード
    • パスワードを設定していたら、入れてください。設定していなかったら、空白でもOKです。

各情報を入れて、接続のボタンを押すと接続できます!

MySQL Workbenchを使う(Windows,Mac)

開くと下記の画面が表示されます。
(dockerは気にしないでください。通常は何もないです。)

スクリーンショット 2019-06-22 午後3.54.53.png

MySQL Connections の横にマークがあるので、そこをクリックすると、下記の画面が表示されます。
スクリーンショット 2019-06-22 午後3.56.41.png
表示されている画面で、下記必要な項目を入力していきましょう!

  • Connection Name
    • 適当に好き名前をつけてください。(ここではlocalhostにします。)
  • Hostname
    • 127.0.0.1(もしくはlocalhost)
  • Username
    • Username
  • Password
    • Store in Keychain...をクリック
    • パスワードを入力してOKをクリック

OKを押すと、下記にdocker以外にもlocalhostの名前が追加されました。
スクリーンショット 2019-06-22 午後4.01.00.png

実際に接続してみましょう!
下記のGifのように操作してください!
mysql.mov.gif

最後に

以上でMySQLの接続は完了致しました。
エラー文が出たり、操作がわからなくなったら、コメントしてくれると
追記いたします!

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

ローカルでインストールしたMySQLにGUIツールを使って接続してみよう!

対象読者

MySQLをローカル環境を整えた人
GUIを使って管理したい人
繋げ方がわからない人

やること

MySQL WorkbenchもしくはSequel Proのどちらかを使ってGUIで管理していきます。

GUIって?

グラフィカルユーザインターフェース(Graphical User Interface)の略語です。
ディスプレイとマウスを使って、操作するのがGUIです。

前提

  • こちらを読んでMySQLのインストールが終わっている方。
  • Sequel ProもしくはMySQL Workbenchをインストールしている方
    • Sequel Proのインストールはこちらからできます。
    • MySQL Workbenchのインストールはこちらからできます。

WindowsユーザはMySQL Workbenchをインストールしてください。
Macユーザはどちらでもいいです。

Sequel Proを使う(Macのみ)

開くと下記の画面が表示されます。

スクリーンショット 2019-06-22 午後3.46.00.png
各フォームに以下の情報を入れてください。

  • 名前
    • 適当に自分の好きな名前をつけてください。
  • ホスト名
    • 127.0.0.1(もしくはlocalhost)
  • ユーザ名
    • root
  • パスワード
    • パスワードを設定していたら、入れてください。設定していなかったら、空白でもOKです。

各情報を入れて、接続のボタンを押すと接続できます!

MySQL Workbenchを使う(Windows,Mac)

開くと下記の画面が表示されます。
(dockerは気にしないでください。通常は何もないです。)

スクリーンショット 2019-06-22 午後3.54.53.png

MySQL Connections の横にマークがあるので、そこをクリックすると、下記の画面が表示されます。
スクリーンショット 2019-06-22 午後3.56.41.png
表示されている画面で、下記必要な項目を入力していきましょう!

  • Connection Name
    • 適当に好き名前をつけてください。(ここではlocalhostにします。)
  • Hostname
    • 127.0.0.1(もしくはlocalhost)
  • Username
    • Username
  • Password
    • Store in Keychain...をクリック
    • パスワードを入力してOKをクリック

OKを押すと、下記にdocker以外にもlocalhostの名前が追加されました。
スクリーンショット 2019-06-22 午後4.01.00.png

実際に接続してみましょう!
下記のGifのように操作してください!
mysql.mov.gif

最後に

以上でMySQLの接続は完了致しました。
エラー文が出たり、操作がわからなくなったら、コメントしてくれると
追記いたします!

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

(Laravel)Homestead環境のDBをSequel Proで接続する(初心者用)

わざわざvagarnt sshで入るのが面倒なので、Homestead環境のDBをSequel Proで見れるように接続する

まずはHomesteadからMySQLを確認

下記の記事を参考にHomestead環境を作って下さい。
Laravel(Homestead)とVue.jsの環境構築(自分用)
(Vue.js構築はシカトして途中のHomestead環境構築まで)

Homestead.yamlの中身で下記の用になっていると思います。

Homestead.yaml
databases:
    - homestead

上記の記述がDB名になるのでお好きなように変更して下さい。

この状態でvagrant upするとHomestead環境にDBが勝手に構築されるので確認。

僕の環境では初期のユーザーはhomestead パスワードはsecretでした
多分.envファイルに書いてあるのでそこを参考にして下さい。

vagrant ssh
mysql -u homestead -p
Enter password:

MySQLに入れたので、テーブルがあるか確認。

mysql> show datatabases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| homestead           |
| #mysql50#lost+found |
| mysql               |
| performance_schema  |
| sys                 |
+---------------------+
6 rows in set (0.01 sec)

しっかりhomesteadというDBが作られていることを確認しました。

やっと本題のSequel Proに接続する

僕の環境だと下記で入れました。

ホスト(IP): 192.168.10.20
ユーザ名: homestead
パスワード: secret

スクリーンショット 2019-06-22 16.41.46.png

これで入れました。

繋がらない!!って人は↓

ipってなに??って人はHomestead.yamlのip設定をみて下さい。

Homestead.yaml
ip: 192.168.10.20

ユーザ名とパスワードはどこから??
先ほどターミナルからmysqlに入った時に使用した情報です。

以上本題より前置きが長いクソ記事でした。

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

MySQL8.0でPDO接続できない(dockerコンテナ)

TL;DR

  • MySQL8.0ではcaching_sha2_passwordという認証方式に変わったため、PDO接続するユーザの認証方式をmysql_native_passwordに変更する必要があった
  • hostにはdockerのコンテナ名を記入する
  • ユーザを新しく作成して、権限付与し、認証方式を変更する

はじまりのコード

public function connect()
    {
        try {
            $dbh = new PDO('mysql:dbname={db名};host=127.0.0.1', 'root', 'root');
            echo "接続成功\n";
            return $dbh;
        } catch (PDOException $e) {
            echo "接続失敗: " . $e->getMessage() . "\n";
            exit();
        }
    }

{DB名}の部分は自分のデータベース名を入れていました

で、以下エラー文

接続失敗: SQLSTATE[HY000] [2002] Connection refused

理由

hostにはdockerのコンテナ名を入力する必要がある
参考 : Docker Composerではコンテナ間通信はコンテナ名を指定する

hostを変更

$dbh = new PDO('mysql:dbname={db名};host={コンテナ名}', 'root', 'root');

以下エラー(同じ)
接続失敗: SQLSTATE[HY000] [2002] Connection refused

理由

rootの認証方式がchaching_cha2_passwordなので、mysql_native_passwordに設定する必要がある

# mysql接続(mac、もしくはdockerのdbコンテナ上で以下を実行)
❯ mysql -u root -p -h 127.0.0.1

# mysqlのユーザを表示
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | %         | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+

解決策は以下。2. がおすすめ。
1. rootのpluginを変更する
2. 新しくユーザを作って、権限を変更しつつ、pluginを変更する

解決策1「rootのpluginを変更する」

# rootの認証方式をmysql_native_passwordに変更する
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | %         | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+

これで接続成功した。

解決策2「新しくユーザを作って、権限を変更しつつ、pluginを変更する」

# user名がpoeでpasswordがpoeのユーザを作る。
# hostを%にすることで、外部(dockerコンテナ)から接続できるユーザになる
mysql> CREATE USER 'poe'@'%' IDENTIFIED BY 'poe';
Query OK, 0 rows affected (0.02 sec)

# 確認すると、poeができている
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| poe              | %         | caching_sha2_password |
| root             | %         | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
7 rows in set (0.00 sec)

# poeのpluginを変更する
mysql> ALTER USER 'poe'@'%' IDENTIFIED WITH mysql_native_password BY 'poe';
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| poe              | %         | mysql_native_password |
| root             | %         | mysql_native_password |
| test             | %         | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
7 rows in set (0.00 sec)

これで接続してみると...エラーになってしまった...

$dbh = new PDO('mysql:dbname={db名};host={コンテナ名}', 'poe', 'poe');

接続失敗: SQLSTATE[HY000] [1044] Access denied for user 'poe'@'%' to database '{db名}'

エラーになった理由

ユーザの権限がないからエラー。このサイト(MySQL8.0ではGRANT構文でユーザを作成できない)を参考にしつつ、以下実行

# 権限確認
mysql> SHOW GRANTS for 'poe'@'%';
+---------------------------------+
| Grants for poe@%                |
+---------------------------------+
| GRANT USAGE ON *.* TO `poe`@`%` |
+---------------------------------+
1 row in set (0.00 sec)

# 権限変更
mysql> grant all on *.* to 'poe'@'%' with grant option;
Query OK, 0 rows affected (0.03 sec)

# 権限反映
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)

# 権限めっちゃ増えたわ
mysql> SHOW GRANTS for 'poe'@'%';
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for poe@%                                                                                                                                                                                                                                                                                                                                                                                                                      |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `poe`@`%` WITH GRANT OPTION                                       |
| GRANT APPLICATION_PASSWORD_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,GROUP_REPLICATION_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON *.* TO `poe`@`%` WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

すると、接続成功しました。

補足 : 新しく作ったユーザの認証方式を全部mysql_native_passwordにさせる

[mysqld]
default_authentication_plugin=mysql_native_password

これをmy.cnfに追加すると、
新規ユーザ作成時、認証方式が自動的にmysql_native_passwordとなるらしいです


そのほかにも出たエラー

接続失敗: sqlstate[hy000] [2002] no such file or directory
多分hostをlocalhostにしているから。dockerだとhostはコンテナ名

SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'localhost' (10061).
mysqlに入ってuserのhostを見て欲しい。localhostになってるでしょ。ここが%じゃないと外部サーバーからの接続はできないんだと思う

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

【Mac】MySQL5.7をインストールする。(おまけにセキュリティーの設定もする)

対象読者

  • MySQLが入っていない人
  • HoMtSQLを入れてみたい人
  • エラーでなかなか入らない人

前提

  • MacはMojaveのOSで動作確認
  • MySQLの言葉を知っていてる人
  • Homebrewはインストール済み

自分のメモ書きのため、随時更新

手順

MySQL5.7をインストールする。

MySQL5.7をインストールします。

$ brew install mysql@5.7
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
glooctl                                 h3                                      k3d                                     postgrest                               terragrunt                              youtube-dl

==> Downloading https://homebrew.bintray.com/bottles/mysql@5.7-5.7.26.mojave.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/81/815ae8aa8c765f57e806ff9197eaa5783b138c493d68333c553b25f441b6af3e?__gda__=exp=1561175800~hmac=ef410ed9bef72a578728ab88bc0290406ed1f72a09853aef7128c272a2041775&response-content-disposition=
######################################################################## 100.0%
==> Pouring mysql@5.7-5.7.26.mojave.bottle.tar.gz
==> Caveats
We've installed your MySQL database without a root password. To secure it run:
    mysql_secure_installation

MySQL is configured to only allow connections from localhost by default

To connect run:
    mysql -uroot

mysql@5.7 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have mysql@5.7 first in your PATH run:
  echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile

For compilers to find mysql@5.7 you may need to set:
  export LDFLAGS="-L/usr/local/opt/mysql@5.7/lib"
  export CPPFLAGS="-I/usr/local/opt/mysql@5.7/include"

For pkg-config to find mysql@5.7 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/mysql@5.7/lib/pkgconfig"


To have launchd start mysql@5.7 now and restart at login:
  brew services start mysql@5.7
Or, if you don't want/need a background service you can just run:
  /usr/local/opt/mysql@5.7/bin/mysql.server start
==> Summary

たくさんのログが書かれていますが、ここではインストールの説明です。
実はここの説明文が重要で、
例えば下記のバージョンを確認するコマンドを打ったとき、

$ mysql --version
bash: command not found: mysql

と出たらインストールはされているが、mysqlのコマンドが見つからないと出てきます。
ここでインストールの時に出ていた、下記のメッセージに従います。

If you need to have mysql@5.7 first in your PATH run:
echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile

と書いているように、実際に.bash_profileのファイルの中に
'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"'を記載して反映します。
下記が手順です。

$ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile

その後バージョンを確認して、インストールを行いましょう。

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.26, for osx10.14 (x86_64) using  EditLine wrapper

バージョンを確認することができました。
ここで次にMySQLを実際に使えるかインストールのメッセージにもあった

To connect run:
    mysql -uroot

ここのmysql -urootを打って確認しましょう。
下記の表示になったら、

$ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25 Homebrew

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

(おまけ)セキュリティーの設定について

インストールのメッセージにもあった
We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation

このコマンドを打ってセキュリティーの設定に進みましょう。
最初に「VALIDATE PASSWORDプラグインを設定しますか?」と推奨されます。
yを打って進めてください。

$ mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: y

その後進めると次の表示が出るかと思います。

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0

セキュリティの強度をLOWMEDIUMSTRONGの3段階でパスワードを選ぶことができます。
今回はLOWで進めますので、0を選択します。

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

ここでは、パスワードを入力していきます。同じパスワードを二回入力しましょう。最後に
パスワードの強度が100段階中で表示されます。
指定したパスワードでよければyを押して進めてください。

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

MySQLはデフォルトで匿名ユーザの情報が入っています。
いらないので消しましょう。

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

rootユーザでリモートのログイン許可の可否について聞かれています。
基本的にlocalhostでしか使用しないので、必要ありません。
yを押しましょう。

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.
 - Removing privileges on test database...
Success.

デフォルトでtestのDBが作成されています。
必要ないので削除しましょう。
yを押して進めます。

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

DBに更新があった場合、即時リロードして反映するかという説明です。
yを押して有効にしましょう。

以上でセキュリティーの設定は終わりです。

最後にmysqlにログインしてp確認しましょう。

先ほどはmysql -urootでもログインはできたのですが、
今回はPWを設定したので
mysql -root -pと入力する必要があります。
そして、MySQLのセキュリティー設定で決めたPWを入力したら、無事ログインすることができます。

$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.25 Homebrew

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

以上でセキュリティーの設定が終わりました。
おまけの部分が長くなりましたが以上です!

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

SQL EXISTSとJOIN

EXISTS

SELECT *
FROM users
WHERE EXISTS
    ( SELECT id
     FROM orders
     WHERE users.id = user_id
     AND orders.created >= '2019-06');
  • usersテーブルはメインテーブル、ordersテーブルはサブテーブル
  • このメインテーブルのidをサブクエリで参照する事を相関サブクエリと呼ぶ
  • メインテーブル×サブテーブルのレコード数を比較対象とする
  • 条件に一致するレコードが見つかった場合その時点で処理は終了する
  • 見つからなかった場合、メインテーブル×サブテーブルのレコード数を比較しに行く
  • レコード数が増えればその分比較対象となるレコード数も増える

INNER JOIN

SELECT *
FROM users
INNER JOIN
    ( SELECT DISTINCT user_id
     FROM orders
     WHERE orders.created >= '2019-06') AS sub
ON sub.user_id = users.id;
  • 実行順序によりINNER JOIN句のサブクエリから実行される
  • サブクエリの実行でSELECTに指定したカラムの重複削除とWHERE句の条件によって絞り込みが行われる
  • その結果をINNER JOINでメインテーブルに結合する

実行速度

  • EXISTS

    • 45~50ms
  • INNER JOIN

    • 15~20ms

参考

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

Railsの起動エラーとMySQLのエラー解除方法(個人メモ)

Railsの起動エラーと、MySQLのエラー解除方法を個人的にメモする。
【PC:MacBookPro2012(13-inch, Mid 2012)、MacOS Mojave 10.14.4】
【ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]】
【Rails 5.2.3】
【mysql Ver 8.0.15 for osx10.14 on x86_64 (Homebrew)】

MySQLのエラーについて。

まずはmysqlの場所を確認。

$ which mysql
/usr/local/bin/mysql

MySQLサーバーを起動させる。

$ mysql.server start
Starting MySQL
...... ERROR! The server quit without updating PID file (/usr/local/var/mysql/*****.local.pid).

PIDファイルを確認する。

$ ls -la /usr/local/var/mysql/*****.local.pid
ls: /usr/local/var/mysql/*****.local.pid: No such file or directory

MySQLサーバーをストップしてみる。

$ mysql.server stop
ERROR! MySQL server PID file could not be found!

sudoを入れて起動してみる。

$ sudo mysql.server start
Password:
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/*****.local.pid).

安全にMySQLを起動してみる。

$ mysqld_safe
2019-04-24T03:34:24.6NZ mysqld_safe Logging to '/usr/local/var/mysql/*****.local.err'.
2019-04-24T03:34:24.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
2019-04-24T03:34:29.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/*****.local.pid ended

とりあえずアンインストールしてみる。

$ brew uninstall mysql
Uninstalling /usr/local/Cellar/mysql/8.0.15... (267 files, 234.6MB)

ちゃんと削除できたか確認。

$ which mysql
(何も出てこない)

再度インストールしてみる。

$ brew install mysql

これでmysql.server startしてもエラーだったので、上の操作を繰り返してみたけどダメ。

「PIDファイルが見つからない」ので、ファイルの生成をしてみる。

$ /usr/local/var/mysql/mysql > touch /usr/local/var/mysql/*****.local.pid
-bash: /usr/local/var/mysql/mysql: is a directory

奇跡的に起動しないか願いを込めて。

$ mysql.server start
Starting MySQL
...... ERROR! The server quit without updating PID file (/usr/local/var/mysql/*****.local.pid).

どこかで見つけたこのコマンドを入力してみる。

$ /usr/local/var/mysql/mysql > sudo mysql.server restart
-bash: /usr/local/var/mysql/mysql: is a directory

同じかい!!(ノ_<)

$ sudo chown -R _mysql:_mysql /usr/local/var/mysql /tmp/mysql.sock
Password:

何やらパスワードを求められた。。。いけるのか?

sudoで起動させてみよう。

$ sudo mysql.server start
Starting MySQL
..... ERROR! The server quit without updating PID file (/usr/local/var/mysql/*****.local.pid).

あかんのかい!(T . T)

sudoなしで起動できるようにするらしいコマンド。

$ sudo chown -R `whoami`:admin /usr/local/var/mysql /tmp/mysql.sock

起動させてみる。

$ mysql.server start
Starting MySQL
.. SUCCESS! 

キターーーーーーーーー!!!!!!♪───O(≧∇≦)O────♪
よーし!早速Railsをローカル環境で表示させてみよう。

Railsのシステムを起動。

$ rails s

ブラウザでlocalhost:3000を入力。(成功なら画面にRailsの初期画面が表示される)

なんとエラー!!恐怖の赤い画面!!
ActiveRecord::NoDatabaseError (Unknown database 'hello_sample7_development'):
え、データベースがない・・・?∑(゚Д゚)

ということでデータベースを作成。

$ rails db:create
Created database 'ファイル名_development'
Created database 'ファイル名_test'

再度Railsのシステム起動。

$ rails s

Railsの初期画面が出た!!!☆:.。. o(≧▽≦)o .。.:

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