MySQLデータベースの最適化(サブテーブル、増分バックアップと復元)

テーブル水平分割          

このよう千万のようにあまりにも多くのテーブル内のレコードの数、および頻繁に検索の必要性は、その後、我々は分割する必要性を持っている場合。私は100個のテーブル、各テーブルのみ10万レコードに分割した場合。もちろん、この必要性は、論理的にデータに分けることができます。良い分割では、プログラムの簡単な実装に賛成して、あなたはまた、テーブルの水平成分を利用することができます。そのような毎月のみシステムインタフェース機能クエリを提供するものとして、毎月のみクエリは十分である各クエリに対して、テーブル12にテーブルを分割します。私は解体して、小さなテーブル、クエリ、またはすべての関節のテーブルには、チェックするためにも、地域に応じて分割する必要がある場合は、それは同様に破壊されない場合があります。だから、良いスプリット根拠が最も重要です。キーワード:UNION

例:

  • Ordersテーブルのサブテーブルを生成する時間の順序(年)に従って
  • 学生のファクトシート
  • お問い合わせ費、テーブルへのデータの約3ヶ月間、年間に入れるために別のテーブル

表の縦の部門 

いくつかのテーブルには、数はあまりないです記録しても2,3万人、フィールドには大きなテーブルスペースは、しかし、非常に長いです、あなたは真剣にパフォーマンスが低下し、テーブルを取得中にI / Oを大量に実行する必要があります。この時間は、別のテーブルに大きなフィールドを分割する必要があり、元のテーブルとテーブルには、1対1の関係です。(JOIN)       

[質問]、[情報]の内容は、2つのテーブルを応答すると、もともとにおけるいくつかの質問[情報]にフィールドとして追加し、あなたが質問し、これらの二つのフィールドの回答の内容が非常に長いことがわかります30,000レコードがテーブルにあります質問の列リストが非常に遅いの表は、スペースの1Gを占めています。分析の後、我々は、システムは、多くの場合、[書籍]、[単位]、種類、タイプ、難易度のクエリ、ページネーションの問題の詳細の度合いに基づいていることがわかりました。そして、参加しないすべてのこれらのテーブルを取得するたびに、各テーブルには、再度スキャンする。1Gを。私たちは、別のテーブルに内容と回答を分割し、それは疑問を生じさせた大きなテーブルを、読んだときのみ、その詳細を表示し、[コンテンツ]、[情報] 2つのテーブルを答えることができます。

特定の主キーで、適切なフィールドタイプを選択     

選択フィールドの一般原則は、大規模なフィールドを持っていない小さなバイトのフィールドを取ることができ、大きなを保護していない小規模な保険です。たとえば、主キーは、私たちがスペースを節約自己通電タイプを使用することをお勧めし、スペース効率です!4バイトと32バイトのレコード、速い遅い、あまりにも明白なことを配置することによって。それは参加しないいくつかのテーブルになると、効果がさらに明らかです。

ファイル、画像などの大きなファイルは、ファイルシステムに保存されています

データベースには、パスのみを格納します。写真とさえ一人で単一のサーバ(図ベッド/ビデオサーバ)上で、ファイルシステムに格納された文書。

データベース構成パラメーター

最も重要なパラメータは偉大なメモリ、私たちは主にInnoDBエンジンを使用するので、以下の2つのパラメータのトーンです

innodb_additional_mem_pool_size = 64M 
innodb_buffer_pool_size = 1G

MyISAMテーブルの場合は、状態に依存し、あなたが変更に適応するためのパラメータを決定するには、show状況ステートメントを使用して現在の状態を見ることができるパラメータを調整し、もちろん、key_buffer_sizeは調整する必要があります

3306のmy.ini、デフォルトのストレージエンジンと接続の最大数のポートを変更します。

my.iniで。
ポート= 3306 [2つの場所に変更] 
デフォルト= INNODB-ストレージ・エンジン
のmax_connections = 100

合理的なハードウェアおよびオペレーティングシステムリソース

4Gよりもあなたのマシンのメモリは、それは間違いなくあるべき場合は、その64ビットオペレーティングシステムおよび64ビットのMySQL 5.5.19またはmysql5.6の使用

別々の読み取りと書き込み

    データベースは多くの圧力であれば、マシンはサポートできない、あなたが同期を達成するためにMySQLを使用して複数のマシンをコピーすることができ、データベースへの圧力を分散します。

    マスター
  スレーブ1
  Slave2を
  Slave3

