1. 程式人生 > 實用技巧 >VUE 元件間通訊

VUE 元件間通訊

一、錯誤日誌

1.錯誤日誌預設是開啟的
2.預設儲存 $datadir 下面,預設的名字是 '主機名'.err
3.檢視錯誤日誌
	[root@db01 ~]# mysql -uroot -p -e "show variables like 'log_error'"
4.配置錯誤日誌
	[root@db01 ~]# vim /etc/my.cnf
	[mysqld]
	log_error=/usr/local/mysql/data/mysql.err

二、一般查詢日誌

1.一般查詢日誌預設是關閉的
2.預設儲存 $datadir 下面,預設的名字是 '主機名'.log
3.檢視一般查詢日誌
	[root@db01 ~]# mysql -uroot -p -e "show variables like 'general%'"
4.配置一般查詢日誌
	[root@db01 ~]# vim /etc/my.cnf
	general_log=on
	general_log_file=/usr/local/mysql/data/db01.log

三、二進位制日誌

1.二進位制日誌管理

1)開啟二進位制日誌

[root@db01 ~]# vim /etc/my.cnf
[mysqld]
server_id=1				#mysql5.6中可以不加,但是mysql5.7中必須加
log_bin=mysql-bin		#mysql5.6中可以寫log-bin和log_bin,但是mysql5.7只能寫log_bin

2)檢視二進位制日誌

#物理檢視
[root@db01 ~]# ll /usr/local/mysql/data/
-rw-rw---- 1 mysql mysql      665 10月 30 20:14 mysql-bin.000001
-rw-rw---- 1 mysql mysql       19 10月 30 20:07 mysql-bin.index

#資料命令檢視
[root@db01 ~]# mysql -uroot -p -e "show variables like 'log_bin'"
[root@db01 ~]# mysql -uroot -p -e "show binary logs"
Enter password: 
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       665 |
+------------------+-----------+

3)生成新的binlog

1.重啟資料庫
2.重新整理binlog  flush logs
3.二進位制日誌達到1G,預設會生成新的binlog
	[root@db01 ~]# mysql -uroot -p123 -e "show variables like '%binlog_size%'"
	+-----------------+------------+
	| Variable_name   | Value      |
	+-----------------+------------+
	| max_binlog_size | 1073741824 |
	+-----------------+------------+

4)刪除binlog

1.原則:
	1)在儲存能力範圍內,能多保留則多保留
	2)基於上一次全備前的可以選擇刪除

2.刪除七天前的資料
	1)臨時生效
	SET GLOBAL expire_logs_days = 7;
	2)永久生效
	[root@db01 data]# vim /etc/my.cnf
	[mysqld]
	expire_logs_days = 7
	
3.只保留三天的binlog
	PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;

3.刪除指定binlog之前的所有binlog
	PURGE BINARY LOGS TO 'mysql-bin.000010';

4.使用reset master,重置binlog
	mysql> reset master; 

2.二進位制日誌的作用

1.記錄已提交的DML事務語句,並拆分為多個事件(event)來進行記錄
2.記錄所有DDL、DCL等語句
3.總之,二進位制日誌會記錄所有對資料庫發生修改的操作

#作用:
1.資料庫備份
2.資料庫恢復
3.資料庫複製

#如果我擁有資料庫搭建開始所有的二進位制日誌,那麼我可以把資料恢復到任意時刻

1)事件的介紹

1.在binlog中最小的記錄單元為event
2.一個事務會被拆分成多個事件(event)

#事件(event)特性
1.每個event都有一個開始位置(start position)和結束位置(stop position)
2.所謂的位置就是event對整個二進位制的檔案的相對位置
3.對於一個二進位制日誌中,前120個position是檔案格式資訊預留空間
4.MySQL第一個記錄的事件,都是從120開始的。

3.二進位制日誌資料恢復操作

1)建立原始資料

#1.檢視binlog資訊
mysql> show master status;

#2.建立庫
mysql> create database binlog;

#3.建立表
mysql> use binlog;
mysql> create table binlog(id int);

#4.插入資料
mysql> insert binlog values(1),(2),(3);

#5.檢視資料
mysql> select * from binlog;

2)誤刪除資料庫

#刪除資料庫
mysql> drop database binlog;

3)恢復資料

#1.檢視binlog找到起始位置點和結束位置點
[root@db01 ~]# mysqlbinlog /usr/local/mysql/data/mysql-bin.000002

