- 投稿日:2020-02-22T23:04:55+09:00
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への通信を許可するためのルール設定が割愛されてます。pub
はpriv
からのパケットは基本全部許可するようなファイアウォール設定を忘れずにしときましょう。勿論、利用ポートが完全に絞れているなら全部じゃなくても問題なし。あとは書いてある通り
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も一瞬頭によぎったけど転送量高そうだし…
- 投稿日:2020-02-22T20:56:56+09:00
備忘録 CentOS7 mySQL構築
リポジトリの確認
yum repolist all | grep mysqlMySQLインストール
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 ************************************************************ byeCentOS7 ファイアウォール設定
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 --permanentfirewalldのリロード
firewall-cmd --reload許可されているサービスやポートの一覧を表示
firewall-cmd --list-all --zone=public firewall-cmd --list-services --zone=public firewall-cmd --list-ports --zone=publicip addr
192.168.227.130
- 投稿日:2020-02-22T19:10:49+09:00
【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参考文献
- 投稿日:2020-02-22T16:58:51+09:00
[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)
- 投稿日:2020-02-22T14:24:26+09:00
ユーザーに紐づく投稿と投稿に紐づくコメント数・イイネ数の取得【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_IDWITH 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件目を取得;
- 投稿日:2020-02-22T10:15:23+09:00
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インストールが完了して、ブラウザ上からホスト名でアクセスすると以下のページが表示されると思います。
セキュリティ設定
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/a630871dce209cff04f3fail2banでアクセス制限設定
ufw
と一緒にサーバへの攻撃をモニターして、保護してくれるfail2ban
も導入します。
こちらはインストールして、サービスを起動するだけでOKです。$ sudo apt install fail2ban $ sudo service fail2ban startNginxの設定
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 restartPHP 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 -yphp 7.4およびモジュールが正しくインストールされているか下記コマンドで確認します
$ php -v $ php-fpm7.4 -v $ php -mwww.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 restartNginxで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親の顔より見た(?)画面が表示されましたね!
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; }以下の画面が表示されたら、ミドルウェアのセットアップ完了です。お疲れ様でした
参考ページ:
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
- 投稿日:2020-02-22T02:13:45+09:00
DockerでサクッとWordpress環境を作る
ローカル環境を汚さず好きなだけ WordPress の環境を用意する方法をまとめました。
はじめて WordPress を使う人でもわかりやすいように記述しました。
準備
Dockerは以下を参考にインストールしておいてください。
Windowsのインストール手順
http://docs.docker.jp/docker-for-windows/step_one.htmlWindows10 Professonal 64bit用ダウンロードページ
https://hub.docker.com/editions/community/docker-ce-desktop-windows/上記以外のWindows用ダウンロードページ
https://github.com/docker/toolbox/releasesMacのインストール手順
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 にアクセスします。
言語選択画面が表示されるので、日本語を選び「続ける」ボタンを押します。
必要情報入力
サイトのタイトル、ユーザ名、パスワード、メールアドレスを入力し「WordPressをインストール」ボタンを押します。
ログイン
「ログイン」ボタンを押します。
設定したユーザ名、パスワードを入力し、「ログイン」ボタンを押します。
DBサーバに入り、テーブル情報を見てみる
wordpress1 ディレクトリ内で以下のコマンドを実行します。
docker-compose exec db mysql -uwordpress_user -p wordpress_dbEnter 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 コマンドでファイル/ディレクトリ一覧を確認できます。
lsindex.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 プラグインを使うとできます。
プラグインをインストールして、画面左のディスプレイアイコンを選択します。
Other Containerというところに、 wordpress_ap_1, wordpress_db_1 が表示されるので、選択して右側のをクリックします。
サーバ内のファイルを編集できるウインドウが立ち上がります。
「Open Folder」 ボタンを押して、 /var/www/html を入力し、「OK」ボタンを押します。
APサーバ内のファイルが一覧表示され、自由に編集できます。
初期状態に戻す方法
色々編集していて環境がおかしくなったときなどで、最初の状態に戻したい場合は 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環境でブラウザにエラーが表示される場合
Windowsで同様に環境構築しているとサーバ起動後にブラウザでうまく表示されなかったので、対応方法を追記します。
環境は
- Windows10Home 64bit
- DockerToolbox-19.03.1.exe をインストール
- docker-compose version 1.24.1
- Docker version 19.03.1
です。
調べるとDockerToolboxは裏でVirtualBoxという仮想マシンを動かしている関係で
その設定が必要なようです。VirtualBoxのポートフォワーディングの設定が必要です。設定手順は次の通りです。
VirtualBoxのポートフォワーディングの設定
デスクトップのOracle VM VirtualBox を起動します。
設定ボタンを押して、「ネットワーク」タブの「高度」を開いた中にある「ポートフォワーディング」ボタンを押します。
右側の追加ボタンを押して、名前は任意(ここでは wordpress)、ホストポート10080、ゲストポート80を入力し「OK」ボタンを2回押します。
下記画面が表示された場合は「アクセスを許可する」ボタンを押してください。
※これでいけるはずなのですが、なぜかホストポートも80にしないと私の環境ではうまく動作しませんでした。ホストポート10080だとうまくいかない場合は80に設定し、docker-compose.yml のports: も 80:80 に書き換えて
docker-compose down
docker-compose up -d
とし、 http://localhost を開けばうまくいくはずです。これで下記画面が表示されます。
- 投稿日:2020-02-22T00:37:24+09:00
【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