20200222のMySQLに関する記事は8件です。

GCPでNAT構築と、CloudSQL+mroonga on GCEスレイブしようとして断念

公式ドキュメントに書いてあるけどね。

NAT構築

やること

Cloud NAT使わずに自前でNATインスタンスを構築

なんで

開発環境で、可用性がそんなにいらない。落ちたら立て直せばいいし。
通信量もそんなに無いし…ってことで貧乏構成でいこうじゃあないか。
というわけでf1-micro/centos7。

成功の手引き

https://cloud.google.com/vpc/docs/special-configurations#natgateway

一応

VPCやサブネットの作成は割愛。ドキュメントにも載ってるし、かなり前に自分でも書いた。
ドキュメントはCUIで進めてるけど自分はコンソールでやりました。
インスタンス名はここではyasui-natとでもしましょう。

注意点は、インスタンス作成時にオプションのネットワークタブにあるIP転送チェックボックス、これ忘れたら後からいじれないんじゃないかって気がするくらいです。ネットワークタグはpubとでもしましょう。

ドキュメントにはno-ipってタグがすごい胸張った感じで出てくるので「このタグそのものに何か意味があるのか?」と最初怯みましたが、別に何だって動きます。ここでは適当にprivとかにしましょうか。
多分↑のドキュメント、VPCがデフォルトルールなのが前提なのか、GCP内部NWからNATへの通信を許可するためのルール設定が割愛されてます。pubprivからのパケットは基本全部許可するようなファイアウォール設定を忘れずにしときましょう。勿論、利用ポートが完全に絞れているなら全部じゃなくても問題なし。

あとは書いてある通り

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 確認
iptables -v -L -t nat

で転送設定を書き、ネットワーキングのルート設定から、送信IPを0.0.0.0/0、タグはprivでネクストホップはyasui-natを指定します。

これでまあいけるかと思います。
設定の保存に関しては、

yum -y install iptables-services
/usr/libexec/iptables/iptables.init save

でいけるって見ましたが、自分の場合この設定入れたあとインスタンス止めてイメージ化、イメージから起こしなおしたらiptableの設定は無くなってました。かなしみ。

CloudSQL+mroonga on GCE

結論、ムリです

・CloudSQLにはプラグイン突っ込めない
・ならばGCEでスレーブ作ってスレーブ側でmroonga入れれば良いのでは?

・mroongaはトランザクションが効かないエンジンである
・GTID_MODEはトランザクション効かないエンジンに機能しないし、マスターとスレーブで異エンジン・同一テーブルの場合ONにしたらアカン
・CloudSQLはGTID_MODEを触れない上にデフォルトONである(ちなみにAWS RDSはパラメータグループでOFFに出来る)
・ゴフッ

検索に使うタネとelasticsearchとかに突っ込んでキーだけ取得、キーでDBからデータ本体持ってくる仕組みに作り変えるか、それともmysql on GCEにするか…で悩んだけど後者にすることにしたよもう。
DBだけはAWS使うっていうウルトラCも一瞬頭によぎったけど転送量高そうだし…

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

備忘録 CentOS7 mySQL構築

リポジトリの確認

yum repolist all | grep mysql

MySQLインストール

yum install mysql-community-server

起動、起動確認

systemctl start mysqld.service
systemctl status mysqld.service

永続化、永続化確認

systemctl enable mysqld.service
systemctl is-enabled mysqld.service

インストール時にrootのパスワードがlogに吐かれているので

grep
grep password /var/log/mysqld.log

---------------------------------------------------------
出力されるログ:
---------------------------------------------------------
2019-07-11T05:15:43.436113Z 5 [Note] [MY-010454] [Server]
 A temporary password is generated for
 root@localhost: G2Y%RSazYr1t
---------------------------------------------------------
パスワード = G2Y%RSazYr1t
---------------------------------------------------------

各種設定

(パスワードの更新等)
mysql_secure_installation

★ポリシー違反しないパスワードの例
passwordPASSWORD@999

ログイン

mysql -u root -p

##パスワードの仕様詳細表示
SHOW VARIABLES LIKE 'validate_password%';
##パスワードを弱くする
SET GLOBAL validate_password.policy=LOW;
SET GLOBAL validate_password.length=4;

