MySQLデータベースの最適化されたバックアップとリカバリ

データベース領域のクリーンアップ
 
 
削除操作はいくつかのデータフラグメントをもたらします、それはこれらのフラグメントがハードディスク領域を占有しているということです
MySQLのinformation_schemaデータベースのTABLESテーブルは、MySQLデータベースの各テーブルが占めるスペース、テーブルに記録された行数、更新時間、説明などを記録します。このテーブルの主なフィールドは次のとおりです。
TABLE_SCHEMA:データベース名
TABLE_NAME:テーブル名
ENGINE:使用されるストレージエンジン
TABLES_ROWS:レコードの数、つまりテーブル内の行の数
DATA_LENGTH:データサイズ
INDEX_LENGTH:インデックスサイズ
CREATE_TIME:作成時間
UPDATE_TIME:最新の更新時間
DATA_FREE:このパラメーターはmysqlの断片化に関連しており、共有テーブルスペースの場合、このフィールドはデータのサイズではなく、共有テーブルスペースのサイズを示します。排他的な表スペースが使用されている場合のみ、このフィールドは表の残りのスペースを示します。
注:MySQLがリストからコンテンツの行を削除すると、スペースは空白のままになります。長期間にわたって多数の削除操作が実行された後、断片化されたスペースは、リストのコンテンツを格納するために使用されるスペースよりも大きくなる傾向があります。
簡単に言うと、Data_freeフィールドは占有されている物理スペースです。「show table status」を使用して、指定されたテーブルのData_freeフィールドを表示できます。対応する値は占有されている物理スペースです。テーブルの再構築または再インポートにより、このスペースの一部を解放できます。
 
1.データベースのテーブル構造を表示する
USE information_schema;
SELECT table_name、table_rows FROM TABLES WHERE table_schema = 'school' ORDER BY table_rows DESC;
SELECT sum(table_rows)FROMテーブルWHERE table_schema = 'school';
SELECT table_name、table_rows FROM TABLES WHERE table_schema = 'school' ORDER BY table_rows DESC LIMIT 100;
select * from --sayテーブルのクエリ
IDで並べ替えdesc-ID列のサイズで降順に並べ替え
制限100、15-クエリの結果から1つのデータを取得、つまり100番目から15個のデータを取得
 
2.ルックアップテーブルのサイズ
SELECT TABLE_NAME、(DATA_LENGTH + INDEX_LENGTH)/ 1048576、TABLE_ROWS FROM information_schema.tables WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME = 'tablename(你的表名)';
 
 
Mysqlコマンドラインを開き、データベースのパスワードを入力し、操作するデータベースを入力し(コマンドラインは次のとおりです:use databaseName;)、optimize table tableName;を実行します。
 
プロダクションケース:リリーステーブルスペース
 
アイデア1:
 
データは削除されません:バックアップテーブル、ドロップテーブル、バックアップテーブルのデータベースへのインポート。
'oldtb%'のようなテーブルステータスを表示します。-> Data_freeフィールドにフォーカスします。対応する値は、さらに占有されている物理スペース、つまり断片化されたスペースです。
mysqldump -uroot -p123456 mydb oldtb> /mnt/oldtb.sql->システムスペースを復元できるテーブルをエクスポートします。
テーブルを削除するoldtb;->古いテーブルを削除してテーブルスペースを解放する
source /mnt/oldtb.sql;->バックアップテーブルをデータベースにエクスポートします。
'oldtb%'のようなテーブルステータスを表示;-> Data_freeフィールドに焦点を合わせて、リカバリ前後のステータスを比較
この操作は、複数の単一テーブル操作を使用し、テーブルを複数回バックアップおよび復元することにより、断片化されたスペースを解放します。これは、ダウンタイムを許容しないビジネスに適しています。
システムビジネスで一定時間内にサービスを停止できる場合は、データベース全体をバックアップしてから空にして、mysqlデータルートディレクトリを再構築してから、データベース全体を復元できます。
 
 
アイデア2:
 
一部の古いデータを削除する:一部の古いデータを削除できるシナリオに適しています
CREATE TABLE IF NOT EXISTS `newtb` LIKE`コース`;->新しいnewtbテーブル、テーブル構造は古いテーブルと同じです
newtbに挿入します。* from oldtb where time> 'xxx' and time <= 'xxx';
->テーブルの新しいデータをバックアップし、期間に応じて前月または半月をバックアップできます
テーブルを削除するoldtb;->古いテーブルを削除してテーブルスペースを解放する
テーブルを変更するnewtb rename to oldtb;->新しいテーブルの名前を変更 "newdtb"
 
 
アイデア3:直接最適化テーブル:テーブルテーブル名を最適化します。
 
information_schema.tablesからtable_name、data_free、engineを選択します。ここでtable_schema = 'mydb';
->ライブラリ内の各テーブルのdata_free値を確認します。単位はバイト、data_free / 1024/1024/1024はリリース後の理論上のリカバリスペースGです。
'oldtb'のようなテーブルステータスを表示;->単一テーブルのData_freeサイズ
mysql> OPTIMIZE TABLE hellodb.students;
->表示はサポートされていません。実際には、再構成と分析が実行され、スペースが回復しています。
 
 
 
 
データベースのバックアップ
1.バックアップコマンド
形式:mysqldumpの下のcmd -hホスト名-Pポート-uユーザー名-pパスワード-データベースデータベース名> d:\ filename.sql
例:mysqldump -h 192.168.1.100 -p 3306 -uroot -ppassword --database cmdb> /data/backup/cmdb.sql;
 
2.データを回復する
データベースを使用する
ソースd:\ mysql.sql
 

おすすめ

転載: www.cnblogs.com/YinXuanZhiZhi9/p/12719188.html