好奇心から、ユーザー情報でいっぱいの巨大な MySQL データベースがあり、現在はいっぱいになっているとします。同じサーバーと、より多くのストレージ容量を持つ別のサーバーから、同じ MySQL データベースをどのように実行しますか?
2 に答える
問題が単なるストレージ容量の問題である場合、最も簡単な解決策は、データベースを容量の大きい別のシステムに転送することです。
別の解決策は、同じシステムにディスクを追加することです。
- (InnoDB)テーブルスペースをこのドライブに拡張します(InnoDBでは、各テーブルを個別のファイルに保存することもできます)
- (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 は至福の無知で再開します。
ご覧のとおり、最善の解決策は、データベースをより容量の大きい新しいサーバーに移動し、そこで現在のデータベースを復元することです。現在のサーバーには、ディスク領域やメモリなどの重要なリソースが不足しているため、データベースのパフォーマンスが著しく低下しています。
- 新しいサーバーにmysqlをインストールする
- 既存のデータベースから ( CREATE TABLE xxx に関して) データベース テーブル構造を取得します (これは、SQLYog などの SQL データベース管理ツールを使用して簡単に作成できます)。
- 新しいサーバーで新しく作成されたデータベースのこの DDL スクリプトを実行します
- 既存のデータベースを使用して .dat ファイルを作成する
- それを新しいサーバーにコピーし、その.datファイルを新しいデータベースに対して実行します
参考文献
移行後は、同じデータベースを使用する参照アプリケーションの該当するデータ ソース ファイルを変更するだけです。