MySQLデータベースのログ管理、バックアップ、およびリカバリ

1つは、MySQLログ管理です。

MySQLのデフォルトのログ保存場所は/ usr / local / mysql / dataです

ログを開くには2つの方法があります。

  • 構成ファイルまたはコマンドを使用
  • コマンドの変更によって開かれたログは一時的なものであり、サービスを閉じるか再起動すると閉じられます
(1)MySQLの常用対数の種類と開始

エラーログ
MySQLの起動、停止、または実行時に発生するエラーメッセージを記録するために使用されます。デフォルトで有効になっています。

指定日志的保存位置和文件名
log-error=/usr/local/mysql/data/mysql_error.log	

一般的なクエリログ
MySQLのすべての接続とステートメントを記録するために使用され、デフォルトで閉じられます

general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log

バイナリログ(binlog)
MySQLの起動、停止、または実行時に送信されるすべてのエラーメッセージを記録するために使用され、デフォルトで閉じられます

log-bin=mysql-bin / log_bin=mysql-bin

遅いクエリログ
実行時間がlong_query_time秒を超えるすべてのステートメントを記録するために使用されます。最適化のために実行時間が長いクエリステートメントを見つけることができます。デフォルトは閉じています。

slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5	   		

systemctl restart mysqld    

2、ログステータス

一般的なクエリログが有効になっているかどうかを確認します

show variables like 'general%';

ここに画像の説明を挿入
バイナリログがオンになっているかどうかを確認します

show variables like 'log_bin%';

ここに画像の説明を挿入
遅いクエリ日機能が有効になっているかどうかを確認します

show variables like '%slow%';	

ここに画像の説明を挿入
遅いクエリ時間の設定を表示する

show variables like 'long_query_time';

ここに画像の説明を挿入
データベースで低速クエリを開始する方法を設定します

set global slow_query_log=ON;
该方法重启服务失效

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

(1)データバックアップの重要性
  • バックアップの主な目的は災害復旧です
  • 本番環境では、データのセキュリティが重要です
  • データの損失は深刻な結果をもたらす可能性があります

データ損失の理由:

  • プログラムエラー
  • ヒューマンエラー
  • 操作エラー
  • ディスク障害
  • 災害(火災、地震、盗難など)
(2)データベースバックアップの分類

物理バックアップ:データベースオペレーティングシステムの物理ファイル(データファイル、ログファイルなど)のバックアップ

物理バックアップ方法:
コールドバックアップ(オフラインバックアップ):データベースが閉じているときに実行されます。
ホットバックアップ(オンラインバックアップ):データベースは実行中であり、データベースログファイルに依存します。
ウォームバックアップ:データベースロックテーブル(書き込みはできませんが、できます読み取り状態でのバックアップ操作であること)

論理バックアップ:データベース論理コンポーネント(テーブルやその他のデータベースオブジェクトなど)のバックアップ

データベースのバックアップ戦略の観点から、バックアップは次のように分類できます。
完全バックアップ:毎回データベースの完全バックアップを作成します

完全バックアップは、データベース全体、データベース構造、およびファイル構造のバックアップです。
保存されるのは、バックアップが完了したときのデータベースです。これは、差分バックアップと増分バックアップの基礎です。基礎に相当します。

差分バックアップ:最後の完全バックアップ以降に変更されたファイルをバックアップします

増分バックアップ:最後の完全バックアップまたは増分バックアップの後に変更されたファイルのみがバックアップされます

3つの一般的なバックアップ方法

物理的なコールドスタンバイ

データベースはバックアップ中に閉じられ、データベースファイルは直接パッケージ化されます。バックアップ速度は高速です。これはMySQLデータベースを閉じる最も簡単な方法でもあります。tarコマンドを使用してデータベースフォルダを直接パッケージ化し
、既存のMySQL直接置き換えます。ディレクトリ。

バックアップツールmydumpまたはmysqlhotcopy

mysqldumpは一般的に使用される論理バックアップツールです。MySQLに付属のバックアップツールはMySQLのバックアップを実現できます。指定したライブラリとテーブルをSQLスクリプトとしてエクスポートできます。
コマンドmysqlを使用してバックアップデータをインポートします。

mysqlhotcopyにはバックアップmyisamとアーカイブテーブルしかありません

増分バックアップのバイナリログを開始します

増分バックアップの場合、バイナリログを更新する必要があります

サードパーティツールのバックアップ

無料のMySQLホットバックアップソフトウェアPerconaXtraBackup

4、MySQLの完全なバックアップとリカバリ

mysql -u root -p
create database wahaha;
use wahaha;
create table if not exists wa1 (
id int(4) not null auto_increment,
name varchar(10) not null,
sex char(10) not null,
hobby varchar(20),
primary key (id));

insert into wa1 values(1,'u1','male','run');
insert into wa1 values(2,'u2','female','sing');

ここに画像の説明を挿入

(1)MySQLの完全バックアップ

InnoDBストレージエンジンのデータベースは、db.opt(テーブル属性ファイル)、テーブル名.frm(テーブル構造ファイル)、テーブル名.ibd(テーブルデータファイル)の3つのファイルとしてディスクに保存されます。

物理的なコールドバックアップとリカバリ

systemctl stop mysqld
yum -y install xz

圧縮バックアップ

tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/

解凍して復元

tar Jxvf /opt/mysql_all_2021-1-30.tar.xz -C /usr/local/mysql/data

systemctl restart mysql
(2)mysqldumpのバックアップとリカバリ