#2.取出位置點之間的語句匯出sql
[root@db01 ~]# mysqlbinlog --start-position=120 --stop-position=548 /usr/local/mysql/data/mysql-bin.000002 > /tmp/binlog.sql

#3.將資料重新倒回資料庫
[root@db01 ~]# mysql -uroot -p < /tmp/binlog.sql
Enter password: 123

#4.回到資料庫檢視資料

4.二進位制日誌的工作模式

1)檢視二進位制日誌工作模式

#檢視
[root@db01 ~]# mysql -uroot -p -e "show variables like 'binlog_format'"
Enter password: 
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+

#工作模式:
1.STATEMENT  語句模式
2.row		行級模式		#企業推薦模式
3.混合模式

2)STATEMENT 語句模式

STATEMENT 語句模式 mysql5.6 預設的模式

[root@db01 ~]# mysqlbinlog /usr/local/mysql/data/mysql-bin.000002
... ...
create database binlog
/*!*/;
# at 220
... ...
create table binlog(id int)
/*!*/;
# at 325
... ...
BEGIN
/*!*/;
# at 408
... ...
insert binlog values(1),(2),(3)
/*!*/;
# at 517
... ...
COMMIT/*!*/;
# at 548
... ...
drop database binlog
... ...

#優缺點:
	1.不嚴謹,不安全
	2.語句容易理解
	3.日誌檔案相較於row模式比較小,不會佔用太多的磁碟空間

3)行級模式 row模式

行級模式 row模式 mysql5.7 預設的模式

#1.配置資料庫binlog為row模式
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
server_id=1
log_bin=mysql-bin
binlog_format=row

[root@db01 ~]# mysqlbinlog /usr/local/mysql/data/mysql-bin.000003 
# at 120
... ...
create database row
/*!*/;
# at 211
... ...
use `row`/*!*/;
... ...
create table row(id int)
# at 307
... ...
BEGIN
# at 378
... ...
# at 423
... ...
BINLOG '
YGKfXxMBAAAALQAAAKcBAAAAAEYAAAAAAAEAA3JvdwADcm93AAEDAAEhwVV2
YGKfXx4BAAAAMgAAANkBAAAAAEYAAAAAAAEAAgAB//4BAAAA/gIAAAD+AwAAADOknRQ=
'/*!*/;
# at 473
... ...
COMMIT/*!*/;
... ...

#檢視row模式的binlog命令
[root@db01 ~]# mysqlbinlog --base64-output=decode-rows -vvv /usr/local/mysql/data/mysql-bin.000003
... ...
BEGIN
/*!*/;
# at 378
#201102  9:35:28 server id 1  end_log_pos 423 CRC32 0x7655c121 	Table_map: `row`.`row` mapped to number 70
# at 423
#201102  9:35:28 server id 1  end_log_pos 473 CRC32 0x149da433 	Write_rows: table id 70 flags: STMT_END_F
### INSERT INTO `row`.`row`
### SET
###   @1=1 /* INT meta=0 nullable=1 is_null=0 */
### INSERT INTO `row`.`row`
### SET
###   @1=2 /* INT meta=0 nullable=1 is_null=0 */
### INSERT INTO `row`.`row`
### SET
###   @1=3 /* INT meta=0 nullable=1 is_null=0 */
# at 473
#201102  9:35:28 server id 1  end_log_pos 504 CRC32 0xc25f74b1 	Xid = 16
COMMIT/*!*/;
... ...

#分析
update binlog.binlog_table
set
@1=22 --------->@1表示binlog_table中的第一列,集合表結構就是id=22
where
@1=2  --------->@1表示binlog_table中的第一列,集合表結構就是id=2

#優缺點:
	1.嚴謹,安全
	2.語句不容易理解
	3.日誌檔案相較於STATEMENT模式比較大,比較佔用磁碟空間

5.資料庫資料恢復

#日常全備
[root@db01 ~]# mysqldump -uroot -p123 -A > /tmp/full.sql

#新的一天寫入資料
[root@db01 ~]# mysql -uroot -p123
mysql> use row
mysql> insert row values(5);
mysql> insert row values(6);
mysql> insert row values(7);
mysql> update row set id=100 where id=3;
mysql> select * from row;
+------+
| id   |
+------+
|    1 |
|    2 |
|  100 |
|    5 |
|    6 |
|    7 |
+------+
6 rows in set (0.00 sec)

#刪庫
mysql> drop database row;

