FAQ:MySQL データベース バックアップ・リストア手順
本手順はユーザマニュアルのインストール手順で構築したプリザンターのデータベース(Implem.Pleasanter)を対象としています。
## 同じ環境へリストアを行う場合
バックアップを取得した環境と同じ環境にリストアを行う場合は以下の通りです。
### バックアップ
1. バックアップファイルを取得します。この手順では /backup ディレクトリ配下に取得します。
```
sudo mkdir /backup
sudo chown -R <mysqldumpを実行するユーザ名> /backup
mysqldump -u root -p<MySQLのrootアカウントのパスワードを-pとの間に空白を入れずに記述> Implem.Pleasanter > /backup/Implem.Pleasanter.dump
```
### リストア
1. 上記バックアップ手順と同様のコマンドでバックアップを取得したうえで、MySQLのrootアカウントでデータベースにログインします。
```
mysqldump -u root -p<MySQLのrootアカウントのパスワードを-pとの間に空白を入れずに記述> Implem.Pleasanter > <リストア前に取得するバックアップファイルの出力先パス/ファイル名>
mysql -u root -p<MySQLのrootアカウントのパスワードを-pとの間に空白を入れずに記述>
```
2. SQLでデータベース(Implem.Pleasanter)を削除、再作成を行い、データベースからログアウトします。
```
drop database `Implem.Pleasanter`;
create database `Implem.Pleasanter` collate utf8mb4_general_ci;
quit;
```
3. リストアのコマンドを実行します。この手順では /backup ディレクトリ配下のバックアップファイルでデータベースを復元します。
```
mysql -u root -p<MySQLのrootアカウントのパスワードを-pとの間に空白を入れずに記述> Implem.Pleasanter < /backup/Implem.Pleasanter.dump
```
## 異なる環境へリストアを行う場合
バックアップを取得した環境(移行元)とは異なる環境(移行先)でリストアを行う場合は以下の通りです。
### バックアップ
1. 移行元でバックアップファイルを取得します。この手順では移行元の /backup ディレクトリ配下に取得します。
```
sudo mkdir /backup
sudo chown -R <mysqldumpを実行するユーザ名> /backup
mysqldump -u root -p<MySQLのrootアカウントのパスワードを-pとの間に空白を入れずに記述> Implem.Pleasanter > /backup/Implem.Pleasanter.dump
```
### リストア
データベースは、上記「同じ環境へリストアを行う場合」と同様の手順で移行します。アプリケーションが該当データベースにアクセスする際に使用するMySQLユーザアカウントは、SQLで新規作成します。
#### データベースの移行
1. 移行先でMySQLにログインします。
```
mysql -u root -p<MySQLのrootアカウントのパスワードを-pとの間に空白を入れずに記述>
```
2. SQLでデータベース(Implem.Pleasanter)作成を行い、データベースからログアウトします。
```
create database `Implem.Pleasanter` collate utf8mb4_general_ci;
quit;
```
3. 移行先でリストアのコマンドを実行します。この手順では移行先の /migrate ディレクトリ配下のバックアップファイルでデータベースを移行します。
```
mysql -u root -p<MySQLのrootアカウントのパスワードを-pとの間に空白を入れずに記述> Implem.Pleasanter < /migrate/Implem.Pleasanter.dump
```
#### MySQLユーザアカウントの追加
1. 移行先でMySQLにログインします。
```
mysql -u root -p<MySQLのrootアカウントのパスワードを-pとの間に空白を入れずに記述>
```
2. SQLでMySQLのユーザアカウントを2件追加し、データベースからログアウトします。
※このSQLでは、ユーザマニュアルのインストール手順で作成したMySQLのユーザアカウントと同一のユーザアカウントを移行先のデータベース上に作成します。
```
create user '<Ownerのユーザ名>'@'localhost' identified by '<Ownerのパスワード文字列>';
grant all on `<データベース名>`.* to '<Ownerのユーザ名>'@'localhost' with grant option;
create user '<Userのユーザ名>'@'localhost' identified by '<Userのパスワード文字列>';
grant select, insert, update, delete, create routine, alter routine on `<データベース名>`.* to '<Userのユーザ名>'@'localhost';
quit;
```
上記SQLにおける可変部の設定値は下記の通りです。
|可変部|設定例|説明|
|:--|:--|:--|
|データベース名|Implem.Pleasanter|上記「 データベースの移行 」で追加したデータベース名|
|Ownerのユーザ名|Implem.Pleasanter_Owner|[Rds.json](/ja/manual/rds-json)の"OwnerConnectionString"のUIDと一致する文字列。#ServiceName#部分は上記「データベース名」に置き換えること|
|Ownerのパスワード文字列|SetAdminsPWD|[Rds.json](/ja/manual/rds-json)の"OwnerConnectionString"のPWDと一致する文字列|
|Userのユーザ名|Implem.Pleasanter_User|[Rds.json](/ja/manual/rds-json)の"UserConnectionString"のUIDと一致する文字列。#ServiceName#部分は上記「データベース名」に置き換えること|
|Userのパスワード文字列|SetUsersPWD|[Rds.json](/ja/manual/rds-json)の"UserConnectionString"のPWDと一致する文字列|
##### 作成するSQLの例
例:[Rds.json](/ja/manual/rds-json)に記載されている接続情報が以下の設定である場合
```
"OwnerConnectionString": "Server=localhost;Port=3306;Database=#ServiceName#;UID=#ServiceName#_Owner;PWD=SetAdminsPWD",
"UserConnectionString": "Server=localhost;Port=3306;Database=#ServiceName#;UID=#ServiceName#_User;PWD=SetUsersPWD",
```
上記の[Rds.json](/ja/manual/rds-json)の設定にもとづくMySQLユーザアカウント作成SQLの例:
```
create user 'Implem.Pleasanter_Owner'@'localhost' identified by 'SetAdminsPWD';
grant all on `Implem.Pleasanter`.* to 'Implem.Pleasanter_Owner'@'localhost' with grant option;
create user 'Implem.Pleasanter_User'@'localhost' identified by 'SetUsersPWD';
grant select, insert, update, delete, create routine, alter routine on `Implem.Pleasanter`.* to 'Implem.Pleasanter_User'@'localhost';
```
#### 外部からMySQに接続するためのMySQLユーザアカウントの追加
WebサーバとDBサーバを分離した構成にする場合は、以下の手順を参照して外部からMySQに接続するためのユーザアカウントを追加します。
〈追加手順〉
[WebサーバとDBサーバを分離した構成でMySQLを利用できるように設定する](mysql-create-user-by-sql)
└【共通手順】外部接続用のユーザアカウントを追加するSQLの構文
なお、「[WebサーバとDBサーバを分離した構成でMySQLを利用できるように設定する](mysql-create-user-by-sql)」対象のプリザンターのバージョンはver1.4.10.0以降です。ver1.4.9.xではMySQLのインストール先と異なるホストでプリザンターを運用することはできないため、ご注意ください。
## 定期的にバックアップ
定期的にバックアップおよび、バックアップファイルの削除を行いたい場合は下記のようなcron設定を行うことで可能です。
下記のcron設定で、毎日1:00に1週間以上前のファイル削除、2:00にバックアップ取得を行う
```
sudo crontab -u <バックアップ取得を実行するLinuxユーザ名※> -e
```
※プリザンターを実行するLinuxユーザと同一で問題ありません。
### 毎日2:00にデータベースのバックアップを取得
```
00 02 * * * /bin/mysqldump -u root -p<MySQLのrootアカウントのパスワードを-pとの間に空白を入れずに記述> Implem.Pleasanter > /backup/`date "+\%Y\%m\%d"`_Implem.Pleasanter.dump
```
### 毎日1:00に一週間以上前のファイルを削除
```
00 01 * * * /bin/find /backup -maxdepth 1 -mtime +7 -type f -delete
```
## 対応バージョン
|対応バージョン|内容|
|:--|:--|
|1.4.9.0 以降|MySQLへの対応に伴いFAQを新規作成|
|1.4.10.0 以降|MySQLのアクセス制御機能によりOwner、Userの接続が拒否される場合がある問題を解消<br>※併せて「異なる環境へリストアを行う場合」に「外部からMySQに接続するためのMySQLユーザアカウントの追加」手順を追加|