1つ以上の完全なライブラリ(すべてのテーブルを含む)の完全バックアップ

mysqldump -u root -p [password] --databases library name 1 [libraryname2]…> / backup path / backup file name.sql#exported
はデータベーススクリプトファイルです

mysqldump -uroot -p123123 --databases wahaha > /opt/wahaha.sql
mysqldump -uroot -p123123 --databases mysql wahaha > /opt/mysql-wahaha.sql

Q ==、size_16、color_FFFFFF、t_70)

MySQLサーバー内のすべてのライブラリを完全にバックアップします

mysqldump -u root -p [password] --all-databases> / backup path / backup file name.sql

mysqldump -u root -p123123 --all-databases > /opt/all.sql

ここに画像の説明を挿入
指定されたライブラリ内のいくつかのテーブルの完全バックアップ

mysqldump -u root -p [password]ライブラリ名[テーブル名1] [テーブル名2]…> / backup path / backup file name.sql

mysqldump -uroot -p123123 wahaha wa1 > 	/opt/wahaha_wa1.sql

#使用“-d”选项,说明只保存数据库的表结构
#不使用“-d”选项,说明表数据也进行备份

ここに画像の説明を挿入
バックアップファイルを表示する

cat wahaha_wa1.sql | grep -v "^--" /opt/wahaha_wa1.sql | grep -v "^/" | grep -v "^$"

ここに画像の説明を挿入

(3)完全なバックアップとリカバリ

データベースを復元する

mysql -uroot -p123123 -e 'drop database wahaha;'

#“-e”选项,用于指定连接 MySQL 后执行的命令,命令执行完后自动退出

mysql -uroot -p123123 -e 'SHOW DATABASES;'

mysql -uroot -p123123 < /opt/wahaha.sql

mysql -uroot -p123123 -e 'SHOW DATABASES;'

ここに画像の説明を挿入
データテーブルを復元する

mysql -uroot -p123123 -e 'drop table wahaha.wa1;'

mysql -uroot -p123123 -e 'show tables from wahaha;'

mysql -uroot -p123123 wahaha < /opt/wahaha_wa1.sql

mysql -uroot -p123123 -e 'show tables from wahaha;'

ここに画像の説明を挿入

5、MySQLインクリメンタルバックアップとリカバリ

(1)MySQL増分バックアップ

バイナリログ機能を有効にする

vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED				
server-id = 1

ここに画像の説明を挿入
毎週データベースまたはテーブルの完全バックアップ

毎週のバックアップの場合、完了する計画を作成するには、スケジュールされたタスクcrontab-eが必要です。

mysqldump -uroot -p123123 wahaha wa1 > /opt/wahaha_wa1_$(date +%F).sql

mysqldump -uroot -p123123 --all-databases wahaha > /opt/wahaha_$(date +%F).sql

増分バックアップ操作を毎日実行して、新しいバイナリログファイルを生成できます

mysqladmin -uroot -p123123 flush-logs

ここに画像の説明を挿入
新しいデータを挿入して、データの増加または変更をシミュレートします

mysql -uroot -p123123
use wahaha;
insert into wa1 values(3,'u3','male','game');
insert into wa1 values(4,'u4','female','reading');

ここに画像の説明を挿入
新しいバイナリログファイルを再度生成します

更新後に新しく生成されたファイルが現在使用され、前のレコードが前のファイルに保存されます

mysqladmin -uroot -p123123 flush-logs

ここに画像の説明を挿入
バイナリログファイルの内容を表示する

cp /usr/local/mysql/data/mysql-bin.000002 /opt/
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002

#- -base64-output=decode-rows:使用64位编码机制去解码并按行读取
#-v:显示详细内容

ここに画像の説明を挿入

(2)MySQLの増分バックアップとリカバリ

一般的な回復

#模拟丢失更改的数据的恢复步骤
mysql -uroot -p123123
use wahaha;
delete from wa1 where id=3;
delete from wa1 where id=4;
select * from wa1;
quit

mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -uroot -p123123
mysql -uroot -p123123 -e "select * from wahaha.wa1;"

ここに画像の説明を挿入
ロケーションベースのリカバリ

mysqlbinlog --no-defaults --stop-position = '位置番号' /opt/mysql-bin.000002 | mysql -uroot -p

mysqlbinlog --no-defaults --start-position = '位置番号' /opt/mysql-bin.000002 | mysql -uroot -p

mysqlbinlog --no-defaults --start-position = 'position number' --stop-position = 'position number' /opt/mysql-bin.000002 | mysql -uroot -p

mysql -uroot -p123123 -e "truncate table wahaha.wa1;"

mysql -uroot -p123123 -e "select * from wahaha.wa1;"

mysqlbinlog --no-defaults --stop-position='609' /opt/mysql-bin.000002 | mysql -uroot -p

mysql -uroot -p123123 -e "select * from SCHOOL.CLASS1;"

ここに画像の説明を挿入
ポイントインタイムリカバリ

22:03:09より前のデータのみを復元します。つまり、「user4」のデータは復元しません。

例:最初にテーブルwa1をクリアして、実験を容易にします

mysql -uroot -p123123 -e "truncate table wahaha.wa1;"
mysql -uroot -p123123 -e "select * from wahaha.wa1;"

mysqlbinlog --no-defaults --stop-datetime='2021-01-30 22:03:09' /opt/mysql-bin.000002 |mysql -uroot -p123123
mysql -uroot -p123123 -e "select * from wahaha.wa1;"

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_51468875/article/details/113431603