Linux - Binlog(二進制日誌)及數據庫線程命令


相關詞彙

binlog events  二進制日誌事件
binlog buffer 二進制日誌緩衝區

一、認識binlog 並配置:

binlog是一個二進制格式的文件,用於記錄用戶對數據庫更新的SQL語句信息,例如更改數據庫表和更改內容的SQL語句都會記錄到binlog裏,但是對庫表等內容的查詢不會記錄。

默認情況下,binlog是二進制格式的,不能使用文本工具的命令(比如,cat,vn等)查看,而使用mysqlbinlog解析查看。

binlog的作用

mysql的binlog日誌作用是用來記錄mysql內部增刪改查等對mysql數據庫有更新的內容的記錄寫入到對應的binlog文件裏。使用mysqldump備份時,只是對一段時間的數據進行全備,但是如果備份後突然發現數據庫服務器故障,這個時候就要用到binlog的日誌了。

如何開啓binlog日誌功能
[root@ localhost ~]# mkdir -p /opt/shuai/logs
[root@ localhost ~]# chown -R mysql.mysql /opt/shuai/logs

[root@ localhost ~]# vim /etc/my.cnf  ##添加
[mysqld]

log_bin=/opt/shuai/logs/hah-bin

提示:也可以按“log_bin = /application/mysql/logs/hah-bin”命名,目錄要存在

配置完保存,重啓mysql

service mysql restart

查看 並備份

[root@ localhost ~]# ll /opt/shuai/logs/
total 20
-rw-rw---- 1 mysql mysql 465 2019-11-16 11:13 hah-bin.000001
-rw-rw---- 1 mysql mysql 124 2019-11-16 11:13 hah-bin.index


每天晚上0點備份數據庫
[root@ localhost logs]# mysqldump -A -B -F >/opt/$(date +%F).sql
-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

[root@ localhost ~]# ll /opt/shuai/logs/
total 20
-rw-rw---- 1 mysql mysql 465 2019-11-16 11:13 hah-bin.000001
-rw-rw---- 1 mysql mysql 147 2019-11-16 11:13 hah-bin.000002
-rw-rw---- 1 mysql mysql 147 2019-11-16 11:13 hah-bin.000003
-rw-rw---- 1 mysql mysql 106 2019-11-16 11:13 hah-bin.000004
-rw-rw---- 1 mysql mysql 124 2019-11-16 11:13 hah-bin.index
Mysql binlog的三種工作模式

(1)Row level

日誌中會記錄每一行數據被修改的情況,然後在slave端對相同的數據進行修改。

優點:能清楚的記錄每一行數據修改的細節

缺點:數據量太大

(2)Statement level(默認)

每一條被修改數據的sql都會記錄到master的bin-log中,slave在複製的時候sql進程會解析成和原來master端執行過的相同的sql再次執行

優點:解決了 Row level下的缺點,不需要記錄每一行的數據變化,減少bin-log日誌量,節約磁盤IO,提高新能

缺點:容易出現主從複製不一致

(3)Mixed(混合模式)

結合了Row level和Statement level的優點

如何設置MYSQL binlog模式

進入mysql

mysql> show global variables like "binlog%" ;
+-----------------------------------------+-----------+
| Variable_name                           | Value     |
+-----------------------------------------+-----------+
| binlog_cache_size                       | 32768     |
| binlog_direct_non_transactional_updates | OFF       |
| binlog_format                           | STATEMENT |   #系統默認爲STATEMENT
+-----------------------------------------+-----------+
3 rows in set (0.00 sec)



設置binlog模式

mysql> set global binlog_format='ROW';
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like "binlog%" ;
+-----------------------------------------+-------+
| Variable_name                           | Value |
+-----------------------------------------+-------+
| binlog_cache_size                       | 32768 |
| binlog_direct_non_transactional_updates | OFF   |
| binlog_format                           | ROW   |
+-----------------------------------------+-------+
3 rows in set (0.00 sec)

mysql> 
配置文件中設置binlog模式
[root@ localhost ~]# vim /etc/my.cnf  

