MySQL 學習記錄系列(五)

目錄

1、MySql中常用工具

1.1、 mysql

1.2、mysqladmin

1.3、mysqlbinlog

1.4、mysqldump

1.5/mysqlimport/source

1.6、mysqlshow

2、Mysql日誌

2.1、錯誤日誌

2.2、二進制日誌

2.3、查詢日誌

2.4、慢查詢日誌


1、MySql中常用工具

1.1、 mysql

該mysql不是指mysql服務,而是指mysql的客戶端工具。

鏈接遠程的MySQL

mysql -h127.0.0.1 -P3306 -uroot -proot

命令行中執行SQL語句

mysql -uroot  -proot demo 03  -e "select * from tb_book";

1.2、mysqladmin

一個執行管理操作的客戶端程序。可以用它來檢查服務器的配置和當前狀態、創建並刪除數據庫等。

可以通過:mysqladmin  --help指令查看幫助文檔

1.3、mysqlbinlog

由於服務器生成的二進制日誌文件以二進制格式保存,所以如果想要檢查這些文本的文本格式,就會使用到mysqlbinlog日誌管理工具。

1.4、mysqldump

mysqldump 客戶端工具用來備份數據庫或在不同數據庫之間進行數據遷移。備份內容包含創建表,及插入表的SQL語句。

1.4.1、連接選項

1.4.2、輸出內容選項

示例:

mysqldump -uroot -proot test emp > C:\Users\phubing\Desktop\tb_book.sql

1.5/mysqlimport/source

mysqlimport 是客戶端數據導入工具,用來導入 mysqldump 加 -T 參數後導出的文本文件。

mysqlimport [options]  db_name textfilel [textfile2...]

mysqlimport -uroot -p2143 test /tmp/city.txt

如果需要導入sql文件,可以使用mysql中的source指令:

source/root/tb_book.sql

1.6、mysqlshow

mysqlshow 客戶端對象查找工具,用來很快地查找存在哪些數據庫、數據庫中的表、表中的列或者索引。

mysqlshow [options] [db_name  [table_name  [col_name] ] ]

 --count顯示數據庫及表的統計信息(數據庫,表均可以不指定)

-i顯示指定數據庫或者指定表的狀態信息

2、Mysql日誌

在任何一種數據庫中,都會有各種各樣的日誌,記錄着數據庫工作的方方面面,以幫助數據庫管理員追蹤數據庫曾經發生過的各種事件。MySQL也不例外,在MySQL中,有4種不同的日誌,分別是錯誤日誌、二進制日誌(BINLOG日誌)、查詢日誌和慢查詢日誌,這些日誌記錄着數據庫在不同方面的蹤跡。

2.1、錯誤日誌

錯誤日誌是MySQL中最重要的日誌之一,它記錄了當mysqld啓動和停止時,以及服務器在運行過程中發生任何嚴重錯誤時的相關信息。當數據庫出現任何故障導致無法正常使用時,可以首先查看此日誌。

該日誌是默認開啓的,默認存放目錄爲mysql的數據目錄(var/lib/mysql),默認的日誌文件名爲hostname.err(hostname是主機名)。

show variables like 'log_error%';

查看日誌內容

tail -f /var/1ib/mysql/xaxh-server.err

2.2、二進制日誌

2.2.1、概述

二進制日誌(BINLOG)記錄了所有的DDL(數據定義語言)語句和DML(數據操縱語言)語句,但是不包括數據查詢語句。此日誌對於災難時的數據恢復起着極其重要的作用,MySQL的主從複製,就是通過該binlog實現的。

二進制日誌,默認情況下是沒有開啓的,需要到MySQL的配置文件中開啓,並配置MySQL日誌的格式。

配置文件位置:/usr/my.cnf日誌存放位置:配置時,給定了文件名但是沒有指定路徑,日誌默認寫入Mysql的數據目錄。

vim /etc/my.cnf

log_bin=mysql_bin
binlog-format=Row
server-id=1

2.2.2、日誌格式

STATEMENT

該日誌格式在日誌文件中記錄的都是SQL語句(statement),每一條對數據進行修改的SQL都會記錄在日誌文件中,通過Mysql提供的mysqlbinlog工具,可以清晰的查看到每條語句的文本。

