mysql源碼之兩階段提交,數據庫兩階段提交

本文目錄一覽:

MySQL的事務兩階段提交的技術有什麼意義?

主要解決分佈式事務時的並發控制問題,兩階段提交協議是分佈式事務管理的主要算法

簡介mysql之mysql語句執行流程

1.一條查詢語句如何執行?

2.一條更新語句如何執行?

3.innodb的redolog是什麼?

4.什麼是寫緩衝

5.寫緩衝一定好嗎?

6.什麼情況會引發刷臟頁

關於一條mysql查詢語句在mysql中的執行流程

如select name from test where id=10;

1.連接器—先與mysql服務端連接器建立連接,若查詢緩存命中則直接返回 (查詢緩存的弊端:查詢緩存的失效非常頻繁,只要有對一個表的更新,這個表上所有的查詢緩存都會被清空。)

2.分析器—詞法分析告訴服務端你要幹什麼(我要找 test表中id為10的名字) ( 其中sql語法錯誤在這塊暴露 )

3.優化器—服務端會思考該怎麼執行最優(索引的選擇)

4.執行器—檢查用戶對庫對錶的權限

5.存儲引擎–存儲數據,提供讀寫接口

以update a set name=1 where id=1;

主要區別在於在查詢到數據之後(select name from a where id=1),如果是innodb引擎它會進行日誌的兩階段提交:

1.開啟事務,寫入redolog(innodb引擎特有),並更新內存

3.寫入binlog,提交事務,commit

我們知道mysql數據存儲包含內存與磁盤兩個部分,innodb是按數據頁(通常為16k)從磁盤讀取到內存中的(剩餘操作在內存中執行),當要更新數據時,若目標數據的數據頁剛好在內存中,則直接更新。不在呢?

將這個更新操作(也可能是插入) 緩存在change buffer中 (redolog也會記錄這個change buffer操作)等到下一次查詢要用到這些數據時,再執行這些操作,改變數據(稱為合併操作記錄稱為merge)。

innodb_change_buffer_max_size

innodb_change_buffering

先介紹兩個概念

因為redolog是環形日誌,當redolog寫滿時,就需要「擦掉」開頭的一部分數據來達到循環寫,這裡的擦掉指,指將redolog日誌的checkpoint位置從 CP推進到CP『 ,同時將兩點之間的臟頁刷到磁盤上(flush操作),此時系統要停止所有的更新操作(防止更新操作丟失)

1.系統內存不足。當要讀取新的內存頁時就要淘汰一些數據頁,如果淘汰的正好是臟頁,就要執行一次flush操作

2.Mysql認為系統處於「空閑狀態」

3.正常關閉Mysql

上述後兩者場景(系統空閑和正常關閉)對於性能都沒太大影響。

當為第一種redolog寫滿時,系統無法執行更新操作,所有操作都會堵塞

當為第二種內存不夠用時,如果淘汰臟頁太多,影響mysql響應時間

後兩者刷臟頁會影響性能,所以Mysql需要有刷臟頁控制策略,可以從以下幾個設置項考慮

1.設置innodb_io_capacity告訴innodb所在主機的IO能力

如何動態監控mysql binlog

有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數據檢測恢復工具。前者使用起來比較簡便。推薦使用。

1. check table 和 repair table

登陸mysql 終端:

mysql -uxxxxx -p dbname

check table tabTest;

如果出現的結果說Status是OK,則不用修復,如果有Error,可以用:

repair table tabTest;

進行修復,修復之後可以在用check table命令來進行檢查。在新版本的phpMyAdmin裏面也可以使用check/repair的功能。

2. myisamchk, isamchk

其中myisamchk適用於MYISAM類型的數據表,而isamchk適用於ISAM類型的數據表。這兩條命令的主要參數相同,一般新的系統都使用MYISAM作為缺省的數據表類型,這裡以myisamchk為例子進行說明。當發現某個數據表出現問題時可以使用:

myisamchk tablename.MYI

進行檢測,如果需要修復的話,可以使用:

myisamchk -of tablename.MYI

關於myisamchk的詳細參數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL服務器沒有訪問這個數據表,保險的情況下是最好在進行檢測時把MySQL服務器Shutdown掉。

另外可以把下面的命令放在你的rc.local裏面啟動MySQL服務器前:

[ -x /tmp/mysql.sock ] /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI

其中的/tmp/mysql.sock是MySQL監聽的Sock文件位置,對於使用RPM安裝的用戶應該是/var/lib/mysql/mysql.sock,對於使用源碼安裝則是/tmp/mysql.sock可以根據自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL數據庫存放的位置。

需要注意的時,如果你打算把這條命令放在你的rc.local裏面,必須確認在執行這條指令時MySQL服務器必須沒有啟動!檢測修復所有數據庫(表)

mysql恢複數據mysqlbinlog

有完整備份的話,先用完整備份還原下,然後在用binlog恢復從完整備份到當前時間點的數據。

如果沒有完整備份的話,使用binlog也可以恢復,不過10G的數據可能需要很長的時間。

相關語法如下:

mysql -hlocalhost test 完整備份

mybinlog -hlocalhost 1.sql

如何實現mysql 數據庫的二進制日誌回滾

mysql命令行下怎樣實現數據的回滾操作

在MySQL有時執行了錯誤的update或者delete時導致大量數據錯誤恢復的辦法。執行時沒有開啟事務,也沒有對數據進行。這時就需要使用到sqlbinlog工具。

sqlbinlog需要開啟,具體的打開方法就不說了。

使用sqlbinlog會產生bin文件,恢復就需要用到這些文件。文件中記錄著數據庫的所有操作。(此方法的操作是將數據庫之前所執行的語句重新執行一次,以達到恢復效果)

具體步驟:1,先找到bin文件,一般都是在mysql的data文件夾中,結尾以.00000X等形式結束。

2,尋找需要還原的時間點 使用語句 mysqlbinlog 文件名 例(MySQLbinlog xxbin.000001)來查看內容,然後找到對應的具體時間

3,導出sql語句,使用語句 mysqlbinlog 文件名sql文件路徑 例(mysqlbinlog xxxbin,00001a.sql | mysql -u root -p )

如果需要指定時間導出–start–date -stop=” –date=” 來導出指定時間執行的語句例(sqlbinlog –start-stop=’2015-11-22 10:00:00′ xxbin.000001a.sql | mysql -u root -p )這句意思是導出在2015-11-22 10點之前的語句,反之start是導出時間之後的。 start和stop可以同時使用。

如果存在多個bin文件,則按照需要導出。

4,使用mysql將導出的語句執行一次。

如何使用mysql 兩階段提交

第階段:Java面向象編程

1.Java基本數據類型與表達式支循環

2.StringStringBuffer使用、則表達式

3.面向象抽象封裝繼承態類與象象初始化收;構造函數、this關鍵字、參數傳遞程、static關鍵字、內部類Java垃極收機制Javadoc介紹

4.象實例化程、覆蓋、final關鍵字、抽象類、接口、繼承優點缺點剖析;象態性:類父類間轉換、抽象類接口態應用、態帶處

5.Java異處理異機制原理

6.用設計模式:Singleton、Template、Strategy模式

7.JavaAPI介紹:種基本數據類型包裝類SystemRuntime類DateDateFomat類等

8.Java集合介紹:Collection、Set、List、ArrayList、Vector、LinkedList、Hashset、TreeSet、Map、HashMap、TreeMap、Iterator、Enumeration等用集合類API

9.Java

I/O輸入輸流:FileFileRandomAccess類位元組流InputStreamOutputStream字符流Reader

Writer及相應實現類IO性能析位元組字符轉化流包裝流概念及用包裝類計算機編碼

