ホームページ  >  記事  >  データベース  >  MySQLのバックアップとリカバリ

MySQLのバックアップとリカバリ

高洛峰
高洛峰オリジナル
2016-12-02 14:53:39847ブラウズ

Mysqlバックアップの分類:
Mysqlデータのバックアップ:
論理バックアップ、物理バックアップ
Mysqlはデータセットによって分類されます:
フルバックアップ
増分バックアップ
差分バックアップ
通常これらはフルバックアップなど組み合わせて使用​​することができます増分バックアップと差分バックアップは 1 週間に 1 回、増分バックアップと差分バックアップは 1 日に 1 回実行できますが、これは企業のビジネス ロジックに依存するため、適切な選択を行うことでデータ回復中の損失を最小限に抑えることができます。
mysql はサーバーがダウンしているかどうかに応じて分類されます:
コールド バックアップ: サービスは完全に停止しています
ウォーム バックアップ: サービスはシャットダウンされていませんが、バックアップ中は他のトランザクションはクエリ操作のみです
ホット バックアップ: サービスはオンラインです読み取りと書き込みには影響しません (トランザクション ストレージ エンジンのホット スタンバイの実装は困難ですが、
LVM を使用するとほぼホット スタンバイ機能を実現できます)
バックアップが必要なもの:
1. データ ファイル
2. ログ ファイル (トランザクション ログ、バイナリ ログ)
3. ストレージ プロシージャ、ストアド関数、トリガー
4. 構成ファイル
ログ分類:
1. トランザクション ログ:
ランダム IO をシーケンシャル IO に変換
イベント リプレイの基礎を提供(元に戻す)
2. イベント トランザクション:
履歴時間を記録する
MySQL ログ ファイル
1.エラー ログ エラー ログ
エラー情報、サーバー プロセスの開始または停止によって生成される情報。マスターがそこからレプリケーションを追加すると、記録される
メイン設定ファイルの起動エラー ログ、
log_error=/var/ log/mysqld.err (mysqld への書き込み権限があることを確認してください)
2. バイナリ ログ バイナリ ログ
増分バックアップを提供します
ポイントインタイムリカバリ
レプリケーション アーキテクチャの基盤を提供します
log_bin=/data/logs/binary/changelog (デフォルトはデータ ファイルにあります)
Log_bin_index=/data/logs/relay/binarylog はインデックスを定義します
バイナリ ファイルの場所
3.一般的なクエリ ログ 通常は開かないことをお勧めします
general_log=ON|OFF
general_log_file=/PATH
4.スロー クエリ ログ スロー クエリ ログ
throw_query_log=ON
throw_query_log_file=/PATH
long_query_time=NUM は、タイムアウト
5.リレー ログ リレー ログ
デフォルトでは、Mysql はログを有効にしませんが、エラー ログは mysqld スクリプト (
エラー ログ) で有効になります

mysql で一般的に使用されるバックアップ ツール:
mysqldump
SELECT INTO OUTFILE
mk-Parallel-backup
ibbackup
mysqlhostcopy (MyISAM ストレージ エンジンのほぼコールド バックアップ、名前はホット バックアップのように見えます)