主從複製的時候,從庫(slave)會將日誌解析爲原文本,並在從庫重新執行一次。

ROW

該日誌格式在日誌文件中記錄的是每一行的數據變更,而不是記錄SQL語句。比如,執行SQL語句:update tb_book set status='1’,如果是STATEMENT日誌格式,在日誌中會記錄一行SQL文件;如果是ROW,由於是對全表進行更新,也就是每一行記錄都會發生變更,ROW格式的日誌中會記錄每一行的數據變更。

MIXED

這是目前MySQL默認的日誌格式,即混合了STATEMENT和ROW兩種格式。默認情況下采用STATEMENT,但是在一些特殊情況下采用ROW來進行記錄。MIXED格式能儘量利用兩種模式的優點,而避開他們的缺點。

2.2.3、日誌讀取

由於日誌以二進制方式存儲,不能直接讀取,需要用mysqlbinlog工具來查看,語法如下:

mysqlbinlog log-file;

查看STATEMENT格式日誌

執行插入語句:

insert into tb_book values(null, 'Lucene', '2088-05-01', '0");

mysqlbinlog mysqlbing.000001;

mysqlbin.index:該文件是日誌索引文件,記錄日誌的文件名;

mysqlbing.000001:日誌文件

查看ROW格式日誌

insert into tb_book values(nu1l,'Springcloud實戰’,‘2088-05-05’,‘0’);

如果日誌格式是ROW,直接查看數據,是查看不懂的;可以在mysqlbinlog 後面加上參數  -vv

mysqlbinlog -vv mysqlbin.000002

2.2.4、日誌刪除

對於比較繁忙的系統,由於每天生成日誌量大,這些日誌如果長時間不清楚,將會佔用大量的磁盤空間。

刪除日誌的常見方法:

方式一

通過Reset Master 指令刪除全部binlog日誌,刪除之後,日誌編號,將從xxxx.000001重新開始。

查詢之前,先查詢下日誌文件:

執行刪除日誌指令:

Reset Master

執行之後,查看日誌文件:

方式二

執行指令purge master logs to'mysqlbin.******’,該命令將刪除******編號之前的所有日誌。

方式三

執行指令 purge master logs before 'yyyy-mm-dd hh24:mi:ss',該命令將刪除日誌爲"yyyy-mm-dd hh24:mi:ss”之前產生的所有日誌。

方式四

設置參數 -expire_logs_days=#,此參數的含義是設置日誌的過期天數,過了指定的天數後日志將會被自動刪除,這樣將有利於減少DBA管理日誌的工作量。

配置如下:

2.3、查詢日誌

查詢日誌中記錄了客戶端的所有操作語句,而二進制日誌不包含查詢數據的SQL語句。

默認情況下,查詢日誌是未開啓的。如果需要開啓查詢日誌,可以設置:

在mysql的配置文件/etc/my.cnf中配置如下內容:

配置完畢之後,在數據庫執行以下操作:

select  * from tb_book;

select * from tb_book where id=1;‘

update tb_book set name = 'lucene入門指南’ where id=5;

select * from tb_book where id < 8;

2.4、慢查詢日誌

慢查詢日誌記錄了所有執行時間超過參數long_query_time設置值並且掃描記錄數不小於min_examined_row_limit的所有的SQL語句的日誌。

long_query_time默認爲10秒,最小爲0,精度可以到微秒。

2.4.1、文件位置和格式

慢查詢日誌默認是關閉的。可以在 /etc/my.cnf 中通過兩個參數來控制慢查詢日誌

2.4.2、日誌的讀取

和錯誤日誌、查詢日誌一樣,慢查詢日誌記錄的格式也是純文本,可以被直接讀取。

1)查詢long_query_time的值。

2)執行查詢操作

select id,title,price,num,status from tb_item where id=1;

由於該語句執行時間很短,爲0s,所以不會記錄在慢查詢日誌中。

select * from tb_item where title like'%阿爾卡特(OT-927)炭黑聯通3G手機雙卡雙待165454%’;

3)查看慢查詢日誌文件

直接通過cat指令查詢該日誌文件:

如果慢查詢日誌內容很多,直接查看文件,比較麻煩,這個時候可以藉助於mysql自帶的  mysqldumpslow  工具,來對慢查詢日誌進行分類彙總。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章