[mysqld] 
binlog_format='ROW'  #添加
配置完成後需要重啓mysql服務
Row模式下解析binlog日誌

[root@ localhost ~]# mysqlbinlog --base64-output="decode-rows" -v /opt/shuai/logs/hah-bin.000001

``

二、mysql中 show processlist

1、命令解釋:

show processlist 是顯示用戶正在運行的線程,需要注意的是,除了 root 用戶能看到所有正在運行的線程外,其他用戶都只能看到自己正在運行的線程,看不到其它用戶正在運行的線程。除非單獨個這個用戶賦予了PROCESS 權限。

root用戶,可以看到全部線程運行情況

普通的activiti用戶只能看到自己的

單獨給activiti用戶授PROCESS權限,(授權後需要退出重新登錄)

進入數據庫

mysql> show processlist;
+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host      | db   | Command | Time | State | Info             |
+----+------+-----------+------+---------+------+-------+------------------+
|  6 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)


執行下條命令同樣能夠查看
mysql> select * from information_schema.processlist;
+----+------+-----------+------+---------+------+-----------+----------------------------------------------+
| ID | USER | HOST      | DB   | COMMAND | TIME | STATE     | INFO                                         |
+----+------+-----------+------+---------+------+-----------+----------------------------------------------+
|  6 | root | localhost | NULL | Query   |    0 | executing | select * from information_schema.processlist |
+----+------+-----------+------+---------+------+-----------+----------------------------------------------+
1 row in set (0.00 sec)
2、參數解釋:

Id: 就是這個線程的唯一標識,當我們發現這個線程有問題的時候,可以通過 kill 命令,加上這個Id值將這個線程殺掉。前面我們說了show processlist 顯示的信息時來自information_schema.processlist 表,所以這個Id就是這個表的主鍵。

User: 就是指啓動這個線程的用戶。

Host: 記錄了發送請求的客戶端的 IP 和 端口號。通過這些信息在排查問題的時候,我們可以定位到是哪個客戶端的哪個進程發送的請求。

DB: 當前執行的命令是在哪一個數據庫上。如果沒有指定數據庫,則該值爲 NULL 。

Command: 是指此刻該線程正在執行的命令。這個很複雜,下面單獨解釋

Time: 表示該線程處於當前狀態的時間。

State: 線程的狀態,和 Command 對應,下面單獨解釋。

Info: 一般記錄的是線程執行的語句。默認只顯示前100個字符,也就是你看到的語句可能是截斷了的,要看全部信息,需要使用 show full processlist

三、 數據庫是什麼

1、MYSQL概述
 數據庫(database)就是一個存儲數據的倉庫。爲了方便數據的存儲和管理,它將數據按照特定的規律存儲在磁盤上。通過數據庫管理系統,可以有效地組織和管理存儲在數據庫中的數據。MySQL數據庫可以稱得上是目前運行速度最快的SQL語言數據庫,MySQL數據庫可以稱得上是目前運行速度最快的SQL語言數據庫. 

在關係數據庫實現過程中,第一步是建立關係模式,定義基本表的結構,即該關係模式是哪些屬性組成的,每一屬性的數據類型及數據可能的長度、是否允許爲空值以及其它完整性約束條件

1、爲多種編程語言提供了API。這些編程語言包括C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。

2、支持多線程,充分利用CPU資源。

3、優化的SQL查詢算法,可有效地提高查詢速度。

4、 既能夠作爲一個單獨的應用程序應用在客戶端服務器網絡環境中,也能夠作爲一個庫而嵌入到其他的軟件中提供多語言支持,常見的編碼如中文的GB2312、BIG5,日文的Shift_JIS等都可以用做數據表名和數據列名。

5、 提供TCP/IP、ODBC和JDBC等多種數據庫連接途徑。

6、提供可用於管理、檢查、優化數據庫操作的管理工具。

7、以處理擁有上千萬條記錄的大型數據庫。

爲防止字符混亂的情況發生,MySQL 有時需要在創建數據庫時明確指定字符集;在中國大陸地區,常用的字符集有 utf8 和 gbk。

  • utf8 能夠存儲全球的所有字符,在任何國家都可以使用,默認的校對規則爲 utf8_general_ci,對於中文可以使用 utf8_general_ci。
  • gbk 只能存儲漢語涉及到的字符,不具有全球通用性,默認的校對規則爲 gbk_chinese_ci。
