MySQL/MariaDBのバックアップ
何度も調べてるのでめも
データベース内のすべてのテーブル
$ mysqldump -h host_name -u user_name -p database_name > dumpfile.sql
localhost
なら-h
オプションは多分いらない
テーブルを指定する場合
mysqldump -h host_name -u user_name -p database_name table1 table2 table3 > dumpfile.sql
圧縮もするなら
$ mysqldump -h host_name -u user_name -p database_name | bzip2 -c > dumpfile.sql.bz2 $ mysqldump -h host_name -u user_name -p database_name | gzip > dumpfile.sql.gz
文字化け時は文字コードの設定をためしてみる
mysqldump --default-character-set=utf8 -u user_name -p database_name > dump.sql
データベースの復元
$ mysql -h host_name -u user_name -p database_name < dumpfile.sql
Let's Encrypt + nginx + Ubuntu
めも。殴り書き。
Let’s Encrypt
環境
- Ubuntu 16.04 LTS
- nginx 1.10.0
一応確認
certbotの導入
$ cd /usr/local/bin $ sudo git clone https://github.com/certbot/certbot $ cd certbot $ sudo ./certbot-auto certonly --standalone -t
あとはよくわからないこと聞かれる
Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal.
とりあえずy
にした
次に認証させたいドメインの入力
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel):example.com
cronでの自動更新設定
Let’s Encrypt の証明書の有効期限は3ヶ月のみなので、自動更新できるようにする
下記をnginxの設定ファイルに追記
server { ... location /.well-known/acme-challenge/ { allow all; } location / { return 301 https://$host$request_uri; } ...
下記コマンドで証明書の更新ができるか確認
$ sudo ./certbot-auto renew Saving debug log to /var/log/letsencrypt/letsencrypt.log ------------------------------------------------------------------------------- Processing /etc/letsencrypt/renewal/example.com.conf ------------------------------------------------------------------------------- Cert not yet due for renewal The following certs are not due for renewal yet: /etc/letsencrypt/live/example.com/fullchain.pem (skipped) No renewals were attempted.
認証鍵入れたての場合、上記のように更新はスキップされる(有効期限が一ヶ月未満だと更新されるよう)
この表示が確認できたら、cron
に証明書を更新してnginxの設定を再読込する設定を書き込む
$ sudo crontab -e # 毎月1日の午前3時に更新 0 3 1 * * /usr/local/bin/certbot/certbot-auto renew && /bin/systemctl reload nginx
nginxの設定
以下最低限
server { listen 443 ssl; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; }
nginx再起動
$ sudo service nginx restart
nginxでWordPress環境をつくった。気分的にMariaDBで。
Google大好きなうえだです。
Googleが最近AWSに対抗してGCPに力入れてるみたいなので、わざわざGCPで構築した。
300ドル分無料で使えるのでお試しあれ。
環境
Google Compute Engine 上の ubuntu 16.04 LTS
timezoneの変更
AWSにしろGCPにしろサーバーのタイムゾーンを忘れないように。
$ sudo dpkg-reconfigure tzdata
日本なら Asia -> Tokyo
を選ぶ。
install nginx
$ sudo apt update $ sudo apt install nginx
とりあえず設定はあとで。
install php
phpは7系。
$ sudo apt -y install php php-cgi php-cli php-mysql php-gd php-apcu php-fpm php-pear php-xmlrpc php-mbstring php-mcrypt
php-fpm
nginx
ではデフォでPHPを実行できないとかなんとかで、FastCGIのphp-fpm
と繋いでPHPの実行環境を構築する
nginx
がソケットを通じてphp-fpm
に.php
の実行を依頼する感じだと思ってる。ので、設定をする。
$ cd /etc/php/7.0/fpm/pool.d/ $ sudo cp www.conf www.conf.org $ sudo vim www.conf
www.conf
に以下の記述をする(コメントインするだけかも)
1
listen = /run/php/php7.0-fpm.sock listen.mode = 0660 #limit access permission to socket
php-fpm
の再起動忘れない。
$ sudo /etc/init.d/php7.0-fpm restart
nginxの設定
サンプル。
server { listen 80; server_name xxx.xxx.com; # domain access_log /var/log/access.log; error_log /var/log/error.log; location / { if (!-e $request_filename) { rewrite ^ /index.php last; } root /var/www/sample/public_html; index index.html index.htm index.php; location ~ .php$ { fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } }
一応だけど
- マルチドメイン対応していなければ
server_name
の記述はしなくていい。そのとき上記の設定は/etc/nginx/sites-enabled/default
に直接書いていい。 - マルチドメインの場合ドメインごとの
server{}
の設定が必要。/etc/nginx/conf.d/
内のファイルはすべてnginx
に読み込まれるので、ここにドメイン毎にファイル作って設定書いたらいいと思う(というのは独断と偏見)。
nginx再起動
設定を変えたら再起動忘れない(リロードコマンドあったっけ)
$ sudo /etc/init.d/nginx restart
MariaDBインストール
mySQLを使いたくない気分だった。
sudo apt install mariadb-server
セキュリティは地味に大事に
$ sudo mysql_secure_installation
mySQLとの互換性を大事にしてるおかげでちょいちょいコマンドがややこしいけど、シェル上ではみんなmysqlコマンド系でMariaDBは動かせる。
まずroot
のパスワードセットするよう求められるのでy
押しとこう。
ちなみに、MariaDBインストール時は不思議な仕様で、root
権限でmysql -u root
と打つとログインできる(つまりsudo mysql -u root
でも可)。
まぁroot
さんはなんでもできるって考え方は割りかし自然ではある。
データベースとユーザ作成
WordPressに扱わせるデータベースとユーザを作成する。
ちなみに確かこれもMariaDBの仕様だった気がするけど、MariaDB上のroot
のパスワード設定しても、実行元もroot
権限じゃないとログインできない。つまりsudo mysql
しないと-u root
できない。
$ sudo mysql -u root -p MariaDB [(none)]> create database wp_sample; MariaDB [(none)]> create user 'username'@'localhost' identified by 'password'; MariaDB [(none)]> grant all on wp_sample.* to 'username'@'localhost' identified by 'password';
Wordpress インストール
wget
ってなんだかんだつよいよな。
$ cd $ mkdir tmp $ cd tmp $ wget https://wordpress.org/latest.tar.gz $ tar xvzf latest.tar.gz $ cd wordpress $ sudo cp -r * /var/www/sample/html $ cd /var/www/sample/html $ sudo cp wp-config-sample.php wp-config.php $ sudo vim wp-config.php
先程作成したユーザとデータベース情報をwp-config.php
に記載する。
phpmyadminのインストール
これは欲しい人だけ。Apache
だとスムーズに入れられるけど、nginx
さんはそうもいかないので、一応補足。
$ sudo apt -y install phpmyadmin php-mbstring php-gettext
Configuring phpmyadmin
て画面が出るんだけれど、nginx
は選択肢になくてapache2
はある。仕方ないのでapache2
を選んどく。
するとapache2
のための自動設定するか的な質問が表示されるので、そっとNo
を選ぶ。
MariaDBの設定
なんでだか下記の設定が必要。plugin=''
の''
はダブルクオーテーションじゃなくてシングルクォーテーション2つなので気をつけよう(僕は間違えた人)。
$ sudo mysql -u root -p mysql Enter password: ... MariaDB [mysql]> update user set plugin='' where user='root'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [mysql]> flush privileges; Query OK, 0 rows affected (0.00 sec)
nginxの追加設定。
phpmyadmin
にアクセスするための設定をnginx
に追加する。
server { ... # setting for phpmyadmin location /phpmyadmin { root /usr/share; index index.php; # setting for phpmyadmin location ~ ^/phpmyadmin.+\.php$ { fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } ... }
これ調べてるときにlocation
でドキュメントルート使い分けられることを知った。感動。
他の設定ファイルもlocation
にドキュメントルートの設定記述してあるのはこうやってドキュメントルートをアクセスパス毎に変えたりすることがあるから。
あ、nginx
の再起動忘れないで。
$ sudo service nginx restart
おわり
WordPressってなんだかんだつよい。
-
もし
php-fpm
のソケットの所有者的なの(user
とかgroup
とか)変えたら、/etc/nginx/conf.d
にかかれてるnginx
の実行ユーザとグループも同じものに変えておくこと(デフォルトはwww-data
だったような。いじらなければ問題ないはず)↩