20210116のMySQLに関する記事は9件です。

Cloud9でWordPress環境を構築 2

WordPressの学習&AWSに触れるのを目的として
AWS Cloud9でWordPress環境を構築するまでの備忘録。

ここまでやったこと

  • AWSアカウント登録
  • Cloud9環境立ち上げ
  • MySQLインストール

この記事の目次

  • MySQLセットアップ
    • 初期設定
    • データベース作成
  • サービス起動
    • 最新化
    • サービス起動
  • スナップショット作成
    • 作成手順
    • 復元手順

(スナップショットを作成するのは
この後のWordPressのセットアップが上手くいかないから……)

MySQLセットアップ

初期設定

セットアップ前にログからrootのパスワードを確認する。

$ sudo cat /var/log/mysqld.log | grep "A temporary password"
2021-01-16T09:30:18.257989Z 1 [Note] A temporary password is generated for root@localhost: XXXXXXXXX 

ログイン後、パスワードの変更が要求される。
デフォルトのパスワードポリシー:数字/大文字/小文字/特殊文字を各1つ以上使用、長さは8文字以上
https://dev.mysql.com/doc/refman/5.7/en/validate-password-options-variables.html

$ mysql_secure_installation

# ログで確認したパスワード
Enter password for user root: 

The existing password for the user account root has expired. Please set a new password.

# パスワードの変更を要求される
New password: (新しいパスワード)

# rootのパスワードを変更するか?
Change the password for root ? ((Press y|Y for Yes, any other key for No) : N

# 匿名ユーザを削除するか?
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y

# rootでのリモートログインを禁止するか?
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y

# テストデータベースを削除するか?
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y

# 今すぐ権限テーブルを読み込むか?
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

All done! 

文字コードをUTF-8に、
パスワードの有効期限は無期限に変更しておく。2行追加。

$ sudo vi /etc/my.cnf

[mysqld]
(省略)
character-set-server = utf8
default_password_lifetime = 0

# サービス再起動しておく
$ sudo service mysqld restart

データベース作成

rootでMySQLにログイン、WordPress用のデータベース&ユーザを作成する。

$ mysql -u root -p
Enter password: 

# WordPress用のデータベース作成
mysql> CREATE DATABASE データベース名;
Query OK, 1 row affected (0.01 sec)

# ユーザ作成
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ユーザ名'@'localhost' IDENTIFIED BY '作成ユーザのパスワード';

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> exit

サービス起動

最新化

MySQLよりに先に確認すべきだったかも。ただ、結果的には最新化不要。

# OS 結果:アップデート不要
$ sudo yum -y update
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
261 packages excluded due to repository priority protections
No packages marked for update

# Apache 結果:アップデート不要
$ sudo yum install -y httpd24
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                                                       | 3.7 kB  00:00:00     
261 packages excluded due to repository priority protections
No package httpd24 available.
Error: Nothing to do

# PHP 結果:アップデート不要
$ sudo yum install -y php56
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
261 packages excluded due to repository priority protections
No package php56 available.
Error: Nothing to do

サービス起動

Apache、MySQLのサービスを起動する。

# Apache起動 (起動済だったかも)
$ sudo service httpd start 
$ sudo service httpd status
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/httpd.service.d
           └─php-fpm.conf
   Active: active (running)

# MySQL起動 (起動済だったかも)
$ sudo service mysqld start
$ sudo service mysqld status
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) 

スナップショット作成

作成手順

ここまでで一旦、EC2のスナップショットを作成しておく。

EC2 > Elastic Block Store からスナップショットを作成する。
Select resource type は Volume にする。
※ 1インスタンス、1ボリューム状態なのでどちらでも変わりなし

復元手順

復元手順は次の通り。(未実施)
1. スナップショットからボリュームを作成
2. インスタンスを停止
3. インスタンスから復元したいボリュームをデタッチ
4. アタッチするインスタンスのルートデバイスを確認
5. 1で作成したボリュームをインスタンスにアタッチ
6. インスタンス起動

次、WordPressインストールなど。
Cloud9でWordPress環境を構築 3

前の記事へのリンク
Cloud9でWordPress環境を構築 1

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

[MySQL] 型を変更する方法

MySQLにログインする

以下で詳しく説明しています。
https://qiita.com/momo1010/items/d72d2d567c0768ce2d0d

