本文目錄一覽:
- 1、MySQL的事務兩階段提交的技術有什麼意義?
- 2、簡介mysql之mysql語句執行流程
- 3、如何動態監控mysql binlog
- 4、mysql恢複數據mysqlbinlog
- 5、如何實現mysql 數據庫的二進制日誌回滾
- 6、如何使用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-hant/n/141917.html