4

好奇心から、ユーザー情報でいっぱいの巨大な MySQL データベースがあり、現在はいっぱいになっているとします。同じサーバーと、より多くのストレージ容量を持つ別のサーバーから、同じ MySQL データベースをどのように実行しますか?

4

2 に答える 2

5

問題が単なるストレージ容量の問題である場合、最も簡単な解決策は、データベースを容量の大きい別のシステムに転送することです。

別の解決策は、同じシステムにディスクを追加することです。

  1. (InnoDB)テーブルスペースをこのドライブに拡張します(InnoDBでは、各テーブルを個別のファイルに保存することもできます)
  2. (MyIsam) いくつかの *.MYD および/または *.MYI ファイルをこのドライブに移動します

上記のファイルは、別のハード ドライブに移動できます (元の場所からシンボリック リンクする必要がある場合があります)。

ただし、真に広くスケーラブルなソリューションは、MySQL クラスターのようなデータベースのクラスターです。

この質問に従うこともできます。この問題は現在、実際の環境で対処されています。


[編集] 詳細な説明:

以下の情報は、Linux サーバーでのみ有効です。Windowsでは可能かもしれませんが、私にはわかりません。とにかく、Windows で MySQL データベースを実行することは、大規模な環境ではおそらく良い考えではありません。

3 つのオプションは同じ原則に基づいています。

  • 別のディスクをファイル システムにマウントする
  • 一部の既存の MySQL データ ファイルをこの新しいハードディスク、つまり新しいディレクトリに移動するか、MySQL にこの新しいディレクトリに新しいデータ ファイルを作成するように指示します。
  • 必要に応じて、新しい場所へのシンボリック リンクを作成して、MySQL にファイルが移動されていないと思わせるようにします。

1. InnoDB テーブルスペースを拡張する

InnoDB エンジンを使用すると、テーブルスペースを多くのファイルに分散できます。my.cnf( で)調整する構成オプションはinnodb_data_file_pathです。例:

innodb_data_file_path=/mnt/hard_disk1/ibdata:50G;/mnt/hard_disk2/ibdata:200G;

... MySQL に/mnt/hard_disk1/ibdata1、50 GB のファイルと 200 GB のファイルを作成するように指示します/mnt/hard_disk2/ibdata2

個人的には、この機能が嫌いです。なぜなら、MySQL は最初のファイルがいっぱいになるまで 2 番目のファイルをまったく使用しないため、微調整ができないからです。良い面は、構成ファイルを編集してサーバーを再起動するだけでよいことです。それでおしまい。

2.各 InnoDb テーブルを個別のファイルに保存します

このオプションは、名前が示すように、新しいテーブルinnodb_file_per_tableごとに 1 つの個別のファイルを作成するように MySQL に指示します。「新しいテーブル」は、セットアップの変更後に既存のテーブルが影響を受けないことを意味します。これを回避するには、テーブルをダンプ、削除、および再作成して、共有テーブルスペースから「抽出」することができます。

これらのファイルは[datadir]/[database]/[table].ibdで、はオプションで[datadir]定義され、はデータベースの名前、はテーブル名です。これらのファイルは、MyISAM テーブルと同じように移動できます (次のオプションを参照)。datadir[database][table]

3. MyISAM ファイルを移動する

MyISAM テーブルごとに、MySQL は という名前の 3 つのファイルを作成します[datadir]/[database]/[table].[type]。ここで、 はオプションで[datadir]定義され、はデータベースの名前、はテーブル名です。datadir[database][table]

[type]frmテーブルの説明(構造)、MYDデータ、MYIインデックス用になります。

ここで、オプション 2. と 3. に関して、すべてのファイルがほぼ同じディレクトリに配置されているか、少なくとも親ディレクトリを共有していることに気付きました。それらを実際に新しいハードディスクに保存するには、2 つのオプションがあります。

1) データベース全体を移動するには:

  • サーバーを停止します
  • databaseディレクトリの名前を好みの別の名前に変更します。backup
  • としてハードディスクをマウントします。datadir/databse
  • の内容をに移動しbackupますdatadir/databse
  • サーバーを再起動します

MySQL は、何事もなかったかのように再開します。

2) 個々のテーブルを移動するには:

  • 好きな場所に新しいディスクをマウントします
  • サーバーを停止する
  • 各ファイルを個別に新しいハード ドライブに移動する
  • 元のファイルと同じ名前で、元の場所にシンボリック リンクを作成します。
  • サーバーを再起動します

MySQL は至福の無知で再開します。

于 2012-06-17T09:40:00.443 に答える
0

ご覧のとおり、最善の解決策は、データベースをより容量の大きい新しいサーバーに移動し、そこで現在のデータベースを復元することです。現在のサーバーには、ディスク領域やメモリなどの重要なリソースが不足しているため、データベースのパフォーマンスが著しく低下しています。

  1. 新しいサーバーにmysqlをインストールする
  2. 既存のデータベースから ( CREATE TABLE xxx に関して) データベース テーブル構造を取得します (これは、SQLYog などの SQL データベース管理ツールを使用して簡単に作成できます)。
  3. 新しいサーバーで新しく作成されたデータベースのこの DDL スクリプトを実行します
  4. 既存のデータベースを使用して .dat ファイルを作成する
  5. それを新しいサーバーにコピーし、その.datファイルを新しいデータベースに対して実行します

参考文献

  1. http://www.devshed.com/c/a/MySQL/Backing-up-and-restoreing-your-MySQL-Database/

移行後は、同じデータベースを使用する参照アプリケーションの該当するデータ ソース ファイルを変更するだけです。

于 2012-06-17T07:09:58.340 に答える