データベースを選択する

USE データベース名;

型を変更する

ALTER TABLE テーブル名 MODIFY カラム名 新しい型

NOT NULL の場合は以下です。

ALTER TABLE テーブル名 MODIFY カラム名 新しい型 NOT NULL;

変更できたか確認する

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

Cloud9でWordPress環境を構築 1

WordPressの学習&AWSに触れるのを目的として
AWS Cloud9でWordPress環境を構築するまでの備忘録。

はじめにやっておいたこと

  • AWSアカウント登録
  • 学習用IAMユーザー作成
  • 学習用ユーザへのアタッチポリシー:とりあえず次の4つ
    • AmazonEC2FullAccess
    • AdministratorAccess
    • IAMUserChangePassword
    • AWSCloud9User

この記事の目次

  • インスタンス作成
    • EC2インスタンス作成
    • ディスク拡張
  • MySQLインストール
    • MariaDBアンインストール
    • MySQLインストール

インスタンス作成

  • EC2インスタンス作成
  • ディスク拡張

EC2インスタンス作成

Cloud9のCreate environmentからCloud9環境&EC2を作成する。
こだわりはないので、Amazon Linux2にしておく。他はデフォルト。

ディスク拡張

容量に余裕がない(使用率85%)ので拡張する。30GBまでなら無料らしい。
EC2 > Elastic Block Store で 作成済のボリュームを変更する (10GB→20GB)
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html
L 例: EBS ボリュームのファイルシステムの拡張

ボリュームを変更後、Cloud9のIDEのターミナルからコマンド実行。
パーティションを拡張する。

$ sudo growpart /dev/xvda 1
$ sudo xfs_growfs -d /

※作成したリージョンが違う、ルートアカウントで作成したなどで
 立ち上げたEC2が見れずに何回か手間取った……。

MySQLインストール

  • MariaDBアンインストール
  • MySQLインストール

MariaDBアンインストール

デフォルトでMariaDBがインストールされているが、どうにも動かない。

$ mysql --version
mysql  Ver 15.1 Distrib 10.2.10-MariaDB, for Linux (x86_64) using  EditLine wrapper

$ sudo service mysqld start
Redirecting to /bin/systemctl start mysqld.service
Failed to start mysqld.service: Unit not found. 

諦めてアンインストールしてMySQLをインストールする。
※ディスク拡張作業をしたのは主にこれのため

#MariaDBがインストールされているか確認
$ sudo yum list installed | grep mariadb
mariadb.x86_64                        3:10.2.10-2.amzn2.0.3          @amzn2extra-lamp-mariadb10.2-php7.2
mariadb-common.x86_64                 3:10.2.10-2.amzn2.0.3          @amzn2extra-lamp-mariadb10.2-php7.2
mariadb-config.x86_64                 3:10.2.10-2.amzn2.0.3          @amzn2extra-lamp-mariadb10.2-php7.2
mariadb-libs.x86_64                   3:10.2.10-2.amzn2.0.3          @amzn2extra-lamp-mariadb10.2-php7.2

#MariaDBのアンインストール (libsはcommonに依存で削除)
$ sudo yum remove mariadb -y
$ sudo yum remove mariadb-common -y
$ sudo yum remove mariadb-config -y

MySQL5.7 インストール

触ったことがある5.7をインストールする。

#mysql8.0のリポジトリを追加(5.7も含む)
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y

#mysql8.0のリポジトリを無効化
$ sudo yum-config-manager --disable mysql80-community

#mysql5.7のリポジトリを有効化
$ sudo yum-config-manager --enable mysql57-community

#mysqlインストール
$ sudo yum install mysql-community-server -y

#mysqlバージョン確認
$ mysql --version
mysql  Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using  EditLine wrapper

#mysql起動
$ sudo service mysqld start
Redirecting to /bin/systemctl start mysqld.service
$ sudo service mysqld status
Redirecting to /bin/systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2021-01-16 09:30:20 UTC; 3s ago

次、MySQLのデータベース作成など。
Cloud9でWordPress環境を構築 2

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

MySQLでデータベースを削除する

自分の忘備録としてMySQLで使わなくなったデータベースの削除方法を残します

消去の流れ

1.MySQLにログイン

MySQLを使用するには、ターミナルからログインします。
ホームディレクトリから接続します。

