主頁 > 資料庫 > 《MySQL必知必會》之事務、用戶權限、資料庫維護和性能

《MySQL必知必會》之事務、用戶權限、資料庫維護和性能

2022-12-13 07:29:35 資料庫

第二十六章 管理事務處理

本章介紹什么是事務處理以及如何利用COMMIT和ROLLBACK陳述句來管理事務處理

事務處理

并非所有資料庫引擎都支持事務處理

常用的InnoDB支持

事務處理可以用來維護資料庫的完整性,它保證成批的MySQL操作要么完全執行,要么完全不執行,

例如給系統添加訂單的程序利用事務如下:

  1. 檢查資料庫中是否存在相應的客戶,如果不存在,添加他/她,
  2. 提交客戶資訊,
  3. 檢索客戶的ID,
  4. 添加一行到orders表,
  5. 如果在添加行到orders表時出現故障,回退,
  6. 檢索orders表中賦予的新訂單ID,
  7. 對于訂購的每項物品,添加新行到orderitems表,
  8. 如果在添加新行到orderitems時出現故障,回退所有添加的orderitems行和orders行,
  9. 提交訂單資訊,

在使用事務和事務處理時,有幾個關鍵詞匯反復出現,下面是關于事務處理需要知道的幾個術語:

  • 事務(transaction)指一組SQL陳述句;
  • 回退(rollback)指撤銷指定SQL陳述句的程序;
  • 提交(commit)指將未存盤的SQL陳述句結果寫入資料庫表;
  • 保留點(savepoint)指事務處理中設定的臨時占位符(place-holder),你可以對它發布回退(與回退整個事務處理同),

控制事務處理

START TRANSACTION;

使用此sql陳述句來標識事務的開始

使用ROLLBACK

SELECT * FROM ordertitals;
START TRANSCITION;
DELETE FROM ordertotals;
SELECT * FROM ordertotals;
ROLLBACK;
SELECT * FROM ordertotals;

先檢索該表,然后START TRANSCITION;開啟事務,洗掉表中所有內容,然后檢索發現為空,然后ROLLBACK回滾,檢索發現不為空

注意:

你能用事務管理insert、update、delete陳述句,但是不能回退create和drop陳述句

使用COMMIT

在撰寫一般的sql時都是隱含提交的,即sql的提交操作時自動完成的

而在使用事務時,不能隱含提交,必須明確的提交,使用COMMIT

START TRAMSCATION;
DELETE FROM orderitems WHERE order_num = 20010;
DELETE FROM orders WHERE order_num = 20010;
COMMIT;

如果第一條成功,第二天失敗了,那么將自動撤銷,提交失敗

使用保留點

為了支持回退部分事務處理,必須能在事務處理塊中合適的位置放置占位符,這樣,如果需要回退,可以回退到某個占位符

SAVEPOINT delete1;
ROLLBACK TO delete1;

SAVEPOINT來創建占位符

注意:

保留點將在事務處理完之后自動釋放

更改默認的提交行為

默認MySQL行為是自動提交所有更改,為指示MySQL不自動提交更改,需要使用

SET autocommit=0;

第二十八章 安全管理

本章將學習mysql的訪問控制和用戶管理

訪問控制

用戶應該對他們需要的資料具有適當的訪問權,既不能多也不能少

考慮以下內容:

  • 多數用戶只需要對表進行讀和寫,但少數用戶甚至需要能創建和洗掉表;
  • 某些用戶需要讀表,但可能不需要更新表;
  • 你可能想允許用戶添加資料,但不允許他們洗掉資料;
  • 某些用戶(管理員)可能需要處理用戶賬號的權限,但多數用戶不需要;
  • 你可能想讓用戶通過存盤程序訪問資料,但不允許他們直接訪問資料;
  • 你可能想根據用戶登錄的地點限制對某些功能的訪問,

不過在現實世界的日常作業中,決不能使用root,應該創建一系列的賬號,有的用于管理,有的供用戶使用,有的供開發人員使用,等等,

管理用戶

MySQL用戶賬號和資訊存盤在名為mysql的MySQL資料庫中,一般不需要直接訪問mysql資料庫和表,當想要獲取所有用戶賬號串列時,可以使用以下sql:

USE mysql;
SELECT user FROM user;