2、SQL又是什麼

SQL 是用於訪問和處理數據庫的標準的計算機語言

SQL能做什麼?

SQL 面向數據庫執行查詢
SQL 可從數據庫取回數據
SQL 可在數據庫中插入行的記錄
SQL 可更新數據庫中的數據
SQL 可從數據庫刪除記錄
SQL 可創建新數據庫
SQL 可在數據庫中創建新表
SQL 可在數據庫中創建存儲過程
SQL 可在數據庫中創建視圖
SQL 可以設置表、存儲過程和視圖的權限

SQL是一門ANSI的標準計算機語言,用來訪問和操作數據庫系統。SQL語句用於取回和更新數據庫中的數據。SQL可與數據庫程序協同工作,比如MS Access、DB2、Informix、MS SQL Serve、Oracle、Sybase以及其他數據庫系統。

3、mysql與oracle的優缺點

Oracle
優點:
開放性:oracle 能所有主流平臺上運行(包括 windows)完全支持所有工業標準採用完全開放策略使客戶選擇適合解決方案對開發商全力支持;
可伸縮性,並行性:Oracle 並行服務器通過使組結點共享同簇工作來擴展windownt能力提供高用性和高伸縮性簇解決方案windowsNT能滿足需要用戶把數據庫移UNIXOracle並行服務器對各種UNIX平臺集羣機制都有着相當高集成度;
安全性:獲得最高認證級別的ISO標準認證。
性能:Oracle 性能高 保持開放平臺下TPC-D和TPC-C世界記錄;
客戶端支持及應用模式:Oracle 多層次網絡計算支持多種工業標準用ODBC、JDBC、OCI等網絡客戶連接
使用風險:Oracle 長時間開發經驗完全向下兼容得廣泛應用地風險低

缺點:
對硬件的要求很高;
價格比較昂貴;
管理維護麻煩一些;
操作比較複雜,需要技術含量較高;

MySQL
優點:
體積小、速度快、總體擁有成本低,開源;
支持多種操作系統;
是開源數據庫,提供的接口支持多種語言連接操作
mysql的核心程序採用完全的多線程編程。線程是輕量級的進程,它可以靈活地爲用戶提供服務,而不過多的系統資源。用多線程和C語言實現的MySql能很容易充分利用CPU;
MySql有一個非常靈活而且安全的權限和口令系統。當客戶與MySql服務器連接時,他們之間所有的口令傳送被加密,而且MySql支持主機認證;
支持ODBC for Windows, 支持所有的ODBC 2.5函數和其他許多函數, 可以用Access連接MySql服務器, 使得應用被擴展;
支持大型的數據庫, 可以方便地支持上千萬條記錄的數據庫。作爲一個開放源代碼的數據庫,可以針對不同的應用進行相應的修改。
擁有一個非常快速而且穩定的基於線程的內存分配系統,可以持續使用面不必擔心其穩定性;
MySQL同時提供高度多樣性,能夠提供很多不同的使用者介面,包括命令行客戶端操作,網頁瀏覽器,以及各式各樣的程序語言介面,例如C+,Perl,JavaPHP,以及Python。你可以使用事先包裝好的客戶端,或者乾脆自己寫一個合適的應用程序。MySQL可用於Unix,Windows,以及OS/2等平臺,因此它可以用在個人電腦或者是服務器上;

缺點:
不支持熱備份;
MySQL最大的缺點是其安全系統,主要是複雜而非標準,另外只有到調用mysqladmin來重讀用戶權限時才發生改變;
沒有一種存儲過程(Stored Procedure)語言,這是對習慣於企業級數據庫的程序員的最大限制;
MySQL的價格隨平臺和安裝方式變化。Linux的MySQL如果由用戶自己或系統管理員而不是第三方安裝則是免費的,第三方案則必須付許可費。Unix或linux 自行安裝 免費 、Unix或Linux 第三方安裝 收費;

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