『-u root』はオプションで、「ユーザーは『ルート』でログインする」という意味です。

ここでいうルートとは、MySQLであらかじめ用意されているユーザーのことです。

% cd

# MySQLに接続
% mysql -u root

MySQLに接続すると以下のような表示になリます。

% mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 428
Server version: 5.6.47 Homebrew

Copyright (c) 2000, 2020, 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>

SQLはmysql>の続きから入力して実行ができます。

2.SHOW文で消したいデータベースを確認

mysql> SHOW DATABASES ;

3.DROP文でデータベースを削除

mysql> DROP DATABASE 《データベース名》;
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

テーブルが存在するのに、Table doesn't existと言われた話

はじめに

先日、PCの電源を閉じた後、再度dockerを起動し、docker-compose run wen rails sと入力すると、以下のようなエラーが出てしまいました。

Mysql2::Error: Table 'share_read_development.books' doesn't exist

現在でも、主原因は解明できておりません。
本記事では、僕が解決に向けて試したことを記載していきます。

エラーが起きた主原因は不明でしたが、エラーの解決は済んでおり開発自体は進んでおります。
もし同じようなエラーに苦しんでいる方は、参考にしてみてください。

また原因がわかる方がいらっしゃいましたら、コメントで教えていただけると幸いです。

開発環境

Ruby 2.72
Rails 6.0.2.3
MySQL 5.7
Docker/docker-compose

発生したエラー

冒頭でも簡単に記載しましたが、以下のようなエラーが出ました。
booksテーブルがないと言われています。

rails aborted!
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'share_read_development.books' doesn't exist
/usr/local/bundle/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query'
/usr/local/bundle/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query'
/usr/local/bundle/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt'
/usr/local/bundle/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:201:in `block (2 levels) in execute'
/usr/local/bundle/gems/activesupport-6.0.3.4/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/usr/local/bundle/gems/activesupport-6.0.3.4/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'

# 中略

Caused by:
Mysql2::Error: Table 'share_read_development.books' doesn't exist
/usr/local/bundle/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query'
/usr/local/bundle/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query'
/usr/local/bundle/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt'
/usr/local/bundle/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query'

# 中略

/usr/local/bundle/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:291:in `load_dependency'
/usr/local/bundle/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:324:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:schema:dump
(See full trace by running task with --trace)

試したこと

マイグレーションの実行状況の確認
まず、マイグレーションの実行状況を確認しました。

$ docker-compose run web rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20201207135139  Create users
   up     20201213135207  Create reviews
   up     20201218052640  Create books
   up     20201218075413  Add bookgenreid to books
   up     20201220063200  Add book to reviews
   up     20201222080803  Create relationships
   up     20201222131717  Create favorites
   up     20201222233733  Create comments
   up     20201224140712  Create bookcases
   up     20201225105949  Create notifications
   up     20201226102230  Add status to review
   up     20201230042031  Add caption to books

全てのマイグレーションファイルが実行されていることがわかりました。

データベースの確認
次にmysqlに接続し、デーベースのテーブルを確認しました。

$ docker-compose run web rails db
> show tables;

そうすると、以下のように表示されました。
booksテーブルは存在している?

+----------------------------------+
| Tables_in_share_read_development |
+----------------------------------+
| ar_internal_metadata             |
| bookcases                        |
| books                            |
| comments                         |
| favorites                        |
| notifications                    |
| relationships                    |
| reviews                          |
| schema_migrations                |
| users                            |
+----------------------------------+

しかし、以下のコマンドでは、booksテーブルがないと言われてしまいます。

> select * from books;

他のテーブルのデータは取得できます。

> select * from bookcases;
+----+------+---------------+---------+----------------------------+----------------------------+
| id | read | book_id       | user_id | created_at                 | updated_at                 |
+----+------+---------------+---------+----------------------------+----------------------------+
|  1 |    0 | 9784296108008 |       1 | 2020-12-28 01:18:40.540283 | 2020-12-28 01:18:40.540283 |
|  3 |    0 | 9784478820094 |       3 | 2020-12-28 12:39:00.697316 | 2020-12-28 12:39:00.697316 |
| 37 |    0 | 9784478820094 |       1 | 2020-12-29 08:16:25.944979 | 2020-12-29 08:16:25.944979 |
| 39 |    0 | 9784804614151 |       1 | 2020-12-29 08:26:56.615557 | 2020-12-29 08:26:56.615557 |
| 41 |    0 | 9784907095536 |       1 | 2020-12-29 08:27:01.301378 | 2020-12-29 08:27:01.301378 |
| 42 |    0 | 9784908925658 |       1 | 2020-12-29 08:39:11.191829 | 2020-12-29 08:39:11.191829 |
| 45 |    0 | 9784284204705 |       1 | 2020-12-30 04:10:08.090943 | 2020-12-30 04:10:08.090943 |
+----+------+---------------+---------+----------------------------+----------------------------+