ユーザ権限確認

use mysql
select user,host from mysql.user;

権限を変更

rename user root@localhost to root@'%';

quit
************************************************************
bye

CentOS7 ファイアウォール設定

firewall-cmd --add-service=ssh --zone=public --permanent
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-service=https --zone=public --permanent

ポート開放

firewall-cmd --add-port=3306/tcp --zone=public --permanent

許可するサービスの追加と削除

firewall-cmd --add-service=mysql --zone=public --permanent
//firewall-cmd --remove-service=mysql --zone=public --permanent

firewalldのリロード

firewall-cmd --reload

許可されているサービスやポートの一覧を表示

firewall-cmd --list-all --zone=public
firewall-cmd --list-services --zone=public
firewall-cmd --list-ports --zone=public

ip addr

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

【Tips】Ubuntuへのmysql2 gemインストール時に発生しうるエラーへの対処

問題

Ruby on Rails 等で利用する Ruby の MySQL 用ライブラリmysql2インストールが失敗する。

入力

gem install mysql2

出力

Building native extensions. This could take a while...
ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.

    current directory: /home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/mysql2-0.5.3/ext/mysql2
/home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.7.0/bin/ruby -I /home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.7.0/lib/ruby/2.7.0 -r ./siteconf20200222-2823-u3a2hd.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_wait_for_single_fd()... yes
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.7.0/bin/$(RUBY_BASE_NAME)
        --with-mysql-dir
        --without-mysql-dir
        --with-mysql-include
        --without-mysql-include=${mysql-dir}/include
        --with-mysql-lib
        --without-mysql-lib=${mysql-dir}/lib
        --with-mysql-config
        --without-mysql-config
        --with-mysqlclient-dir
        --without-mysqlclient-dir
        --with-mysqlclient-include
        --without-mysqlclient-include=${mysqlclient-dir}/include
        --with-mysqlclient-lib
        --without-mysqlclient-lib=${mysqlclient-dir}/lib
        --with-mysqlclientlib
        --without-mysqlclientlib
/home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.7.0/lib/ruby/2.7.0/mkmf.rb:1050:in `block in find_library': undefined method `split' for nil:NilClass (NoMethodError)
        from /home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.7.0/lib/ruby/2.7.0/mkmf.rb:1050:in `collect'
        from /home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.7.0/lib/ruby/2.7.0/mkmf.rb:1050:in `find_library'
        from extconf.rb:87:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/extensions/x86_64-linux/2.7.0/mysql2-0.5.3/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/mysql2-0.5.3 for inspection.
Results logged to /home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/extensions/x86_64-linux/2.7.0/mysql2-0.5.3/gem_make.out

環境

  • Windows Subsystem for Linux (WSL)
    • Ubuntu 18.04 LTS
  • anyenv 1.1.1
    • rbenv 1.1.2-20-g143b2c9
      • ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux]

原因:MySQLの開発用ライブラリ不足

「Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers.」とあるように、native extensionとして必要なMySQLに関連するライブラリがインストールされていない。

解決方法

入力

sudo apt install libmysqld-dev
gem install mysql2

出力

Building native extensions. This could take a while...
Successfully installed mysql2-0.5.3
Parsing documentation for mysql2-0.5.3
Installing ri documentation for mysql2-0.5.3
Done installing documentation for mysql2 after 0 seconds
1 gem installed

参考文献

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

[AWS] EC2にMysqlを入れた後の設定

Mysqlを最初に入れた時はrootのパスワードは決まっているようで
$ sudo cat /var/log/mysqld.log | grep 'temporary password'
で確認できます

