序章

単一のVPSでWebアプリケーションとデータベース(LAMPスタックなど)を実行している場合、より多くのトラフィックを処理するために環境を拡張したい状況に遭遇する可能性があります。 環境のスケーリングを開始する良い方法は、データベースサーバーを同じデータセンター内の別の個別のVPSに移行することです。

このガイドでは、既存のMySQLデータベースをアプリケーションサーバーから移行する方法について説明します。 データベース接続と相互作用に関して、すべてのアプリケーションには独自の構成の癖があるため、WordPressを使用した移行プロセスを示しますが、このガイドは、データベースとしてMySQLを使用する他のアプリケーションに適合させることができます。

注:別のデータベースサーバーを使用してアプリケーションの初期設定を行い、保存する既存のデータがない場合は、このチュートリアルの代わりに次のリンクされたチュートリアルを読む必要があります。方法MySQLを使用してサイトのパフォーマンスを最適化するためのリモートデータベースを設定するには。

前提条件

このチュートリアルでは、次の図のように、同じサーバー上にWebアプリケーションとデータベースが存在することを前提としています。

LAMP Stack

このタイプのセットアップの例は次のとおりです。Ubuntu14.04にWordpressをインストールする方法

今後、既存のサーバーをlamp-1と呼びます。

プライベートネットワークを使用して、個別のMySQLサーバーとして機能する追加のVPSを作成する必要があります。 参考までに、このサーバーをmysql-1と呼びます。

私たちの目標

このチュートリアルが終了したら、元の lamp-1 サーバーを使用して、そのデータベースを新しいサーバーmysql-1に移行します。

Separate Database Server

私たちの目標を達成するためのタスク

目標を達成するために完了する必要がある2つの主要なタスクがあります。

  1. 既存のデータベースを新しいサーバーに移行します
  2. 新しいデータベースに接続するようにアプリケーションを再構成します

既存のデータベースの移行を始めましょう!

既存のデータベースを新しいサーバーに移行する

新しいMySQLVPSを作成する

新しいMySQLデータベースサーバーとなる新しいVPSを作成する必要があります。ここでも、参照のために、このサーバーをmysql-1と呼びます。 今すぐ新しいVPSを作成します。 サーバーで行う標準セットアップがない場合は、次のリンクの手順1〜4に従うことをお勧めします。Ubuntu14.04を使用したサーバーの初期セットアップ

MySQLサーバーのインストールと構成

新しいデータベースVPSを作成したら、それに接続してMySQLサーバーをインストールします。

mysql-1 で、次のコマンドを使用してaptを更新します。

sudo apt-get update

次に、次のaptコマンドを実行してMySQLサーバーをインストールします。

sudo apt-get install mysql-server

MySQLインストールのrootパスワードを入力します(元のMySQLサーバーと同じパスワードを使用できます)。 次に、次のコマンドを実行して、デフォルトのMySQLデータベーステーブルを作成します。

sudo mysql_install_db

次に、次のコマンドを実行してMySQLのインストールを完了します。

sudo mysql_secure_installation

ルートパスワード(設定したばかり)のリセットには「いいえ」と応答し、それ以外の場合は「はい」と応答できます。

現在、新しいMySQLデータベースは、ローカルホスト(127.0.0.1)のみをリッスンするように構成されています。 アプリケーションサーバーlamp-1が接続できるように、プライベートIPアドレスをリッスンするようにデータベースサーバーを構成する必要があります。 MySQL構成を開いて編集します。

sudo vi /etc/mysql/my.cnf

MySQL構成ファイルで次の行を見つけます。

bind-address            = 127.0.0.1

127.0.0.1をデータベースサーバーのプライベートIPアドレスに置き換えます。

bind-address = mysql_1_private_IP

その他のMySQL構成の変更( lamp-1 VPSで構成されたデフォルト以外の設定など)がある場合は、ここでそれを実行してから保存して終了します。 これらの変更を有効にするには、次のコマンドでmysqlを再起動します。

sudo service mysql restart

これで、新しいサーバーmysql-1がプライベートIPアドレスでMySQLトラフィックをリッスンしています。 次に、元のデータベースのエクスポートに取り組みます。

元のデータベースのバックアップをエクスポート

オプションで、アプリケーションサーバーを停止して、移行プロセス中に既存のデータベースが更新されないようにすることができます。 データベースはとにかくロックされますが、それはあなたが考慮したいかもしれません。

次に、元のMySQLデータベースのバックアップをエクスポートします。これは、新しいデータベースへの移行に使用されます。 データダンプを実行できるように、データベースをロックする必要があります。 注:データベースをロックするとデータベースの更新がブロックされるため、このチュートリアルの残りの部分を終了するまで、アプリケーションは読み取り専用操作のみを実行できます。

ランプ-1で、MySQLコンソールに入ります。

mysql -u root -p

lamp-1 でデータベースをロックするには、MySQLコンソールから次のコマンドを実行します。

FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = ON;
EXIT

次に、コマンドシェルから次のコマンドを実行して、元のMySQLサーバー上のデータベースのバックアップをdump.sqlというファイルにエクスポートします。

mysqldump --lock-all-tables -u root -p --all-databases > dump.sql

scpを使用して、dump.sqlファイルを新しいデータベースサーバーmysql-1にコピーします。

scp dump.sql user @ mysql_1_private_IP :/ tmp

元のサーバーでMySQLを使用する予定がなくなったため、ロックしたままにしておくことができます。 ロックを解除する場合、MySQLコンソールで次のコマンドを実行します。

SET GLOBAL read_only = OFF;
UNLOCK TABLES;

元のデータベースを新しいサーバーにインポートする