公式ドキュメントを調べても、自身で試したことしか記載していませんでした。

エラー Table 'xxx' doesn't exist または Can't find file: 'xxx' (errno: 2) が発生する場合、xxx という名前のカレントデータベースにテーブルがないことを示しています。
SHOW TABLES を使用して、カレントデータベースにあるテーブルを確認できます。

【URL】
http://download.nust.na/pub6/mysql/doc/refman/4.1/ja/cannot-find-table.html

データベースの作り直し
あまり気が進みませんでしたが、データベースを作り直すことにしました。

$ docker-compose run web rails db:reset
$ docker-compose run web rails db:create
$ docker-compose run web rails db:migrate

これでエラーが解消することができました!
個人開発なので、データベースを削除するという方法で済みましたが、実際の現場ではこの方法は推奨されないと思います。
もし、今回のエラーの原因等がわかる方がいらっしゃいましたらコメントにて教えていただけると幸いです。

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

SQL基礎

SQL基礎の基礎 SELECT文から

(1)SELECT文

select カラム from テーブル;

大体これでOK

複数のカラムからデータを取得する場合は下のようにカンマで区切って追加する

select カラム,カラム2 from kakeibo;

(2)SELECT文WHEREを使う

select * from kakeibo where categoly = '食費'; 

データ型はクオーテーションマーク必要
カラム名categoryから食費の入ったレコードを取得する

where price = 1000;
数値の場合は、''クォーテーションマークをつけない
where purchased_at = '2010-10-09'
日付の場合もクォーテーションマークは必要

(3)比較演算子

大なり小なりの後にイコール=を入れる
>= 大なりイコール
<= 小なりイコール