ターミナル
[ec2-user@ip-10-0-1-255 ~]$ sudo cat /var/log/mysqld.log | grep 'temporary password'
2020-02-22T07:34:12.667336Z 1 [Note] A temporary password is generated for root@localhost: F+aB(=GYo2jh

初期のパスワードは F+aB(=GYo2jh らしいです

rootユーザーのパスワードの変更

ターミナル
# とりあえずのパスワードを設定、あとで変更します
mysql> set password for root@localhost=password('passwordPASSWORD@666');
Query OK, 0 rows affected, 1 warning (0.00 sec)

# パスワードの設定情報を確認
mysql>  SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.01 sec)

#文字数制限変更
mysql> SET GLOBAL validate_password_length=4;
Query OK, 0 rows affected (0.00 sec)

#パスワードを簡単なものに設定できるように変更
mysql>  SET GLOBAL validate_password_policy=LOW;
Query OK, 0 rows affected (0.00 sec)

# パスワードの設定情報を確認
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 4     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

# 新しくパスワードを再設定
mysql> set password for root@localhost=password('666666');
Query OK, 0 rows affected, 1 warning (0.00 sec)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ユーザーに紐づく投稿と投稿に紐づくコメント数・イイネ数の取得【SQL】

WITH句を使って一本のSQLで実装する。

ユーザーの詳細画面遷移時にそのユーザーの投稿とその投稿に紐づくコメント数とイイね数を取得するAPIを作るためにSQL書きました、何本もSQL走らせるのよく無いよね・・と思い、調べたら WITH句という素晴らしいものがあったので使ってみました。

※ WITH句はMySQL 8系からのサポートです。

テーブル

投稿テーブル
POST
L ID
L TITLE
L TEXT

コメントテーブル
COMMENT
L ID
L POST_ID
L TEXT

イイねテーブル
REACTION
L ID
L POST_ID

WITH GET_COUNT AS ( -- GET_COUNT テーブルを作成
    SELECT 
    post_table.id as post_id,
    COUNT( comment_table.id ) AS comment_count
    COUNT( reaction_table.id ) AS reaction_count
    FROM post -- 投稿テーブルをベースとします。
    LEFT OUTER JOIN comment_table ON comment_table.post_id = post.id -- コメントテーブルを投稿IDで束ねる
    LEFT OUTER JOIN reaction_table ON reaction_table.post_id = post.id -- イイねテーブルを投稿IDで束ねる
    WHERE post_table.user_id = 150 -- ユーザーIDを指定する
    GROUP BY -- 投稿IDで束ねる
    post.id
) SELECT 
    post_table.id,
    post_table.tittle, 
    post_table.text, 
    GET_COUNT.comment_count,
    GET_COUNT.reaction_count
    FROM post_table
    INNER JOIN GET_COUNT ON post_table.id = GET_COUNT.post_id -- 投稿テーブルと GET_COUNT テーブルを紐付ける
    LIMIT 10 -- 10件取得
    OFFSET 0 -- 0〜10件目を取得;

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

Ubuntu 18.04にNginx、PHP 7.4、MySQL 5.7をインストールする

目的

ローカル環境で開発していたLaravelのプロジェクトをVPSに乗せるための準備です。

OSバージョン

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"

Nginxのインストール

$ sudo apt update
$ sudo apt install nginx

インストールが完了して、ブラウザ上からホスト名でアクセスすると以下のページが表示されると思います。

nginx画面.png

セキュリティ設定

ufwによるファイアウォール設定

Ubuntu 18.04ではファイアウォールパッケージとしてufw(Uncomplicated Firewall)がインストールされています。

SSH(22)とHTTP(80)、HTTPS(443)のNginxへの接続を許可します。

$ sudo ufw allow 'Nginx HTTP'
$ sudo ufw allow 'Nginx HTTPS'
$ sudo ufw enable

ufwコマンドに関しては下記の記事が大変参考になりました。
ufwコマンドの使い方 https://qiita.com/hana_shin/items/a630871dce209cff04f3

fail2banでアクセス制限設定

ufwと一緒にサーバへの攻撃をモニターして、保護してくれるfail2banも導入します。
こちらはインストールして、サービスを起動するだけでOKです。

$ sudo apt install fail2ban
$ sudo service fail2ban start

Nginxの設定

nginx.conf

Nginxの設定ファイルであるnginx.confを修正します。

$ sudo vim /etc/nginx/nginx.conf
  • userをwww-dataからsshのログインユーザに変更します
  • server_tokenのコメントアウトを外します
  • 必要があればclient_max_body_sizeを追加します
    これはnginxがPOSTの最大サイズを設定するための項目です(デフォルトは1MB)

fastcgi_params

NginxでPHPを動かすためにはfastcgi_paramsも修正します。
fastcgi_paramsを開いて、末尾に下記を追加します。

$ sudo vim /etc/nginx/fastcgi_params
↓追加します
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
↑追加します

追加したら構文チェックのために下記を実行します
問題なければNginxを再起動します

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo service nginx restart

PHP 7.4 のインストール

Ubuntu18.04でPHP 7.4をインストールするにはondrej/phpレポジトリを追加する必要があります

$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:ondrej/php

追加できたら一度リポジトリ一覧を更新し、モジュールと一緒にPHP 7.4をインストールします

$ sudo apt update
$ sudo apt install php7.4-fpm php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip unzip -y

php 7.4およびモジュールが正しくインストールされているか下記コマンドで確認します

$ php -v
$ php-fpm7.4 -v
$ php -m

www.confを開いて、userとgroupを`www-data`からsshのログインユーザに変更します

$ sudo vim /etc/php/7.4/fpm/pool.d/www.conf
user = username 
group = username 
listen.owner = username 
listen.group = username

変更できたらphp-fpmの構文チェック、再起動を行います

$ sudo php-fpm7.4 -t
$ sudo service php7.4-fpm restart

NginxでPHPを実行する

sites-available/default

sites-available/defaultを開いて、下記のように修正します。

indexにindex.phpを追加します

index index.php index.html index.htm index.nginx-debian.html;

location ~ .php$ {の記述があれば閉じ括弧も含めてコメントアウトを外します
なければ追加してください

location ~ \.php$ {
}

括弧内に# fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;のような記述があれば以下のように書き換えてコメントアウトを外します

fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;

最後に括弧内にinclude fastcgi_params;を追加します

設定例

index index.php index.html index.htm index.nginx-debian.html;

...略...

location ~ \.php$ {
       include snippets/fastcgi-php.conf;

       # With php-fpm (or other unix sockets):
       fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
       # With php-cgi (or other tcp sockets):
#      fastcgi_pass 127.0.0.1:9000;
       include fastcgi_params;
}

/var/www/htmlにindex.phpを作成します。

<?php
phpinfo();

ここまでできたらnginxを再起動させてブラウザ上からホスト名でアクセスします。

$ sudo nginx -t
$ sudo service nginx restart

phpinfo.png

親の顔より見た(?)画面が表示されましたね!

MySQL 5.7 のインストール

aptコマンドでインストールします。

$ sudo apt install mysql-server

次のコマンドでMySQLのセキュリティ設定を行います。

$ sudo mysql_secure_installation

設定方法は下記URLが参考になります。
https://weblabo.oscasierra.net/mysql-57-init-setup/

rootパスワードが設定できたらDBとユーザを作成します。
※'DATABASE_NAME'、'YOUR_NAME'、'YOUR_PASSWORD'には任意の値を適宜書き換えてください

$ mysql -u root -p
mysql> CREATE DATABASE 'DATABASE_NAME';
mysql> CREATE USER 'YOUR_NAME'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD';
mysql> GRANT ALL PRIVILEGES ON DATABASE_NAME.* TO 'your_name'@'localhost';

作成できたら 設定したユーザとパスワードでMySQLサーバにアクセスできるか確認しましょう。

mysql> exit;
$ mysql -u 'YOUR_NAME' -p

最後に、index.phpを以下のように変更し、PHPでMySQL接続確認を行います。

<?php
    define('DB_HOST', 'localhost');
    define('DB_USER', 'YOUR_NAME');
    define('DB_PASSWORD', 'YOUR_PASSWORD');
    define('DB_NAME', 'DATABASE_NAME');

    // エラー表示設定:通知系以外全て表示    
    error_reporting(E_ALL & ~E_NOTICE);

    try {
        $dbh = new PDO('mysql:'.DB_NAME.';'.DB_HOST, DB_USER, DB_PASSWORD);
        print('接続しました。');
    }
    catch(PDOException $e){
        print('ERROR:'.$e->getMessage());
        exit;
    }

以下の画面が表示されたら、ミドルウェアのセットアップ完了です。お疲れ様でした:clap:

接続確認.png

参考ページ:
https://www.cloudbooklet.com/install-php-7-4-on-ubuntu/
https://stackoverflow.com/questions/25591040/nginx-serves-php-files-as-downloads-instead-of-executing-them
https://teratail.com/questions/137445

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

DockerでサクッとWordpress環境を作る

ローカル環境を汚さず好きなだけ WordPress の環境を用意する方法をまとめました。
はじめて WordPress を使う人でもわかりやすいように記述しました。


準備

Dockerは以下を参考にインストールしておいてください。

Windowsのインストール手順
http://docs.docker.jp/docker-for-windows/step_one.html

Windows10 Professonal 64bit用ダウンロードページ
https://hub.docker.com/editions/community/docker-ce-desktop-windows/

上記以外のWindows用ダウンロードページ
https://github.com/docker/toolbox/releases

Macのインストール手順
http://docs.docker.jp/docker-for-mac/step_one.html

この記事を書いた際の環境は下記のとおりです。

  • MacOS Catalina 10.15.3
  • Docker 19.03.5
  • docker-compose 1.25.4

作業用ディレクトリを作る

※作成場所はどこでも構いません。フォルダ内で環境が管理できるので、複数環境を作りたい場合は複数フォルダを作ればOKです。

mkdir wordpress1

DBサーバとAPサーバの定義を用意する

テキストエディタで以下の内容のファイルを作り、作成したフォルダ内に docker-compose.yml という名前で保存します。(文字コードはUTF-8 BOMなし)

version: "3.7" # docker-composeの書式のバージョン
services: # 以下にサーバ情報を記載
  db: # データベースサーバ(MySql)名(任意の名前を指定可)
    image: mysql:5.6 # 使用するデータベースのイメージ名とバージョン(https://hub.docker.com/_/mysql)
    restart: always # PC再起動時などDocker自体が起動したときにこのサーバも自動で起動するよう設定
    environment: # 環境変数
      MYSQL_ROOT_PASSWORD: root # rootユーザのパスワード(任意に指定可)
      MYSQL_DATABASE: wordpress_db # WordPress用データベース名(任意に指定可)
      MYSQL_USER: wordpress_user # WordPress用接続ユーザ名(任意に指定可)
      MYSQL_PASSWORD: wordpress_pass # WordPress用パスワード(任意に指定可)
  ap: # アプリケーションサーバ(PHP,WordPress)名(任意の名前を指定可)
    image: wordpress:latest # 使用するWordPressのイメージ名とバージョン(latestは最新を表す https://hub.docker.com/_/wordpress)
    restart: always # PC再起動時などDocker自体が起動したときにこのサーバも自動で起動するよう設定
    depends_on: # 先に起動させるサーバを指定
     - db
    ports:
     - "10080:80" # アプリケーションサーバの80番ポートをローカルの10080番ポートにつなげる(http://localhost:10080 でアクセスできるようになる)
    environment:
      WORDPRESS_DB_HOST: db:3306 # データベースサーバ名:ポート番号
      WORDPRESS_DB_USER: wordpress_user # WordPress用接続ユーザ名(dbの内容に合わせる)
      WORDPRESS_DB_PASSWORD: wordpress_pass # WordPress用パスワード(dbの内容に合わせる)
      WORDPRESS_DB_NAME: wordpress_db # WordPress用データベース名(dbの内容に合わせる)

これで、db、apの2つのサーバが作成されます。
※複数環境を用意するときは ports: の 10080 がかぶらないように 10081,10082という感じで設定します。それ以外は同じで問題ありません。


サーバの起動

wordpress1 ディレクトリ内で下記コマンドを実行します。

docker-compose up -d

実行完了までしばらく待ちます。


起動確認

下記コマンドで各サーバの状態を確認できます。

docker-compose ps

下記のように表示されます。State が Up となっていれば起動しています。

     Name                   Command               State           Ports        
-------------------------------------------------------------------------------
wordpress_ap_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:10080->80/tcp
wordpress_db_1   docker-entrypoint.sh mysqld      Up      3306/tcp             

Wordpress 初期設定

ブラウザで http://localhost:10080 にアクセスします。

image.png

言語選択画面が表示されるので、日本語を選び「続ける」ボタンを押します。


必要情報入力

サイトのタイトル、ユーザ名、パスワード、メールアドレスを入力し「WordPressをインストール」ボタンを押します。

image.png


ログイン

「ログイン」ボタンを押します。

image.png

設定したユーザ名、パスワードを入力し、「ログイン」ボタンを押します。

image.png

管理画面に入れました。これでインストール完了です。
image.png


DBサーバに入り、テーブル情報を見てみる

wordpress1 ディレクトリ内で以下のコマンドを実行します。

docker-compose exec db mysql -uwordpress_user -p wordpress_db
Enter password: 

パスワードを聞かれるので wordpress_pass を入力します。

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 34
Server version: 5.6.47 MySQL Community Server (GPL)

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> 

mysql クライアントが起動しました。


データベース一覧

下記コマンドでデータベースの一覧を確認できます。

show databases;

docker-compose.yml で指定した wordpress_db が作成されています。

+--------------------+
| Database           |
+--------------------+
| information_schema |
| wordpress_db       |
+--------------------+
2 rows in set (0.00 sec)

テーブル一覧

下記コマンドでテーブル一覧を確認できます。

show tables;

WordPress で使用するテーブルが作成されています。

+------------------------+
| Tables_in_wordpress_db |
+------------------------+
| wp_commentmeta         |
| wp_comments            |
| wp_links               |
| wp_options             |
| wp_postmeta            |
| wp_posts               |
| wp_term_relationships  |
| wp_term_taxonomy       |
| wp_termmeta            |
| wp_terms               |
| wp_usermeta            |
| wp_users               |
+------------------------+
12 rows in set (0.00 sec)

テーブルの内容

下記コマンドでテーブルの中身を確認できます。

select * from wp_users;
+----+------------+------------------------------------+---------------+------------------+----------+---------------------+---------------------+-------------+--------------+
| ID | user_login | user_pass                          | user_nicename | user_email       | user_url | user_registered     | user_activation_key | user_status | display_name |
+----+------------+------------------------------------+---------------+------------------+----------+---------------------+---------------------+-------------+--------------+
|  1 | user       | $P$B6hIB70MCnEgXDjdLvlU12ORlbDyL4. | user          | info@example.com |          | 2020-02-21 16:16:10 |                     |           0 | user         |
+----+------------+------------------------------------+---------------+------------------+----------+---------------------+---------------------+-------------+--------------+
1 row in set (0.00 sec)

DBサーバから抜ける

exit を実行します。

exit

APサーバに入る

さきほどDBサーバに入ったように docker-compose exec サーバ名 実行コマンド で入れます。

以下のコマンドで APサーバに入ります。

docker-compose exec ap sh

入ると以下が表示されるはずです。

#

カレントディレクトリをみる

pwd コマンドで現在いるディレクトリを確認できます。

pwd
/var/www/html

ファイル一覧を見る

ls コマンドでファイル/ディレクトリ一覧を確認できます。

ls
index.php    readme.html      wp-admin            wp-comments-post.php  wp-config.php  wp-cron.php  wp-links-opml.php  wp-login.php  wp-settings.php  wp-trackback.php
license.txt  wp-activate.php  wp-blog-header.php  wp-config-sample.php  wp-content     wp-includes  wp-load.php        wp-mail.php   wp-signup.php    xmlrpc.php

ファイルの内容を見る

cat コマンドでファイルの内容を確認できます。

cat wp-config.php

データベースの接続設定等が確認できます。

<?php
/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the
 * installation. You don't have to use the web site, you can
 * copy this file to "wp-config.php" and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * MySQL settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * @link https://codex.wordpress.org/Editing_wp-config.php
 *
 * @package WordPress
 */

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress_db');

/** MySQL database username */
define( 'DB_USER', 'wordpress_user');

/** MySQL database password */
define( 'DB_PASSWORD', 'wordpress_pass');

/** MySQL hostname */
define( 'DB_HOST', 'db:3306');

/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '');

/**#@+
 * Authentication Unique Keys and Salts.
 *
 * Change these to different unique phrases!
 * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
 * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define( 'AUTH_KEY',         'cbaae291c44c536f6b94cbb071ac6c66cf068300');
define( 'SECURE_AUTH_KEY',  '759e4f7c08b219ef6276aab82a342091c6cf0618');
define( 'LOGGED_IN_KEY',    'a50c09c57d2aed6d2ecbd3560dc239e42c9e06ed');
define( 'NONCE_KEY',        '580347a26116c13cbb5883d91ec8a7d56587a82a');
define( 'AUTH_SALT',        '03e501a4860d9993968f79eb029f4646ff865bcf');
define( 'SECURE_AUTH_SALT', '28108878c043111feacf6cfb174743b9d353bde4');
define( 'LOGGED_IN_SALT',   '5ed8b34550fb494f125531bfd209ea8e66468401');
define( 'NONCE_SALT',       '41c843fd2b0183f7ee4c70215d6d5f62f29dfabd');

/**#@-*/

/**
 * WordPress Database Table prefix.
 *
 * You can have multiple installations in one database if you give each
 * a unique prefix. Only numbers, letters, and underscores please!
 */
$table_prefix = 'wp_';

/**
 * For developers: WordPress debugging mode.
 *
 * Change this to true to enable the display of notices during development.
 * It is strongly recommended that plugin and theme developers use WP_DEBUG
 * in their development environments.
 *
 * For information on other constants that can be used for debugging,
 * visit the Codex.
 *
 * @link https://codex.wordpress.org/Debugging_in_WordPress
 */
define( 'WP_DEBUG', false );

// If we're behind a proxy server and using HTTPS, we need to alert WordPress of that fact
// see also http://codex.wordpress.org/Administration_Over_SSL#Using_a_Reverse_Proxy
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        $_SERVER['HTTPS'] = 'on';
}