次に、元のデータベースを mysql-1 にインポートして、既存のデータをすべて保持します。

mysql-1 で、次のコマンドを実行してdump.sqlファイルをインポートします。

mysql -u root -p < /tmp/dump.sql

この時点で、元のデータベースデータとユーザーはすべて新しいデータベースサーバーmysql-1にコピーされています。 次のステップは、元のユーザーと同じ特権を持つ新しいデータベースユーザーを作成することです。

Webアプリケーションサーバーからの接続を許可するユーザーを作成する

MySQLがユーザーを管理する方法(ユーザー名とソースホストのペアとして識別される)のため、アプリケーションサーバーのプライベートIPアドレスと一致する「ホスト」値を持つ新しいユーザーを作成する必要があります。

MySQLコンソールに入ります:

mysql -u root -p

次のステートメントを入力して、すべてのデータベースユーザーとホストを一覧表示します。

 SELECT user、host FROM mysql.user;
 出力例:±-----------------±---------- + | ユーザー| ホスト|  ±-----------------±----------+| ルート|  127.0.0.1 |  | ルート|  :: 1 |  |  debian-sys-maint | ローカルホスト|  | ルート| ローカルホスト|  |  wordpressuser | ローカルホスト|  ±-----------------±----------+5行セット(0.00秒)

出力例では、wordpressuserというユーザーがいて、そのソースホストはlocalhostであることがわかります。 「wordpressuser」がアプリケーションユーザーであると仮定しましょう。 アプリケーションとデータベースが別々のサーバー上にあるため、アプリケーションは「localhost」から接続しなくなります。 アプリケーションが接続できるように、host値をアプリケーションサーバーlamp-1のプライベートIPアドレスに設定して、wordpressuserという新しいユーザーを作成する必要があります。 。

同じ名前で新しいユーザーを作成しますが、そのホストをアプリケーションサーバーのプライベートIPアドレスlamp-1に変更します。 また、パスワードがユーザーの元のパスワードと一致していることを確認してください(強調表示されているすべての項目を独自のパスワードに置き換えてください)。

CREATE USER'wordpressuser ' @' lamp_1_private_IP ' IDENTIFIED BY'password ';

再作成するユーザー(この場合は wordpressuser )ごとに、次のステートメントを実行して、その特権を出力します(すぐに割り当てる必要があります)。

 wordpressuserの助成金を表示 @localhost  ;

出力例:User Privileges

GRANT USAGE ON *.*の後の行をメモしてください。これは、その変更バージョンを使用して、作成したばかりのユーザーに特権を付与するためです。 たとえば、元のユーザーの付与に基づいて、次のステートメントを実行して、同じ付与を新しいユーザーに割り当てます(この例では、wordpressはデータベース名です)。 上記の出力のコピーですが、localhostはlamp-1のプライベートIPアドレスに変更されています。

すべての特権を付与する<span class="highlight">wordpress</span> 。* TO'wordpressuser '@' lamp_1_private_IP ';

次に、新しいユーザーの権限を表示します。

wordpressuser @ lamp_1_private_IPの助成金を表示;

出力例:User Privileges

適切なデータベースユーザーのホスト値の更新が完了したら、次のステートメントを実行してこれらの変更を有効にし、MySQLコンソールを終了します。

FLUSH PRIVILEGES;
EXIT

新しいデータベースサーバーが移行および構成されたので、新しいデータベースサーバーに接続するには、アプリケーション構成を更新する必要があります。

アプリケーション構成の更新

最後のステップは、新しいデータベースサーバーmysql-1を指すようにアプリケーション構成を更新することです。 構成の場所は、アプリケーションとインストール場所によって異なるため、例としてWordPressを使用します。

WordPressの設定例

WordPressは、データベース接続構成を、インストールディレクトリの wp-config.php というファイル(たとえば、/var/www/html/)に保存します。

WordPress構成を開きます:

sudo vi /var/www/html/wp-config.php

次の行を探します。

/** MySQL hostname */
define('DB_HOST', 'localhost');

localhostを新しいデータベースサーバーのプライベートIPアドレスmysql-1に置き換えます。 次のようになります(強調表示されたものを置き換えます)。

define('DB_HOST'、' mysql_1_private_IP ');

保存して終了します。 次に、通常の方法でアプリケーションにアクセスします( lamp-1 のパブリックIPアドレスまたはドメイン名)。 以前とまったく同じように見えるはずですが、新しいサーバーmysql-1のMySQLデータベースに接続しています。

その他のアプリケーション

別のアプリケーションを実行している場合は、「localhost」または「127.0.0.1」の代わりにプライベートIPアドレスまたは名前を使用するように、アプリケーションのデータベース接続構成を更新するだけです。 アプリケーションがデータベース接続を処理する方法によっては、新しいデータベースに接続するためにアプリケーションを再起動する必要がある場合があります。

元のサーバーでMySQLを停止します

アプリケーションが新しい別のデータベースサーバーで正常に動作することを確認したら、元のMySQLデータベースサーバーをクリーンアップする必要があります。 最低限、MySQLサービスを停止する必要があるため、リソースの使用を停止します。

オンランプ-1:次のコマンドを実行してMySQLを停止し、起動時に起動しないように設定します。

sudo service mysql stop
sudo sh -c "echo 'manual' > /etc/init/mysql.override"

結論

データベースサーバーがアプリケーションサーバーから分離されたので、各コンポーネントにより多くのリソースが割り当てられるため、環境はより多くのトラフィックを処理できるはずです。 また、負荷分散やデータベースレプリケーションなど、他の改善に向けて環境をより適切に準備できるようになりました。

スケーラビリティのトピックに関するチュートリアルは次のとおりです。

ミッチェル・アニカス