エックスサーバー(Xserver)でのデータベース(MySQL)のバックアップとリストア

IT

エックスサーバーでは、データベースにMySQLが使われていて、毎日自動的にバックアップされている。このサービスは、容量に2GBの制限があるものの、X10/X20/X30プランでも共通だ。

ただし、自動バックアップには、現時点では過去7日分の制限があるようなので、手動バックアップ/リストアの方法も一緒にみてみよう。

自動バックアップとリストア

何も設定しなくても、データベースは毎日自動バックアップされている。

では、早速確認してみよう。

Xserverのサーバーパネルにログインし、「MySQL復元」をクリックしよう。

「自動バックアップからの復元」のプルダウンメニューから対象を選ぶだけで、復元ができるので非常に簡単だ。

ただし、過去7日分までしか表示されないので、それ以前のデータベースをリストア(復元)するには、別の方法が必要だ。

phpmyadmin

サーバーパネルにphpmyadminがあるので、こちらからデータベースをエキスポートしてみよう。

「実行」ボタンをクリックすると、保存先のパスから推測したとおり、書き込み権限がないとエラーが表示される。

つまり、一般ユーザはphpmyadminからはデータベースのバックアップはできないようだ。

できれば各ユーザの/home/user_id/backupに保存するようにphpMyAdminを変更して、ユーザにサービスを提供してほしいところだ。

仕方がないので、別の方法をみてみよう。

MySQLバックアップ

サーバーパネルから、「MySQLバックアップ」を選ぶと、「現在のMySQLをダウンロード」から手動でバックアップデータをダウンロードできる。

gz形式をチェックし「ダウンロード実行」をクリックすると、データベース名_2020-07-27.sql.gzファイルをローカル環境にダウンロードできる。

mysqldumpでバックアップ

sshでエックスサーバーにログインし、mysqldumpでデータベースをダンプすることができる。user_idとhost_nameは、自分の環境にあわせて変更しよう。

$ mysqldump -u user_id -p -h host_name --all-databases > mysql_dump_20200727.sql

どんなデータベースやテーブルがダンプされるか簡単に確認してみよう。

your_dbは、ユーザが設定した名前になっているはずだ。

$ mysql -u user_id -p -h host

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| your_db            |
+--------------------+
2 rows in set (0.03 sec)

MySQL [(none)]> use your_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

MySQL [your_db]> show tables;
+---------------------------+
| Tables_in_your_db   |
+---------------------------+
| wp_cbnetpo_ping_optimizer |
| wp_cocoon_accesses        |
| wp_cocoon_affiliate_tags  |
| wp_cocoon_function_texts  |
| wp_cocoon_item_rankings   |
| wp_cocoon_speech_balloons |
| wp_commentmeta            |
| wp_comments               |
| wp_ewwwio_images          |
| wp_ewwwio_queue           |
| wp_links                  |
| wp_options                |
| wp_popularpostsdata       |
| wp_popularpostssummary    |
| wp_postmeta               |
| wp_posts                  |
| wp_term_relationships     |
| wp_term_taxonomy          |
| wp_termmeta               |
| wp_terms                  |
| wp_usermeta               |
| wp_users                  |
+---------------------------+
22 rows in set (0.00 sec)

MySQL [(none)]> use information_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [information_schema]> show tables;
+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| CHARACTER_SETS                        |
| COLLATIONS                            |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS                               |
| COLUMN_PRIVILEGES                     |
| ENGINES                               |
| EVENTS                                |
| FILES                                 |
| GLOBAL_STATUS                         |
| GLOBAL_VARIABLES                      |
| KEY_COLUMN_USAGE                      |
| OPTIMIZER_TRACE                       |
| PARAMETERS                            |
| PARTITIONS                            |
| PLUGINS                               |
| PROCESSLIST                           |
| PROFILING                             |
| REFERENTIAL_CONSTRAINTS               |
| ROUTINES                              |
| SCHEMATA                              |
| SCHEMA_PRIVILEGES                     |
| SESSION_STATUS                        |
| SESSION_VARIABLES                     |
| STATISTICS                            |
| TABLES                                |
| TABLESPACES                           |
| TABLE_CONSTRAINTS                     |
| TABLE_PRIVILEGES                      |
| TRIGGERS                              |
| USER_PRIVILEGES                       |
| VIEWS                                 |
| INNODB_LOCKS                          |
| INNODB_TRX                            |
| INNODB_SYS_DATAFILES                  |
| INNODB_FT_CONFIG                      |
| INNODB_SYS_VIRTUAL                    |
| INNODB_CMP                            |
| INNODB_FT_BEING_DELETED               |
| INNODB_CMP_RESET                      |
| INNODB_CMP_PER_INDEX                  |
| INNODB_CMPMEM_RESET                   |
| INNODB_FT_DELETED                     |
| INNODB_BUFFER_PAGE_LRU                |
| INNODB_LOCK_WAITS                     |
| INNODB_TEMP_TABLE_INFO                |
| INNODB_SYS_INDEXES                    |
| INNODB_SYS_TABLES                     |
| INNODB_SYS_FIELDS                     |
| INNODB_CMP_PER_INDEX_RESET            |
| INNODB_BUFFER_PAGE                    |
| INNODB_FT_DEFAULT_STOPWORD            |
| INNODB_FT_INDEX_TABLE                 |
| INNODB_FT_INDEX_CACHE                 |
| INNODB_SYS_TABLESPACES                |
| INNODB_METRICS                        |
| INNODB_SYS_FOREIGN_COLS               |
| INNODB_CMPMEM                         |
| INNODB_BUFFER_POOL_STATS              |
| INNODB_SYS_COLUMNS                    |
| INNODB_SYS_FOREIGN                    |
| INNODB_SYS_TABLESTATS                 |
+---------------------------------------+
61 rows in set (0.00 sec)

テーブルの名前からわかるように、ワードプレスの情報はwp_のテーブルに格納されている。

mysqlでリストア

すべてのデータをリストア(インポート)するには、mysqlコマンドで可能だ。

$ mysql -u user_id -p -h host_name  < mysql_dump_20200727.sql

user_id、host_name、sqlファイルの名前を適宜変更するだけだ。

まとめ

過去7日分であれば、エックスサーバーのサーバーパネルから簡単にデータベースを復元することができる。

しかし、7日以上前のデータになると、自分でバックアップしたダンプファイルをリストアする必要がある。

コメント

タイトルとURLをコピーしました