/* That's all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
        define( 'ABSPATH', dirname( __FILE__ ) . '/' );
}

/** Sets up WordPress vars and included files. */
require_once( ABSPATH . 'wp-settings.php' );

APサーバから抜ける

exit コマンドでシェルを終了すれば抜けます。

exit

ファイルをサーバからローカルにコピーする

サーバに入っていない状態で、 docker cp (コンテナ名):(コピー元パス) (コピー先パス) コマンドを実行します。
※コンテナ名とは docker-compose ps で表示される name になります。(docker-compose cp はない)
※パスはフルパスで指定します。

     Name                   Command               State           Ports        
-------------------------------------------------------------------------------
wordpress_ap_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:10080->80/tcp
wordpress_db_1   docker-entrypoint.sh mysqld      Up      3306/tcp             

以下のコマンドでAPサーバの wp-config.php をローカルの /tmp にコピーできます。

docker cp wordpress_ap_1:/var/www/html/wp-config.php /tmp

ファイルをローカルからサーバにコピーする

さっきと逆で docker cp (コピー元パス) (コンテナ名):(コピー先パス) とするとできます。

ローカルで設定ファイルを書き換えてサーバに反映させたいときには以下のようにします。

docker cp /tmp wordpress_ap_1:/var/www/html/wp-config.php