創建用戶賬號

CREATE USER ben INDETIFIED BY 'p@$$sw0rd';

CREATE USER創建一個新用戶賬號,IDENTIFIED BY指定散列口令

重命名用戶賬號

RENAME USER ben TO bforta;

洗掉用戶賬號

DROP USER bforta;

MySQL 5y以前的版本需要先用REVOKE洗掉與賬號相關的權限,再用DROP USER洗掉賬號

設定訪問權限

新創建的用戶沒有任何權限,只能登錄mysql

查看用戶賬號權限

SHOW GRANTS FOR bforta
-- output
+---------------------------------------------+
| Grants for bforta@%                         |
+---------------------------------------------+
| GRANT USAGE ON *.* TO 'bforta'@'%'          |
+---------------------------------------------+

-- 輸出結果顯示用戶bforta有一個權限USAGE ON *.*,USAGE表示根本沒有權限,所以,此結果表示在任意資料庫和任意表上對任何東西沒有權限,

為設定權限,使用GRANT陳述句,GRANT要求你至少給出以下資訊:

  • 要授予的權限;
  • 被授予訪問權限的資料庫或表;
  • 用戶名
GRANT SELECT ON crashcourse.* TO beforta;

-- 此GRANT允許用戶在crashcourse.*(crashcourse資料庫的所有表)上使用SELECT,通過只授予SELECT訪問權限,用戶bforta對crashcourse資料庫中的所有資料具有只讀訪問權限,

SHOW GRANTS FRO bforta;
+--------------------------------------------------+
| Grants for bforta@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'bforta'@'%'               |
| GRANT SELECT ON 'charshcourse'.* TO 'bforta'@'%' |
+--------------------------------------------------+

撤銷權限

REVOKE SELECT ON crashcourse.* FROM bforta

這條REVOKE陳述句取消剛賦予用戶bforta的SELECT訪問權限,被撤銷的訪問權限必須存在,否則會出錯

GRANT和REVOKE可在幾個層次上控制訪問權限:

整個服務器,使用GRANT ALL和REVOKE ALL;

整個資料庫,使用ON database.*;

特定的表,使用ON database.table;

特定的列;

特定的存盤程序

當需要賦予具體權限時查表即可

更改口令

SET PASSWORD FOR bforta = Password('n3w p@$$w0rd');

設定自己的口令

SET PASSWORD = Password('n3w p@$$w0rd');

第二十九章 資料庫維護

備份資料

  • 使用命令列實用程式mysqldump轉儲所有資料庫內容到某個外部檔案,在進行常規備份前這個實用程式應該正常運行,以便能正確地備份轉儲檔案,
  • 可用命令列實用程式mysqlhotcopy從一個資料庫復制所有資料(并非所有資料庫引擎都支持這個實用程式),
  • 可以使用MySQL的BACKUP TABLE或SELECT INTO OUTFILE轉儲所有資料到某個外部檔案,這兩條陳述句都接受將要創建的系統檔案名,此系統檔案必須不存在,否則會出錯,資料可以用RESTORETABLE來復原,
  • 可以使用FLUSH TABLES重繪未寫資料

進行資料庫維護

ANALYZE TABLE檢查表鍵是否正確

ANALYZE TABLE orders;
--output
+-----------------------+-----------+-----------+-----------+
| Table                 | Op        | Msg_type  | Msg_text  |
+-----------------------+-----------+-----------+-----------+
| crashcourse.orders    | analyze   | status    | OK        |
+-----------------------+-----------+-----------+-----------+

CHECK TABLE用來針對許多問題對表進行檢查,在MyISAM表上還對索引進行檢查,CHECK TABLE支持一系列的用于MyISAM表的方式,CHANGED檢查自最后一次檢查以來改動過的表,EXTENDED執行最徹底的檢查,FAST只檢查未正常關閉的表,MEDIUM檢查所有被洗掉的鏈接并進行鍵檢驗,QUICK只進行快速掃描,如下所示,CHECK TABLE發現和修復問題:

CHECK TABLE orders, orderitems;

診斷啟動問題

-- help 顯示幫助
-- safe-mode 裝在減去某些最佳配置的服務器
-- verbose 顯示全文本訊息
-- version顯示版本資訊然后推出

