Linux:MYSQL(十一)LVM,mysqldumpバックアップ
バックアップとリカバリディザスタリカバリをバックアップする理由:ハードウェア障害、ソフトウェア障害、自然災害、ハッカー攻撃、誤操作テストなどのデータ損失シーン バックアップの注意点最大損失を許容できるデータ復旧データの所要時間数 リストア要点リストアテストを行い、バックアップの可用性リストアトレーニング をテストします.
バックアップとリカバリバックアップ時に考慮すべき要因温備のロックがどのくらいかかっているかバックアップによって生じる負荷バックアッププロセスの時間長リカバリプロセスの時間長 は、どのようなデータバイナリ・ログ、InnoDBのトランザクション・ログ・プログラム・コード(ストアド・プロシージャ、関数、トリガ、イベント・スケジューラ)サーバのプロファイル をバックアップするかを示す.物理および論理バックアップ 物理バックアップ:データファイルを直接コピーしてバックアップを行い、ストレージエンジンと関係があり、多くの空間を占有し、速度が 速い.論理バックアップ:データベースからデータを「エクスポート」して保存するバックアップは、ストレージエンジンに関係なく、占有スペースが少なく、速度が遅く、精度が失われる可能性があります .
バックアップタイプ:フルバックアップ、インクリメンタルバックアップ、差分バックアップ フル・バックアップ:データセット全体 インクリメンタル・バックアップ:インクリメンタルが存在する場合、最近のフル・バックアップまたはインクリメンタル・バックアップ以降に変化するデータのみをバックアップします.バックアップは高速で、複雑な をリストアします.差分バックアップ:最近の完全バックアップ以降に変化したデータのみをバックアップし、バックアップが遅く、簡単な をリストアします.
注:バイナリ・ログ・ファイルは、データ・ファイルと同じディスクに置くべきではありません.コールド、ホット・バックアップ 冷備:読み書き操作は 不可温備:読み取り操作が実行可能;ただし、書き込み操作は実行できない ホットスペア:読み書き操作はすべてMyISAM:ホットスペア、ホットスペアInnoDBをサポートしない:いずれも をサポートする
バックアップツール cp,tarなどのレプリケーションアーカイブツール:物理バックアップツール、すべてのストレージエンジンに適用;冷却のみをサポートします.完全および部分バックアップ LVMのスナップショット:先にロックをかけて、スナップショットをしてからロックを解除して、ほとんどホットスペアです;ファイルシステムツールによるバックアップ mysqldump:論理バックアップツール、すべてのストレージエンジンを適用し、温備;完全または一部のバックアップをサポートします.InnoDBストレージエンジンに対してホットスペアをサポートし、binlogのインクリメンタルバックアップ を結合する. xtrabackup:PerconaがInnoDBのホットスペア(物理バックアップ)をサポートするツールを提供し、フルバックアップ、インクリメンタルバックアップ をサポートする. MariaDB Backup:MariaDB 10.1.26から統合を開始し、Percona XtraBackup 2.3.8に基づいて を実現 mysqlbackup:ホットバックアップ、MySQL Enterprise Editionコンポーネント mysqlhotcopy:PERL言語で実装され、ほとんど冷却され、MyISAMストレージエンジンにのみ適用され、LOCK TABLES、FLUSH TABLES、cpまたはscpを使用してデータベース を迅速にバックアップ
cp tarバックアップ
すべてコピー:
##LVMバックアップLVMのバックアップ(1)要求に基づいてすべてのテーブルmysql>FLUSH TABLES WITH READ LOCKをロックする;(2)バイナリログファイル及びイベント位置mysql>FLUSH LOGSを記録する.mysql> SHOW MASTER STATUS; mysql-e‘SHOW MASTER STATUS’>/PATH/TO/SomeEFILE(3)スナップショットlvcreate-L#-s-pr-n NAME/DEP/VG_を作成NAME/LV_NAME(4)ロック解除mysql>UNLOCK TABLES;(5)スナップショットボリュームをマウントし、データバックアップを実行する(6)バックアップが完了した後、スナップショットボリュームを削除する(7)ポリシーを制定し、元のボリュームからバイナリログをバックアップする
一、準備
二、データベースのロック、スナップショットの開始
三、スナップショットの内容をコピーする
四、バイナリログで、スナップショット後の修正操作を最新に復元する
バックアップとリカバリ論理バックアップツール:mysqldump,mydumper,phpMyAdmin Schemaとデータは一緒に保存され、巨大なSQL文、単一の巨大なバックアップファイル mysqldumpツール:クライアントコマンドmysqlプロトコルでmysqlサーバに接続してバックアップmysqldump[OPTIONS]database[tables]mysqldump[OPTIONS]–B DB 1[DB 2 DB 3...]mysqldump[OPTIONS]–A[OPTIONS] mysqldumpリファレンス:https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html
mysqldumpの一般的なオプション:
-A,--all-databases create databaseを含むすべてのデータベースをバックアップ
-B , --databases db_name...create database文を含むバックアップのデータベースを指定します.
-E,--events:関連するすべてのevent schedulerをバックアップ
-R,--routines:すべてのストレージ・プロシージャとカスタム関数をバックアップ
-triggers:バックアップテーブル関連トリガ、デフォルト有効、-skip-triggers、バックアップトリガなし
-default-character-set=utf 8指定文字セット
-master-data[=#]:このオプションはバイナリログ1を有効にする必要があります:バックアップされたデータの前にCHANGE MASTER TO文として記録する2:注釈として記録されたCHANGE MASTER TO文このオプションは自動的にオフになります–lock-tables機能は自動的にオンになります-x|--lock-all-tables機能は自動的にオンになります-single-transaction
-F,--flush-logs:バックアップ前にログをスクロールし、テーブルをロックした後、flush logsコマンドを実行し、新しいバイナリログファイルを生成し、-Aまたは-Bオプションに合わせると、複数のデータベースがリフレッシュされます.ダンプとログのリフレッシュは、-single-transactionまたは-x、-master-dataとともに使用することで実現することを推奨します.この場合、ログは1回のみリフレッシュされます.
-compactコメントを削除し、デバッグに適し、生産は使用しない
-d,--no-dataテーブル構造のみバックアップ
-t,--no-create-infoはデータのみをバックアップし、create tableをバックアップしない
-n,–no-create-dbはcreate databaseをバックアップせず、-Aまたは-Bで上書き可能
-flush-privileges mysqlまたは関連するバックアップに使用する必要があります
-f,--force SQLエラーを無視して実行を続行
-hex-blobは16進記号を使用してバイナリ列をダンプし、BINARY、VARRBINARY、BLOB、BITのデータ型を含む列がある場合に使用し、文字化けしないようにする
-q,--quickはクエリーをキャッシュせず、直接出力し、バックアップ速度を速める
MyISAMエンジンのバックアップオプション:
温備をサポートする.ホット・スペアはサポートされていません.バックアップするライブラリをロックしてから、バックアップ・オペレーションのロック方法を起動する必要があります.
-x,–lock-all-tables:グローバル・リード・ロックを追加し、すべてのライブラリのすべてのテーブルをロックします.また、-single-transactionまたは-lock-tablesオプションを追加すると、このオプション機能が閉じます.注意:データ量が多い場合、データベースに同時にアクセスできない場合があります.
-l,–lock-tables:バックアップが必要なデータベースごとに、バックアップを開始する前にすべてのテーブルをロックします.デフォルトはonです.-skip-lock-tablesオプションは無効になります.MyISAMをバックアップする複数のライブラリでは、データが一致しない可能性があります.
注意:上記のオプションはInnoDB表と同様に有効で、温備を実現しますが、推奨しません.
##InnoDBバックアップオプションはホットスペアをサポートし、ホットスペアは使用可能だが推奨しない
–single-transaction
このオプションInnodbでは推奨されています.MyISAMは適用されません.このオプションはバックアップを開始する前に、START TRANSACTIONコマンドを実行してトランザクションをオープンします.
このオプションは、すべてのテーブルを単一のトランザクションにダンプすることで、一貫したスナップショットを作成します.マルチバージョン制御をサポートするストレージエンジンに格納されているテーブルにのみ適用されます(現在はInnoDBのみ可能).ダンプは、他のストレージエンジンと一致することを保証しません.単一トランザクションのダンプを行う場合、有効なダンプ・ファイル(正しいテーブル・コンテンツとバイナリ・ログの場所)を確保するには、ALTER TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLEのオプションと–lock-tables(コミット保留中のトランザクションを含む)のオプションは互いに反発します.
大規模なテーブルをバックアップする場合は、–single-transactionオプションと–quickを組み合わせて使用することをお勧めします.
データベース・スクリプトのライブラリ・バックアップ
一、while...doバックアップデータベース
二、sedバックアップデータベース
三、for...inバックアップデータベース
!!スクリプトをbashに直接実行するには
本番環境の実戦バックアップポリシー InnoDB推奨バックアップポリシー MyISAM推奨バックアップポリシー
実戦練習
一、初期状態を復元する
二、バックアップリストア1.バックアップの開始
2.データベース表の変更
3.アナログ破壊データベーステーブル
4.バックアップステータスのリストア(データベースへのリストア時進数ユーザーアクセス)iptables
5.最新位置状態に戻す
6.オープンユーザーアクセスデータベース
シミュレーションシーン2:日曜日のバックアップ、月曜日の午前10時に削除され、10時10分に問題を発見し、修復を開始
バックアップとリカバリ
注:バイナリ・ログ・ファイルは、データ・ファイルと同じディスクに置くべきではありません.
バックアップツール
cp tarバックアップ
すべてコピー:
1.
tar Jcvf /data/mysql.bak.tar.xz /var/lib/mysql/
2.
systemctl stop mariadb
3.
cd /var/lib/mysql/
rm -rf *
4.
scp -rp /data/mysql.bak.tar.xz 192.168.32.17:/data
5.
tar xf /data/mysql.bak.tar.xz
6. ( , ,,,,,,,, )
mv * /var/lib/mysql
7.
systemctl start mariadb
##LVMバックアップLVMのバックアップ(1)要求に基づいてすべてのテーブルmysql>FLUSH TABLES WITH READ LOCKをロックする;(2)バイナリログファイル及びイベント位置mysql>FLUSH LOGSを記録する.mysql> SHOW MASTER STATUS; mysql-e‘SHOW MASTER STATUS’>/PATH/TO/SomeEFILE(3)スナップショットlvcreate-L#-s-pr-n NAME/DEP/VG_を作成NAME/LV_NAME(4)ロック解除mysql>UNLOCK TABLES;(5)スナップショットボリュームをマウントし、データバックアップを実行する(6)バックアップが完了した後、スナップショットボリュームを削除する(7)ポリシーを制定し、元のボリュームからバイナリログをバックアップする
一、準備
1.
fdisk /dev/sda
p-n-t(8e)
partprobe
pvcreate /dev/sda6
vgcreate vg_data /dev/sda6
lvcreate -n mysqldata -L 2G vg_data
lvcreate -n binlog -L 4G vg_data
mkfs.xfs /dev/vg_data/mysqldata
mkfs.xfs /dev/vg_data/binlog
2.
mkdir /vg_data/{binlong,mysqldata} -pv
mount /dev/vg_data/binlog /vg_data/binlog/
mount /dev/vg_data/mysqldata /vg_data/mysqldata/
3. ,
vim /etc/my.cnf
[mysqld]
datadir=/vg_data/mysqldata
log_bin=/vg_data/binlog/mysql-bin
chown -R mysql.mysql /vg_data/
4.
systemctl restart mariadb
reset master;
show master logs;
二、データベースのロック、スナップショットの開始
mysql -e 'flush tables with read lock'
mysql -e 'show master logs' > /root/bin.log
cat bin.log 7697
lvcreate -s -n snap_mysql -L 1G /dev/vg_data/mysqldata -p r ( )
mysql -e 'unlick tables'
三、スナップショットの内容をコピーする
lvs ,
mount /dev/vg_data/snap_mysql /mnt , UUID
mount -o nuuid,norecovery /dev/vg_data/snap_mysql /mnt
cp -av /mnt/* /data/test
lvremove /dev/vg_data/snap_mysql
四、バイナリログで、スナップショット後の修正操作を最新に復元する
mysql -e 'show binary logs'
cat /root/bin.log 7697
mysqlbinlog --start-position=7696 mysql-bin.000001 > /root/binlog.sql
mysqlbinlog mysql-bin.000002 >> /root/binlog.sql
mysql
>set sql_log_bin=off;
>source /root/binlog.sql;
>set sql_log_bin-on;
バックアップとリカバリ
mysqldump hellodb > /data/hellodb_bak.sql
sql
mysql -e 'create database hi'
mysql hi < /data/hellodb_bak.sql
: : , , , ,
mysqldumpの一般的なオプション:
-A,--all-databases create databaseを含むすべてのデータベースをバックアップ
mysqldump -A > /data/all`data +%F`.sql
-B , --databases db_name...create database文を含むバックアップのデータベースを指定します.
mysqldump -uroot -pdushan -B hellodb > /data/bak_B.sql
helloddb ,
mysqldump -uroot -pdushan -B hellodb |gzip > /data/bak_B.sql.gz
mysqldump -uroot -pdushan -B hellodb |xz > /data/bak_B.sql.xz
unxz bak_B.sql.xz
xz -d bak_B.sql.xz
-E,--events:関連するすべてのevent schedulerをバックアップ
-R,--routines:すべてのストレージ・プロシージャとカスタム関数をバックアップ
-triggers:バックアップテーブル関連トリガ、デフォルト有効、-skip-triggers、バックアップトリガなし
-default-character-set=utf 8指定文字セット
-master-data[=#]:このオプションはバイナリログ1を有効にする必要があります:バックアップされたデータの前にCHANGE MASTER TO文として記録する2:注釈として記録されたCHANGE MASTER TO文このオプションは自動的にオフになります–lock-tables機能は自動的にオンになります-x|--lock-all-tables機能は自動的にオンになります-single-transaction
mysqldum -A --master-data=2 >all.sql
, 2, ,1
-F,--flush-logs:バックアップ前にログをスクロールし、テーブルをロックした後、flush logsコマンドを実行し、新しいバイナリログファイルを生成し、-Aまたは-Bオプションに合わせると、複数のデータベースがリフレッシュされます.ダンプとログのリフレッシュは、-single-transactionまたは-x、-master-dataとともに使用することで実現することを推奨します.この場合、ログは1回のみリフレッシュされます.
-compactコメントを削除し、デバッグに適し、生産は使用しない
-d,--no-dataテーブル構造のみバックアップ
-t,--no-create-infoはデータのみをバックアップし、create tableをバックアップしない
-n,–no-create-dbはcreate databaseをバックアップせず、-Aまたは-Bで上書き可能
-flush-privileges mysqlまたは関連するバックアップに使用する必要があります
-f,--force SQLエラーを無視して実行を続行
-hex-blobは16進記号を使用してバイナリ列をダンプし、BINARY、VARRBINARY、BLOB、BITのデータ型を含む列がある場合に使用し、文字化けしないようにする
-q,--quickはクエリーをキャッシュせず、直接出力し、バックアップ速度を速める
MyISAMエンジンのバックアップオプション:
温備をサポートする.ホット・スペアはサポートされていません.バックアップするライブラリをロックしてから、バックアップ・オペレーションのロック方法を起動する必要があります.
-x,–lock-all-tables:グローバル・リード・ロックを追加し、すべてのライブラリのすべてのテーブルをロックします.また、-single-transactionまたは-lock-tablesオプションを追加すると、このオプション機能が閉じます.注意:データ量が多い場合、データベースに同時にアクセスできない場合があります.
-l,–lock-tables:バックアップが必要なデータベースごとに、バックアップを開始する前にすべてのテーブルをロックします.デフォルトはonです.-skip-lock-tablesオプションは無効になります.MyISAMをバックアップする複数のライブラリでは、データが一致しない可能性があります.
注意:上記のオプションはInnoDB表と同様に有効で、温備を実現しますが、推奨しません.
##InnoDBバックアップオプションはホットスペアをサポートし、ホットスペアは使用可能だが推奨しない
–single-transaction
このオプションInnodbでは推奨されています.MyISAMは適用されません.このオプションはバックアップを開始する前に、START TRANSACTIONコマンドを実行してトランザクションをオープンします.
このオプションは、すべてのテーブルを単一のトランザクションにダンプすることで、一貫したスナップショットを作成します.マルチバージョン制御をサポートするストレージエンジンに格納されているテーブルにのみ適用されます(現在はInnoDBのみ可能).ダンプは、他のストレージエンジンと一致することを保証しません.単一トランザクションのダンプを行う場合、有効なダンプ・ファイル(正しいテーブル・コンテンツとバイナリ・ログの場所)を確保するには、ALTER TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLEのオプションと–lock-tables(コミット保留中のトランザクションを含む)のオプションは互いに反発します.
大規模なテーブルをバックアップする場合は、–single-transactionオプションと–quickを組み合わせて使用することをお勧めします.
データベース・スクリプトのライブラリ・バックアップ
, :
mysql -e 'show databases' |cat
:
mysql -e 'show databases'| grep -Ev '^Database|info|performanc
一、while...doバックアップデータベース
mysql -e 'show databases'| grep -Ev '^Database|info|performanc'|while read dbname;do mysqldump -B $dbname | gzip > /data/${dbname}_bak`date +%F` .gz;done
二、sedバックアップデータベース
: , sed/// , / @
mysql -e 'show databases' | grep -Ev '^Database|info| performanc' |sed -r 's@(.*)@mysqldump -B \1| gzip > /data/\1_bak`date +F%`.gz@' |bash
三、for...inバックアップデータベース
for db in `mysql -e 'show databases'| grep -Ev '^Database|info|performanc'`;do mysqldump -B $db | gzip > /data/&{db}_bak`date +%F.gz;done
!!スクリプトをbashに直接実行するには
cat f1.sh |bash
本番環境の実戦バックアップポリシー
mysqldump –uroot –A –F –E –R --single-transaction --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob >$BACKUP/fullbak_$BACKUP_TIME.sql
mysqldump –uroot –A –F –E –R –x --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob >$BACKUP/fullbak_$BACKUP_TIME.sql
実戦練習
一、初期状態を復元する
1. ,
[root@dushan7 ~]vim /etc/my.cnf
[mysqld]
log-bin=/data/binlog/mysql-bin
datadir=/var/lib/mysql
2. ,
[root@dushan7 ~]#mkdir /data/binlog
[root@dushan7 ~]#chown mysql.mysql /data/binlog/
3.
[root@dushan7 ~]#systemctl restart mariadb
4. mysql ,
mysql> show master logs;
[root@dushan7 ~]#ll /var/lib/mysql/
[root@dushan7 ~]#cd /var/bin/mysql/
[root@dushan7 ~]#rm -f *bin*
5.
[root@dushan7 ~]#systemctl restart mariadb
二、バックアップリストア1.バックアップの開始
mysqldump -A -F --single-transaction -- master-data=2 --hex-blob |gzip > /data/all_`date +%F`.sql.gz
2.データベース表の変更
mysql>insert teachers values (1,'a',30,'F');
mysql>insert teachers values (6,'b',49,'F');
3.アナログ破壊データベーステーブル
systemctl stop mariadb
rm -rf /var/lib/mysql/*
4.バックアップステータスのリストア(データベースへのリストア時進数ユーザーアクセス)iptables
, mysql, ,
systemctl start mariadb
gzip -d all.sql.gz
mysql>set sql_log_bin=off;
mysql>source /data/all.sql;
5.最新位置状態に戻す
, ,
grep "CHANGE MASTER" /data/all.sql position mysql-bin.00002 245
cd /data/binlog/
mysqlbinlog --start-position=245 mysql-bin.000002 > incr.sql
mysqlbinlog --start-position=245 mysql-bin.000003 >> incr.sql
!!!!
less incr.sql
, , ,
mysql>set sql_log_bin=off
mysql>source /data/binlog/incr.sql
mysql>set sql_log_bin=on
mysql>select * from teachers;
6.オープンユーザーアクセスデータベース
シミュレーションシーン2:日曜日のバックアップ、月曜日の午前10時に削除され、10時10分に問題を発見し、修復を開始
1.
mysqldum -A -F --single-transaction --smaster-data=2 |gzip >/data/all.sql.gz
2.
4. 10:00
drop table testlog
5. 10:00-10:10
6. ,
mysql>flush tables with read lock;
( , )
7.
systemctl stop mariadb
rm-rf /var/lib/mysql/*
systemctl start mariadb
gzip -d /data/all.sql.gz
mysql
>set sql_log_bin=off
>source /data/all.sql;
8. , drop table
grep -i "change master" /data/all.sql 245 mysql-bin.000002
mysqlbinlog --start-position=245 mysql-bin.000002 > /data/incr.sql
vim /data/incr.sql
drop table ,
mysqlbinlog --start-position=245 mysql-bin.000003>> /data/incr.sql
mysqlbinlog --start-position=245 mysql-bin.000004>> /data/incr.sql
9.
mysql
>set sql_log_bin=off;
>source /data/incr.sql;
>set sql_log_bin=on;
10.
11.