次に、私のバックアップ ツールの 1 つを使用します。簡単なデータベースは、データのバックアップと復元のプロセスを示しています。
1. mysqldump を使用してバックアップします。
mysqldump のバックアップは次のとおりです。
#mysqldump db_name [table_name] / PATH
もちろん mysqldump バックアップには多くのオプションがあります:
--all-databases すべてのデータベースをバックアップ
--events バックアップ イベント
--routines バックアップ ストレージ関数
--triggers バックアップ トリガー
--extended-insert バックアップの拡張挿入
--skip -extended-insert バックアップ拡張機能の挿入をオフにします
--lock-all-tables ロックします。これは必要です
--flush-logs ログ ファイルをディスクに更新します。これも必要です
--master- data=n{ 0|1|2} レプリケーションを行う場合は (2) を使用します
--no-data はデータベース内のテーブル構造のみをバックアップします
--where "WHERE CLAUSE" は指定されたデータをバックアップします
mysql> luowei;
mysql> SHOW DATABASES;//すべてのデータベースを表示
+---------+
| データベース |
+-------- ------------- --------+
| 情報スキーマ |
| -+
mysql> USE luowei;
mysql> CREATE TABLE st (
-> ID INT; UNIQUE AUTO_INCREMENT,
-> Name VARCHAR(30) );
mysql> //テーブルを表示
+--- ---------------+
| +--------------+
|
+--- ---------------+
> st (名前) VALUE ('a'),('b'),('c');
mysql> SELECT * FROM st;
+----+---- --+
| 名前 |
+-----+
| 1 |
2 |
+-- ----+
これはデータベース内の元の情報です。後でデータベースとテーブルを削除するので、最初に見てください。
内部のデータは後で確認するのに便利です。
[root@nfs ~] # mysqldump -uroot -p luowei st > /root/st.sql //
バックアップテーブル st を開始します。ここではパラメータは使用されません
パスワードを入力してください :
OK、mysqldump は論理バックアップを使用するため、この時点でバックアップは完了です。バックアップされているものはいくつかの create ステートメントと insert ステートメントです
開いて見てみましょう
[root@nfs ~]# cat /root/luoweidb | v "^/" grep -v "^$"
- - MySQL ダンプ 10.11
--
-- ホスト: localhost データベース: luowei
--------------- --------------- ------------------------
-- サーバー バージョン 5.0.77
--
-- 現在のデータベース: `luowei`
--
CREATE DATABASE /* !32312 IF NOT EXISTS*/ `luowei` /*!40100 DEFAULT
CHARACTER SET latin1 */;
USE `luowei`;
--
-- テーブル `st` のテーブル構造
--
DROP TABLE IF EXISTS ` st`;
SET @saved_cs_client = @@character_set_client;
SET Character_set_client = utf8;
CREATE TABLE `st` (
`ID` int(11) NOT NULL auto_increment,
`Name` varchar(30) デフォルト NULL,
UNIQUE KEY `ID` (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
SET Character_set_client = @saved_cs_client;
--
- - テーブル `st` のデータをダンプしています
--
LOCK TABLES `st ` WRITE;
INSERT INTO `st` VALUES (1,'a'),(2,'b'),(3,'c');
UNLOCK TABLES;
-- ダンプは 2011 年 9 月 5 日に完了しました 8 :00:08
ほら、データベースの作成、テーブルの作成、データの挿入のために行ったステートメント全体がここにあります
;
次に、データベースのリカバリを実行しましょう:
[root@nfs ~]# mysql -uroot - e "DROP DATABASE luowei;" -p //
データベースを削除します
パスワードを入力してください:
[root@nfs ~]# mysql -uroot -e " SHOW DATABASES;" -p //削除されたデータベースを表示します
パスワードを入力してください:
+ ------------------------+
| データベース |
+--- -------------- ----+
| 情報スキーマ |
| ndodb |test mysql -uroot -p < /root/luoweidb
パスワードを入力してください:
[root@nfs ~]# mysql -e "SHOW DATABASES;"
+---------------- ---+
| データベース |
+---------------+
| hellodb |
| | mysql |
| ndodb |
| テスト |
+---------------+
OK、データベースは復元されました。次のステップは、テーブル内の情報が完全であるかどうかを確認することです
[ root@nfs ~]# mysql -e "SELECT * FROM luowei.st" -uroot -p
パスワードを入力してください:
+----+--- ---+
| 名前 |
+--- -+-----+
| 1 |
| 3 | -----+
わかりました、仲良くしてください(笑)。もちろん、他のパラメータについては詳しく説明しません。必要な場合は、HELP コマンドを使用してヘルプを求めることができます。
以下では、このマシン上で Mysql パスワードを入力する必要がない方法を紹介します:
#vim /root/.my.cnf
[client]
user = root
Password = redhat
それを保存し、mysql コマンドを直接使用します次回データベースを操作するときは、もうパスワードを入力する必要はありません
;
次の実験ではパスワードを入力しません;

2. バックアップには SELECT INTO OUTFILE メソッドを使用するか、上記の表を使用します
[root@ nfs ~]# mysql -e "SELECT * FROM luowei.st"
+----+------+
|
+----+------+
| | 1 | a | 2 |
| c |

+-----+-----+

このメソッドを使用してバックアップします
mysql> SELECT * INTO OUTFILE '/tmp/st.bak' FROM st WHERE ID <=2;
[root@nfs ~]# cat /tmp/st.bak
1 a
2 b
テーブルに似たテキストファイルが表示されますが、この方法ではテーブル構造ではなくデータ自体がバックアップされるだけなので、復元する場合は、構造に従って新しいテーブルを再作成してから復元する必要がありますit after
mysql> CREATE TABLE mt LIKE st; //I ここでは、st テーブル形式に基づいて新しい
テーブル mt を作成し、新しくバックアップしたデータを新しいテーブル mt に復元するのと似ています。オリジナルテーブルははは、怠惰にしましょう! ! !
mysql> LOAD DATA INFILE INTO TABLE mt;
mysql> SELECT * FROM mt;
+-------+
| 名前 |
- --+-----+
| a |
| b |
+----+-----+
それでは、これら 2 つの方法をまとめてみましょう。論理バックアップを使用してデータをバックアップする mysqldump バックアップされるのはデータベース上で動作するいくつかのステートメントであり、リカバリは SELECT INTO OUTFILE を使用して簡単に行うことができます。復元するときはさらに面倒で、テーブルを作成する必要があります。

3. LVM ベースのスナップショット バックアップ:
操作手順:
a. データ ファイルが LV 上にあることを確認します
b. データベース内のテーブルに読み取りロックを適用します
c.データが見つかりました
d. データベースの読み取りロックを解除します
e. スナップショット ボリュームをマウントし、データ ファイルをバックアップします (InnoDB ストレージ エンジンの場合は、トランザクション ログ
ファイルもバックアップします)
f. スナップショットを削除します。スナップショット バックアップに LVM を使用する方法は次のとおりです:
>SHOW VARIABLES LIKE 'log_binlog' ; が ON
>SHOW VARIABLES LIKE 'sync_binlog' が 1 に変更されました
>SHOW VARIABLES LIKE 'innodb_support_xa' が ON
LV スナップショット バックアップ
#mysql
>読み取りロックを使用してテーブルをフラッシュします

# lvcreate -L 50M -n mysnap -s /dev/myvg/mydata // スナップショットを作成します

>UNLOCK TABLES; // ロックを解除します
#mount /dev/myvg/mysnap /mnt //スナップショットボリュームをマウントします
#cd /mnt/data
#tar -jcf /root/mysql.tar.bz2 luowei/ ibdata1 ib_logfile* mysql-
bin.* //データをバックアップして圧縮します
#umount / mnt //スナップショットをアンインストールします
#lvremove --force / dev/myvg/mysnap //スナップショットを削除します

LVリカバリ
cd /usr/local/mysql
#chown -R mysql:mysql //権限を変更します
#scripts/ mysql_install_db --user=mysql --datadir=/ mydata/data/ //
Regenerate
#chown -R root .
#killall mysqld //mysql に関連するすべてのプロセスを強制終了します
#cd /mydata/data
#tar xf / root/mysql.tar.bz2 -C ./ //バックアップを mysql データ ファイルに復元します
その後、Mysql にログインすると、元のデータがまだ存在していることがわかります

4. バイナリ ログ ファイルを使用してポイントインタイム リカバリを実現します
現在使用中のトランザクション ファイルを表示します
mysql>FLUSH TABLES WITH READ LOCK;
mysql>SHOW MASTER STATUS;
+------- --- ------+----------+--------------+-------------- --- -+
| ビンログ_Do_DB |
+------+----------+---- -- --------+------+
| 330 | ----------+----------+---------------+--------------- - ----+
mysql> FLUSH LOGS; //ログファイルをロールします
使用されているトランザクションファイルを確認し、Positionを記録します
バイナリログファイルにはデータの変更情報のみが記録されるため、変更が行われるたびに対応する
Positionが変化します
今度はテーブルにデータの行を挿入します
mysql> INSERT INTO st (Name) VALUE ('d');
mysql> INSERT INTO st (Name) VALUE ('E');
mysql>
+------------------+----------+-------------- +--- ---------------+
| ビンログ_Do_DB |
+------ +--- -------+--------------+-----------------+
| mysql-bin.000007 | 553 | ----+------+
以前に完全バックアップを行ったので、330 から始まる
データをバックアップできます
# mysqlbinlog --start-position 330 mysql-bin.000007
>/root/mysql.incr.sql //追加したバイナリファイルをバックアップします
この時点でmysqlにログインします
mysql>DROP DATABASE luowei;
その後復元しますデータベース
# service mysqld stop
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
# cd /mydata/data/
# tar xf /root/mysql.incr.sql -C .
# mysql < ; /root/mysql.incr.sql
# service mysqld start
データベースにログインします
データが正常に戻っていることがわかります

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。