MySQL密碼管理、存儲引擎及事務
MYSQL密碼管理:
修改用戶密碼:
(1) SET PASSWORD [FOR ‘user‘@‘host‘] = PASSWORD(‘cleartext password‘); (2) UPDATE mysql.user SET Password=PASSWORD(‘cleartext password‘) WHERE User=‘USERNAME‘ AND Host=‘HOST‘; (3) mysqladmin -uUSERNAME -hHOST -p password ‘NEW_PASS‘ 生效:FLUSH PRIVILEGES
忘記管理員密碼的解決辦法:
(1) 啟動mysqld進程時,使用--skip-grant-tables(忽略用戶名密碼驗證)和--skip-networking(禁止遠程登錄)選項;
關閉mysql服務
CentOS 7:/usr/lib/systemd/system/mariadb.service Execstart後添加
CentOS 6:/etc/init.d/mysqld
systemctl daemon-reload
systemctl start mariadb
mysql直接登錄
(2) 通過UPDATE命令修改管理員密碼;
(3) 移除第一步添加的兩個選項,以正常方式啟動mysqld進程;
MySQL常用存儲引擎:
innodb:處理大量的短期事務,數據存儲於表空間(table space)中
1. 所有innodb表的數據和索引放置於同一個表空間中
表空間文件:datadir定義的目錄下
數據文件:ibdata1,ibdata2.。。。
2.每個表單獨使用一個表空間存儲表的數據和索引
innodb_file_per_table=ON
數據文件(存儲數據和索引):tbl_name.ibd,tbl_name.frm(表格式定義文件)
基於MVCC來支持高並發,支持所有的四個隔離級別,默認級別為REPEATABLE READ;間隙鎖防止幻讀。
使用聚集索引
支持自適應hash索引
MariaDB (默認使用XtraDB (innodb增強版,percona組織研發))
數據存儲:表空間
並發:MVCC(多版本並發控制),間隙鎖
索引:聚集索引,輔助索引
性能:預計操作、自適應hash、插入緩存區
備份:支持熱備(XtraBackup備份工具)
myisam:支持全文索引(FULLTEXT index)、壓縮、空間函數(GIS);但不支持事務,不支持行級鎖
崩潰後無法安全恢復(Aria myisam的增強版支持崩潰安全恢復)
適用場景:只讀(或者寫較少)、表較小(可接受長時間進行修復操作)
文件:
tab1_name.frm:表格式定義
tab1_name.MYD:數據文件
tab1_name.MYI:索引文件
特性:
加鎖和並發:表級鎖
修復:手工或自動修復、但可能丟失數據
索引:非聚集索引
延遲更新索引鍵:
壓縮表
MySQL事務:
事務:一組原子性的sql查詢,或者說一個獨立的工作單元。
ACID測試:
A:原子性,最小不能分割的單元,要麽全部都成功執行,要麽全部失敗後回滾。
C:一致性,數據總是從一個一致性狀態轉到另一個一致性狀態
I:隔離性,一個事務所做出的操作在提交之間,是不能為其他所見的;隔離有多種隔離級別,隔離性越高安全性越高,同時支持並發的能力越差。
D:持久性,一旦事務提交,其所作的修改會永久保存於數據庫中
事務處理過程:
啟動事務:start transaction;
存檔點:savepoint pointname
rollback to pointname 回到存檔點
release pointname 刪除存檔點
結束事務:1.commit 提交 2. rollback 回滾
建議:顯示請求和提交事務,不要使用自動提交功能,自動提交會產生大量磁盤IO影響性能。
方法:set SESSION autocommit=0; show variables like ‘%auto%‘;確認
事務的隔離級別:
查看級別:show global variables like ‘%tx_isolation%‘;
READ-UNCOMMITTED (讀未提交)
READ-COMMITTED (讀提交)
REPEATBLE-READ (可重讀)默認
SERIALIZABILE (可串行化)
可能存在的問題:
臟讀:即讀別人未提交的數據
不可重復讀:同一事務中改動之前讀一次,改之後讀一次,兩次讀到的信息不一致
幻讀:別人已經修改提交了,自己在以打開的事務中看到是修改之前的信息。提交事務後會發現信息已改變。
加鎖讀:一個事務做出數據的修改未提交時,其他事務無法提交
死鎖:兩個或多個事務在同一資源相互占用,並請求鎖定對方占用的資源的狀態。
事務日誌:
事務日誌的寫入類型為“追加”,因此其操作為順序IO,此日誌也被稱為預寫式日誌(write ahead logging)ib_logfile
本文出自 “linux運維” 博客,請務必保留此出處http://arm2012.blog.51cto.com/2418467/1980770
MySQL密碼管理、存儲引擎及事務