日志管理
1.錯(cuò)入日志
1.1:作用
mysql啟動(dòng)及工作過程中,狀態(tài)/報(bào)錯(cuò)/警告。
1.2怎么配置?
mysql> select @@log_error;
默認(rèn)是在datedir=/data/3306/data/hostname.err
####################
vim /etc/my.cnf
log_error=/data/3306/data/mysql.log
重啟生效
1.3如何查看錯(cuò)誤日志
查看ERROR的上下文
2:二進(jìn)制日志
2.1作用
數(shù)據(jù)恢復(fù)必備日志
主從復(fù)制依賴的日志
2.2怎么配置
2.2.1修改配置文件
vim /etc/my.cnf
server_id=6
log_bin=/data/binlog/mysql-bin
###先別重啟
###先創(chuàng)建目錄并授權(quán)
mkdir -p /data/binlog -p
chown -R mysql.mysql /data/*
###然后重啟數(shù)據(jù)庫
#######################
查看二級(jí)制數(shù)據(jù)庫的命令
mysqlbinlog mysql-bin.000001
2.3
二進(jìn)制日志記錄了什么?
除了查詢類的語句,都會(huì)記錄
索引數(shù)據(jù)庫變更類的語句
2.3.1記錄語句的種類
DDL 數(shù)據(jù)定義語言
DCL 數(shù)據(jù)控制語言
DML 數(shù)據(jù)操作語言
2.3.2不同語句的記錄格式說明
select @@binlog_format;
###默認(rèn)模式是row
DDL,DCL:直接以語句(statement)方式記錄
DML語句:insert update delete
SBR : statement ,做什么記錄什么
RBR : row 記錄數(shù)據(jù)行的變化
MBR : mixed 自動(dòng)判斷記錄模式
######################
SBR和RBR的區(qū)別
SBR:statement , 做什么記錄什么,記錄的就是SQL。可讀性強(qiáng),日志量相對(duì)較少。日志記錄可能不準(zhǔn)確
RBR:記錄數(shù)據(jù)行的變化,默認(rèn)模式,也是我們推薦的,可讀性差,日質(zhì)量多。日志記錄準(zhǔn)確
2.3.3 binlog events (二進(jìn)制日志時(shí)間)
1 簡(jiǎn)介
二進(jìn)制日志內(nèi)容以事件為最小記錄單元
對(duì)于DDL和DCL,一個(gè)DDL語句就是一個(gè)事件。
對(duì)于DML(標(biāo)準(zhǔn)的事務(wù)語句):只記錄已提交的事務(wù)的DML語句
begin; 事件1
a 事件2
b 事件3
commit; 事件4
2事件的構(gòu)成
mysql[(none)]>create database oldgirl; # 創(chuàng)建一個(gè)庫
Query OK, 1 row affected (0.01 sec)
#################
mysqlbinlog /data/binlog/mysql-bin.000004 # 執(zhí)行命令
or
mysqlbinlog --base64-output=decode-rows -v /data/binlog/mysql-bin.000004
# at 219
#190814 18:46:51 server id 6 end_log_pos 322 CRC32 0xa98122ba Query thread_id=3 exec_time=0 error_code=0
create database oldgirl
# at 219 事件開始的位置(position)
#190814 18:46:51 事件發(fā)生的時(shí)間
end_log_pos 322 事件結(jié)束的位置(position)
create database oldgirl 事件內(nèi)容
2.3.4二進(jìn)制日志的基本查看
1查看二進(jìn)制日志的配置信息
``mysql> show variables like '%log_bin%';
+---------------------------------+------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------+
| log_bin | ON |
| log_bin_basename | /data/binlog/mysql-bin |
| log_bin_index | /data/binlog/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+------------------------------+
6 rows in set (0.00 sec)
`
#####2二進(jìn)制日志基本信息
show binary logs;
show master status ; 推薦
#####3查看二進(jìn)制日志的事件信息
show master status ;
show binlog events in 'mysql-bin.000001';
####2.4內(nèi)容查看和截取
#####2.4.1 內(nèi)容查看命令
簡(jiǎn)單查看
[root@db01 /data/binlog]# mysqlbinlog /data/binlog/mysql-bin.000003
人類可讀查看
[root@db01 /data/binlog]# mysqlbinlog --base64-output=decode-rows -vv /data/binlog/mysql-bin.000003
查詢幫助
[root@db01 /data/binlog]# mysqlbinlog --help
####################################
二進(jìn)制日志的截取
修改配置文件,并生效
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
secure-file-priv=/tmp
log_error=/data/3306/data/mysql.log
innodb_flush_method=O_DIRECT
server_id=6
log_bin=/data/binlog/mysql-bin
[mysql]
socket=/tmp/mysql.sock
prompt=mysql[\d]>
####################################
語法介紹
--start-position
--stop-position
語法:
mysqlbinlog --start-position=xxx --stop-position=xxx /data/binlog/mysql-bin.000005>/data/bin.sql
2.4.3 恢復(fù)日志演練
(1) 準(zhǔn)備數(shù)據(jù)(默認(rèn)自動(dòng)begin)
mysql[(none)]>create database binlog charset utf8mb4;
mysql[(none)]>use binlog;
mysql[binlog]>create table t1(id int)engine=innodb charset=utf8mb4;
mysql[binlog]>insert into t1 values(1),(2),(3);
mysql[binlog]>commit;
mysql[binlog]>insert into t1 values(11),(12),(13);
mysql[binlog]>commit;
mysql[binlog]>update t1 set id=10 where id>10;
mysql[binlog]>commit;
mysql[binlog]>select * from t1; #查詢表
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 10 |
| 10 |
| 10 |
+------+
6 rows in set (0.00 sec)
(2) 用來測(cè)試,直接刪庫
mysql[binlog]>drop database binlog;
mysql[(none)]>select * from t1;
ERROR 1046 (3D000): No database selected
(3) 數(shù)據(jù)恢復(fù)
- 確認(rèn)日志的起點(diǎn)和終點(diǎn)
mysql[(none)]>show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 | 1845 | | | |
+------------------+----------+--------------+------------------+-------------------+
mysql[(none)]>mysql[(none)]>show binlog events in 'mysql-bin.000005';
...
起點(diǎn):219
| mysql-bin.000005 | 219 | Query | 6 | 335 | create database binlog charset utf8mb4
...
終點(diǎn):1747
| mysql-bin.000005 | 1747 | Query | 6 | 1845 | drop database binlog
(4) 截取日志(命令行執(zhí)行)
[root@db01 ~]# mysqlbinlog --start-position=219 --stop-position=1747 /data/binlog/mysql-bin.000005>/data/bin.sql
[root@db01 ~]# ls /data/bin.sql
/data/bin.sql
(5) 恢復(fù)日志
mysql[(none)]>set sql_log_bin=0; 臨時(shí)關(guān)閉當(dāng)前會(huì)話的binlog記錄,不影響其他會(huì)話日志記錄
mysql[binlog]>source /data/bin.sql;
mysql[binlog]>set sql_log_bin=1;
(6) 查看恢復(fù)成功的庫
mysql[binlog]>show tables;
+------------------+
| Tables_in_binlog |
+------------------+
| t1 |
+------------------+
1 row in set (0.00 sec)
mysql[binlog]>select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 10 |
| 10 |
| 10 |
+------+
6 rows in set (0.00 sec)
mysqlbinlog -d binlog --start-position=219 --stop-position=1412 /data/binlog/mysql-bin.000006>/data/bin.sql
只過濾這個(gè)庫
##