10.Java高級特性:反射、代理泛型

11.線程原理:何程序創建線程(Thread、Runnable)線程安全問題線程同步線程間通訊、死鎖

12.Socket網絡編程

第二階段:Java

Web發

1.Java解析XML文件DOM4J

2.MySql數據庫應用、表連接查詢應用

3.JspServlet應用

4.Http協議解析

5.Tomcat服務器應用配置

6.WebService服務配置應用

第三階段:android UI編程

1、Android發環境搭建:Android介紹Android發環境搭建第Android應用程序Android應用程序目錄結構

2、Android初級控件使用:

TextView控件使用

Button控件使用

EditText控件使用

ImageView使用

RadioButton使用

Checkbox使用

Menu使用

3、Android高級控件使用:

Autocompletion使用

ListView使用

GridView使用

Adapter使用

Spinner使用

Gallary使用

ScrollView使用

4、框與菜單使用:

Dialog基本概念

AlertDialog使用

DatePickerDialog使用

Menu使用

自定義Menu實現

5、控件布局:

線性布局使用

相布局使用

表格布局使用

6、Acitivity管理:

AndroidManifest.xml文件作用

Intent使用

使用Intent傳遞數據

啟Activity

IntentFilter使用

Activity Group使用

7、自定義控件實現:

自定義ListView實現

摺疊ListView使用

自定義Adapter實現

自定義View實現

態控件布局實現

第四階段:android網絡編程與數據存儲

1、基於Android平台HTTP通訊:

Http協議顧

Apache Commons 工具包介紹

使用Get向服務器提交數據

解析服務器響應數據

使用POST向服務器提交數據實現

向服務器提交非文本數據實現

使用Http協議實現線程載

使用Http協議實現斷點續傳

2、Android數據存儲技術:

SQLite3數據庫簡介

SQL語句顧

SQLite3編程接口介紹

SQLite3事務管理

SQLite3游標使用

SQLite3性能析

訪問SDCard

訪問SharedPreferences

3、ContentProvider使用:ContentProvider實現共享數據、URI

解析與UriMatcher、ContentUris使用、使用ContentResolver操作ContentProvider、

ContentProvider監聽Android異步操作:Handler使用;異步任務基本概念;AsyncTask使用

第五階段:android手機硬件管理

1、圖及定位技術:GPS簡介;LocationManager使用;Google Map添加標記;查詢某附近建築;使用Google Map實現點點導航

2、傳器使用:向、加速度(重力)、光線、磁場、距離、溫度等傳器使用

3、近場通信技術:NFC技術簡介;NFC技術用場景介紹;NFC技術實現

4、媒體管理技術:MediaPlayer使用

5、觸摸屏技術:手勢識別;點觸摸技術

第六階段:Android圖形編程技術

1、圖形處理基礎:2D圖形編程基礎;

2、點、線、面等基本圖形元素繪製;

3、Android畫框架簡介;

4、位移畫實現;

5、淡入淡畫實現;

6、旋轉畫實現;

7、Matrix使用

第七階段:Android遊戲發

1、Android遊戲發:Android遊戲發概述;

2、SurfaceView使用;

3、物理球技術;

4、碰撞檢測技術;

5、圖片、文字背景音樂等資源使用;

6、遊戲引擎基礎概念;

7、Cocoa2d-Android引擎使用;

8、OpenGL ES使用

原創文章,作者:EBRW,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/141917.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
EBRW的頭像EBRW
上一篇 2024-10-09 09:53
下一篇 2024-10-09 09:53

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • 雲智直聘 源碼分析

    本文將會對雲智直聘的源碼進行分析,包括前端頁面和後端代碼,幫助讀者了解其架構、技術實現以及對一些常見的問題進行解決。通過本文的閱讀,讀者將會了解到雲智直聘的特點、優勢以及不足之處,…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • Python怎麼導入數據庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的數據庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28

發表回復

登錄後才能評論