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
>読み取りロックを使用してテーブルをフラッシュします
>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
データベースにログインします
データが正常に戻っていることがわかります