サーバ上のファイルをエディタで直接変更したい場合は VSCode の Remote Development プラグインを使うとできます。

image.png

プラグインをインストールして、画面左のディスプレイアイコンを選択します。

image.png

Other Containerというところに、 wordpress_ap_1, wordpress_db_1 が表示されるので、選択して右側のimage.pngをクリックします。

image.png

サーバ内のファイルを編集できるウインドウが立ち上がります。

image.png

「Open Folder」 ボタンを押して、 /var/www/html を入力し、「OK」ボタンを押します。

image.png

APサーバ内のファイルが一覧表示され、自由に編集できます。

image.png


初期状態に戻す方法

色々編集していて環境がおかしくなったときなどで、最初の状態に戻したい場合は docker-compose down でキャッシュを消して docker-compose up で再度起動すると言語選択画面からまたやり直すことができます。データベースも初期状態になるので注意してください。
※ 環境が要らなくなった場合は docker-compose down のあと wordpress1 フォルダを消せばOKです。

docker-compose down
Stopping wordpress_ap_1 ... done
Stopping wordpress_db_1 ... done
Removing wordpress_ap_1 ... done
Removing wordpress_db_1 ... done
Removing network wordpress_default

このあたりを知っておけば好きなように環境を作ったり消したりできるかと思います。