查看日志檔案

MySQL維護管理員依賴的一系列日志檔案,主要的日志檔案有以下幾種,

  • 錯誤日志,它包含啟動和關閉問題以及任意關鍵錯誤的細節,此日志通常名為hostname.err,位于data目錄中,此日志名可用 --log-error命令列選項更改,
  • 查詢日志,它記錄所有MySQL活動,在診斷問題時非常有用,此日志檔案可能會很快地變得非常大,因此不應該長期使用它,此日志通常名為hostname.log,位于data目錄中,此名字可以用 --log命令列選項更改,
  • 二進制日志,它記錄更新過資料(或者可能更新過資料)的所有 陳述句,此日志通常名為hostname-bin,位于data目錄內,此名字可以用–log-bin命令列選項更改,注意,這個日志檔案是MySQL 5中添加的,以前的MySQL版本中使用的是更新日志,
  • 緩慢查詢日志,顧名思義,此日志記錄執行緩慢的任何查詢,這 個日志在確定資料庫何處需要優化很有用,此日志通常名為 hostname-slow.log ,位于 data 目錄中,此名字可以用–log-slow-queries命令列選項更改,

第三十章 改善性能

  • 首先,MySQL(與所有DBMS一樣)具有特定的硬體建議,在學習和研究MySQL時,使用任何舊的計算機作為服務器都可以,但對用于生產的服務器來說,應該堅持遵循這些硬體建議,
  • 一般來說,關鍵的生產DBMS應該運行在自己的專用服務器上,
  • MySQL是用一系列的默認設定預先配置的,從這些設定開始通常是很好的,但過一段時間后你可能需要調整記憶體分配、緩沖區大小等,(為查看當前設定,可使用SHOW VARIABLES;和SHOW STATUS;,)
  • MySQL一個多用戶多執行緒的DBMS,換言之,它經常同時執行多個任務,如果這些任務中的某一個執行緩慢,則所有請求都會執行緩慢,如果遇到顯著的性能不良,可使用SHOW PROCESSLIST顯示所有活動行程(以及它們的執行緒ID和執行時間),你還可以用KILL命令終結某個特定的行程(使用這個命令需要作為管理員登錄),
  • 總是有不止一種方法撰寫同一條SELECT陳述句,應該試驗聯結、并、子查詢等,找出最佳的方法,
  • 使用EXPLAIN陳述句讓MySQL解釋它將如何執行一條SELECT陳述句,
  • 一般來說,存盤程序執行得比一條一條地執行其中的各條MySQL陳述句快,
  • 應該總是使用正確的資料型別,
  • 決不要檢索比需求還要多的資料,換言之,不要用SELECT *(除非你真正需要每個列),
  • 有的操作(包括INSERT)支持一個可選的DELAYED關鍵字,如果使用它,將把控制立即回傳給呼叫程式,并且一旦有可能就實際執行該操作,
  • 在匯入資料時,應該關閉自動提交,你可能還想洗掉索引(包括 FULLTEXT索引),然后在匯入完成后再重建它們,
  • 必須索引資料庫表以改善資料檢索的性能,確定索引什么不是一件微不足道的任務,需要分析使用的SELECT陳述句以找出重復的 WHERE和ORDER BY子句,如果一個簡單的WHERE子句回傳結果所花的時間太長,則可以斷定其中使用的列(或幾個列)就是需要索引的物件,
  • 當SELECT陳述句中有一系列復雜的OR條件時,使用多條SELECT陳述句和連接它們的UNION陳述句,可以極大地改進性能,
  • 索引改善資料檢索的性能,但損害資料插入、洗掉和更新的性能,如果你有一些表,它們收集資料且不經常被搜索,則在有必要之前不要索引它們,(索引可根據需要添加和洗掉,)
  • LIKE很慢,一般來說,最好是使用FULLTEXT而不是LIKE,
    資料庫是不斷變化的物體,一組優化良好的表一會兒后可能就面目全非了,由于表的使用和內容的更改,理想的優化和配置也會改變,
  • 最重要的規則就是,每條規則在某些條件下都會被打破,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/539806.html

標籤:MySQL

上一篇:MySQL客戶端的進階操作

下一篇:MySQL客戶端的進階操作

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more