#先查詢新一天binlog的起始位置點和結束位置點
[root@db01 ~]# mysql -uroot -p123 -e "show binlog events in 'mysql-bin.000003'" | grep drop
[root@db01 ~]# mysql -uroot -p123 -e "show binlog events in 'mysql-bin.000003'" | grep 'create table'
[root@db01 ~]# mysqlbinlog --start-position=307 --stop-position=504 /usr/local/mysql/data/mysql-bin.000003 > /tmp/huifu.sql
[root@db01 ~]# mysqlbinlog --start-position=785 --stop-position=1539 /usr/local/mysql/data/mysql-bin.000003 > /tmp/huifu2.sql

#資料恢復
[root@db01 ~]# mysql -u root -p < /tmp/full.sql 
Enter password:
[root@db01 ~]# mysql -uroot -p < /tmp/huifu.sql 
Enter password: 
[root@db01 ~]# mysql -uroot -p < /tmp/huifu2.sql 
Enter password:

#檢視資料

四、結合binlog進行資料庫升級

#1.準備一臺新機器搭建資料庫,同步binlog模式
[root@db02 ~]# vim /etc/my.cnf
[mysqld]
binlog_format=row
[root@db02 ~]# systemctl start mysqld
#2.將舊的資料庫資料匯出
[root@db01 ~]# mysqldump -uroot -p -B mysql > /tmp/mysql.sql
Enter password: 
[root@db01 ~]# mysqldump -uroot -p -B binlog events row world --master-data=2 > /tmp/full.sql
Enter password:
#3.將舊庫匯出的sql傳輸到新庫
[root@db01 ~]# scp /tmp/mysql.sql 172.16.1.52:/tmp/
[root@db01 ~]# scp /tmp/full.sql 172.16.1.52:/tmp/
#4.模擬新資料寫入舊庫
mysql> use binlog;
mysql> insert binlog values(1000);
#5.新庫匯入資料
[root@db02 ~]# mysql < /tmp/mysql.sql
[root@db02 ~]# mysql -e "flush privileges"
[root@db02 ~]# sed -i s#MyISAM#InnoDB#g /tmp/full.sql
[root@db02 ~]# mysql -uroot -p < /tmp/full.sql
#6.檢視新庫資料
mysql> use binlog;
mysql> select * from binlog;
#7.把業務切換到新庫
#8.匯出切換過程中新產生的資料
[root@db01 ~]# mysqlbinlog --start-position=316 --stop-position=1100 /usr/local/mysql/data/mysql-bin.000001 > /tmp/new.sql
#9.將新資料的sql推送到新庫
[root@db01 ~]# scp /tmp/new.sql 172.16.1.52:/tmp
#10.將新資料匯入新庫
[root@db02 ~]# mysql -uroot -p123 < /tmp/new.sql

五、慢查詢日誌(慢日誌)

1.慢日誌的作用

1.是將mysql伺服器中影響資料庫效能的相關SQL語句記錄到日誌檔案
2.通過對這些特殊的SQL語句分析,改進以達到提高資料庫效能的目的

2.配置慢日誌

[root@db01 ~]# vim /etc/my.cnf
[mysqld]
#指定是否開啟慢查詢日誌
slow_query_log = 1
#指定慢日誌檔案存放位置(預設在data)
slow_query_log_file=/usr/local/mysql/data/slow.log
#設定慢查詢的閥值(預設10s)
long_query_time=5

#不使用索引的慢查詢是否記錄到日誌
log_queries_not_using_indexes
#查詢檢查返回少於該引數指定行的SQL不被記錄到慢查詢日誌
min_examined_row_limit=100(雞肋)

3.測試慢查詢日誌

#複製建立一個新表
mysql> use world;
mysql> create table t1 select * from city;

#反覆插入資料
mysql> insert t1 select * from t1;
mysql> insert t1 select * from t1;
mysql> insert t1 select * from t1;
mysql> insert t1 select * from t1;
mysql> insert t1 select * from t1;

#檢視慢日誌
[root@db01 ~]# less /usr/local/mysql/data/slow.log 
[root@db01 ~]# mysqldumpslow -s c -t 10 /usr/local/mysql/data/slow.log
-s: 是表示按照何種方式排序,c、t、l、r分別是按照記錄次數、時間、查詢時間、返回的記錄數來排序,ac、at、al、ar,表示相應的倒敘;
-t: 是top n的意思,即為返回前面多少條的資料;
-g: 後邊可以寫一個正則匹配模式,大小寫不敏感的;