Windows環境でブラウザにエラーが表示される場合

21.PNG

Windowsで同様に環境構築しているとサーバ起動後にブラウザでうまく表示されなかったので、対応方法を追記します。

環境は

  • Windows10Home 64bit
  • DockerToolbox-19.03.1.exe をインストール
  • docker-compose version 1.24.1

- Docker version 19.03.1

です。

調べるとDockerToolboxは裏でVirtualBoxという仮想マシンを動かしている関係で
その設定が必要なようです。

VirtualBoxのポートフォワーディングの設定が必要です。設定手順は次の通りです。


VirtualBoxのポートフォワーディングの設定

15.PNG

デスクトップのOracle VM VirtualBox を起動します。

16.PNG

設定ボタンを押して、「ネットワーク」タブの「高度」を開いた中にある「ポートフォワーディング」ボタンを押します。

17.PNG

右側の追加ボタンimage.pngを押して、名前は任意(ここでは wordpress)、ホストポート10080、ゲストポート80を入力し「OK」ボタンを2回押します。

18.PNG

下記画面が表示された場合は「アクセスを許可する」ボタンを押してください。

19.PNG

※これでいけるはずなのですが、なぜかホストポートも80にしないと私の環境ではうまく動作しませんでした。ホストポート10080だとうまくいかない場合は80に設定し、docker-compose.yml のports: も 80:80 に書き換えて
docker-compose down
docker-compose up -d
とし、 http://localhost を開けばうまくいくはずです。