執筆のための主要なライブラリマスター、スレーブ1-slave3はたくさん小さな選択、各データベースの共有の圧力のために使用されています。
これを達成するために、我々は、具体的には、すべての操作マスタを書くために設計されたプログラムを必要とする、すべての動作のスレーブを読んで、プログラムに追加の負担を開発しました。もちろん、これは透明であり、データベースを読み書きするためのプログラムを達成するためのミドルウェアエージェントがすでにあります。公式のMySQLプロキシ、まだアルファ版があります。シーナは、あなたがこの目的を達成することができ、MySQLのamobeを持って、次の構造

データベースのバックアップが完了するまでの時間

実際のプロジェクトのニーズ、スケジュールされたバックアップデータベースを完了、またはデータベーステーブルのいくつかのスケジュールされたバックアップを操作します

1時間ごとのウィンドウは、データnewsdbをバックアップ

2時台newsdbバックアップの窓毎晩

CMD> mysqldumpを-uルート-pパスワードデータベース名>ディレクトリにデータベースに

すべてのテーブルの例、バックアップmydbデータベース

どこのmysqldumpディレクトリを入力します。

CMD> mysqldumpを-uルート-phspショップ> D:/shop.log [ショップすべてのデータベーステーブルには、すべての派生しました]

CMD> mysqldumpを-uルート-phspショップtemusers EMP> D:/shop2.log [temusers店データベースのエクスポートおよびEMP]

データテーブルを回復する方法

MySQLのユーザーインターフェイスを入力します。

フルパスMySQLの>ソースのバックアップファイル

:( my.batを依頼する書き込みにスケジュールされたバックアップコマンド)

窓どのように定期的にバックアップ(午前2時)

バッチコマンドを実行するために、タイミングを内蔵のスケジュールされたタスクのウィンドウを使用します。

インクリメンタルバックアップと復元

定義:MySQLのデータベースは、ユーザーが復元する際、復元するバックアップファイルを使用することができ、ファイルをバイナリ形式、ユーザーのMySQLデータベースレコードの自動運転になります。

増分バックアップ記録DML文、テーブル作成ステートメントを選択し、記録されていません。レコードのものが含まれます:SQL文自体、営業時間、場所

ステップ増分バックアップとリカバリ

MySQL5.0の以前のバージョンをバックアップと増分バックアップをサポートしていません注:

図1に示すように、設定ファイルのmy.iniまたはmy.conf、バイナリバックアップを可能にします。

my.iniファイルを開き、ログ・ビンを見つけ、設定:ログインビン= G:\データベース\ mysqlbinlogは\ mylog

Gでは:\ databaseディレクトリに新しいディレクトリmysqlbinlogは

2、MySQLサービスを再起動します

この時間は、次のディレクトリmysqlbinlogは、次の2つのファイルが表示されます。

mylog.000001:バックアップファイルを記録します。ログファイル内の情報を表示するには、我々はmysqlbinlogはを表示するプログラムを使用することができ、mysqlbinlogはプログラムは、MySQL binディレクトリに保存されている(「C:\プログラムファイル\のMySQL \ MySQLサーバ5.6 \ binに」)。

SQL文の実装

UPDATE emp set ename='zouqj' where empno=100003;

開始 - 、mysqlbinlogはバックアップファイルのパスを実行します--cmd

C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqlbinlog G:\Database\mysqlbinlog\mylog.000001

mylog.index:ログファイルに記録するインデックスファイルを、ログに記録します。(G:データベース\ \ mysqlbinlogは\ mylog.000001)

3、質問が回復する方法を、私はこのアップデートは間違いである持っている、である今と仮定

MySQLのログでは、すべての操作の時間と場所を記録し、私たちの両方が、時間に基づいて復元することができ、それが位置に基づいて復元することができます。

さて、今私たちは、この文はある時点で生成、チャートから見ることができます「2016年4月17日は12時01分36秒」、場所は614です

回復する時間

私たちは、第二文の前の時間に生成するために選択することができます

cmdのコマンドを実行します。mysqlbinlogは--stop-日時= "2016年4月17日12時01分35秒" G:\データベース\ mysqlbinlogは\ mylog.000001 | mysqlの-uroot -p

私は、SQL文を実行します。この時間は見ます

SELECT * from emp where empno=100003;

それはになって

場所によって回復するには

cmdのコマンドを実行します。mysqlbinlogは--stop-位置= "614" G:\データベース\ mysqlbinlogは\ mylog.000001 | mysqlの-uroot -p

結果を確認するためにSQLを実行するためのこの時間は、その後、戻って変更します。

 

MySQLの増分バックアップと復元

おすすめ

転載: www.cnblogs.com/katu/p/11493698.html