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
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;"