203.PNG

これで下記画面が表示されます。

image.png

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

【MySQL 】便利な大文字のテーブル名、カラム名の検索SQL

困った問題

テーブル名やカラムは英小文字でという暗黙のルールがある。
ところが幾つか大文字のテーブル名があるというのだ。
あるデータベース内にどれくらい大文字のテーブル、カラムがあるか調べる事になった。
最初は担当しているプロジェクト分のみで
いい事になっていた。
何と言っても、データベース内には5000を超えるテーブルと50000近いカラムがあったからだ。
参考サイトをもとに、下記のSQLを作ってみた。

DB内のテーブルとカラムの検索

1.ダサイけど応用が効きそうなSQL

use information_schema;
select table_name,column_name from columns where table_schema="データベース名"
and (concat(table_name,column_name) like binary "%A%"
or concat(table_name,column_name) like binary "%B%"
or concat(table_name,column_name) like binary "%C%"
or concat(table_name,column_name) like binary "%D%"
or concat(table_name,column_name) like binary "%E%"
or concat(table_name,column_name) like binary "%F%"
or concat(table_name,column_name) like binary "%G%"
or concat(table_name,column_name) like binary "%H%"
or concat(table_name,column_name) like binary "%I%"
or concat(table_name,column_name) like binary "%J%"
or concat(table_name,column_name) like binary "%K%"
or concat(table_name,column_name) like binary "%L%"
or concat(table_name,column_name) like binary "%M%"
or concat(table_name,column_name) like binary "%N%"
or concat(table_name,column_name) like binary "%O%"
or concat(table_name,column_name) like binary "%P%"
or concat(table_name,column_name) like binary "%Q%"
or concat(table_name,column_name) like binary "%R%"
or concat(table_name,column_name) like binary "%S%"
or concat(table_name,column_name) like binary "%T%"
or concat(table_name,column_name) like binary "%U%"
or concat(table_name,column_name) like binary "%V%"
or concat(table_name,column_name) like binary "%W%"
or concat(table_name,column_name) like binary "%X%"
or concat(table_name,column_name) like binary "%Y%"
or concat(table_name,column_name) like binary "%Z%");

2.スタイリッシュなSQL

use information_schema;
select table_name,column_name from columns where table_schema="データベース名"
and binary concat(table_name,column_name) != binary lower(concat(table_name,column_name))

実際に出力されたのは、2つのテーブルの10カラムのみで、目視では100%発見できない。
この威力は凄い。

参考URL

MySQLでテーブル一覧とカラム一覧を同時に取ってくる

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