where price >= 1000; `  例:1000以上 1000より大きい

上記は完全一致しか拾えません

(4)LIKE演算子

あいまい検索(ワイルドカード)
含むレコードを抽出できます

select * from purchases where name like '%プリン%';

前方一致
select * from purchases where name like 'プリン%'

後方一致
select * from purchases where name like '%プリン';

(5)not使い方 条件を満たさないデータ取得

where not name >= 1000;
where not name like '%プリン';

IS NULL
IS not NULL

(6)and演算子/or演算子

and演算子
where name = 'プリン' and price = 1000;

or演算子
where name is null or price is null;

where character_name = 'ねこ' or character_name = 'いぬ';

(7)データの並び替え

order by カラム名 並べ方;
asc 昇順に並び替える
desc 降順に並び替える

select *
from perchsed
where price = 1000
order by price desc;

(8)件数を限定する

何件を指定して取得する
My SQLやPostgreSQLでは使えますが、Oracleでは使えないんですね

limit データ件数;
limit 5;
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Raspberry Pi 3のDockerにカンバンを入れる

はじめに

本当は、業務でカンバンを使いたい。
ただ、出向している身だし、何かやろうとすること自体がNGっぽいので、いつか使う時のために自分でまず試してみようと思います。

最初はwekanを利用しようと考えて試してみたのですが、Raspberry Pi 3にmongoがpullできず、代わりにbitnami/mongodbをpullしてみましたが、wekanがうまく立ち上がりませんでした。

  • mongoがpullできない
$ docker pull mongo
Using default tag: latest
latest: Pulling from library/mongo
no matching manifest for linux/arm/v7 in the manifest list entries
  • STATUSがRestartのまま
$ docker ps -a
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS                          PORTS                    NAMES
e72db467f990   mquandalle/wekan         "node /build/main.js"    27 seconds ago   Restarting (1) 1 second ago                              wekan
e9671f4502be   bitnami/mongodb:latest   "/opt/bitnami/script…"   19 minutes ago   Restarting (1) 21 seconds ago                            wekandb
  • うまくいかなかったdocker-compose.yml
docker-compose.yml
version: '2'
services:
  wekan:
    container_name: wekan
    image: mquandalle/wekan
    restart: always
    ports:
      - 8080:8080
    environment:
      - MONGO_URL=mongodb://wekandb/wekan
      - ROOT_URL=http://111.111.111.111:8080
    links: 
      - wekandb

  wekandb:
    container_name: wekandb
    image: bitnami/mongodb:latest
    volumes:
      - /home/johndoe/wekan/data:/data/db
    restart: always

Kanboardを入れてみる

参考にした資料は以下の通りです。
公式ドキュメントもあります。

作成したdocker-compose.ymlはこちら。
hypriot/rpi-mysqlを使用している経緯は、Raspberry Pi 3のDockerでRedmineを立ち上げましたを参照してください。

docker-compose.yml
version: '2'
services:
  kanboard:
    container_name: kanboard
    image: kanboard/kanboard:latest
    restart: always
    ports:
      - 10080:80
      - 10443:443
    volumes:
      - kanboard_data:/var/www/app/data
      - kanboard_plugins:/var/www/app/plugins
      - kanboard_ssl:/etc/nginx/ssl
    environment:
      KANBOARD_DB_MYSQL: kanboard-db
      KANBOARD_DB_PASSWORD: kanboard
  kanboard-db:
    container_name: kanboard-db
    image: hypriot/rpi-mysql:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: kanboard
      MYSQL_DATABASE: kanboard
volumes:
  kanboard_data:
    driver: local
  kanboard_plugins:
    driver: local
  kanboard_ssl:
    driver: local

問題なく、docker-composeがうまくいきました。

$ docker-compose up -d
Creating network "docker-kanboard_default" with the default driver
Creating volume "docker-kanboard_kanboard_data" with local driver
Creating volume "docker-kanboard_kanboard_plugins" with local driver
Creating volume "docker-kanboard_kanboard_ssl" with local driver
Creating kanboard    ... done
Creating kanboard-db ... done

http://hogehoge:10080/ で開きます。(hogehogeの部分にIPアドレスか、ホスト名を入れる)
デフォルトはadmin/adminで開きます。

20210116_IMG_1533.jpg

まとめ

今回はあまり躓くこともなく、すんなりといきました。
カンバンの有効的な使い方を学びます。

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

【Sequel Pro】毎回出る謎のエラー〜ちょっと奥さん知ってました?⌘Wじゃなくて⌘Qの話〜

ずっと気になっていたこと

一日の作業を終えた達成感と、心地良い疲労感がじわじわと広がってくる。
PCの電源を落とそうと、ウインドウの左上の赤い❌ボタンでアプリケーションを次々と閉じていく。
Chromeを閉じ、VScodeを閉じ、ターミナルを閉じ、SepuelProを閉じ・・・
左上の?マークから終了。いつもの流れである。

次の日にPCを起動し、さあ今日もやっちゃうぞ!と次々とアプリケーションを起動していく。
すると毎回こうなる。

fa1006c655dd53487dcf3af6adc7800b.png

Sequel Pro recently quit unexpectedly.

インストールした時からずっとだ。
出なかったことはない。
ご苦労である。

いい加減こちらも気になって調べてみたが、Mojaveのものばかりで解決方法がなかった(Catalina使用中
とある人に聞いたところ

「毎回出る?終了しても?」

終了しても出るよ!
ん?終了?なんのはなし?

「左上のSequelPronoメニューから終了だよ」

ほほう・・・(ぽち
どうせダメなんじゃないの〜?
毎回出るんだから終了したって変わらn







(なおった

⌘Wで「閉じる」
⌘Qで「終了」


このコマンドの違いを今更ちゃんと知ったっていう話でした。
ご清聴ありがとうございました。

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

SQL 重複レコードの検索

重複レコードを検索するSQL

ほとんど自分用のメモです。

SELECT *
FROM `テーブルA` AS table1
WHERE EXISTS(
              SELECT table2.`列A`
              FROM `テーブルA` AS table2
              WHERE table1.`列A` = table2.`列A`
              GROUP BY table2.`列A`
              HAVING COUNT(table2.`列A`) > 1
          )
ORDER BY table1.`列A`;

参考

重複しているレコードを検索するSQL(大量データも対応)

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