目錄
阿里數據庫產品rds
淘寶數據庫架構
數據庫下載
Mysql3種安裝方法
mysql_install_db安裝數據庫命令腳本中有生成初始mysql數據
也可以把mysql_install_db集合到mariadb.service服務中
表聯系類型-1對多
表聯系類型-多對多
聯系表刪除外鍵表
Mysql實例
Myql體系結構
語句執行流程
數據庫遠程軟件
Mysql字符校對規則
SELECT語句執行順序
內外連接
Msyql架構
查詢緩存優化
索引
索引樹
索引-possible
索引-主鍵索引+輔助索引
復合索引第二例可能是無序的,所以在復合索引單獨使用無作用
存儲引擎
存儲引擎-物理結構
存儲引擎-MVCC機制
多版本並發控制機制,
多個用戶同時修改數據不會產生影響
MVCC
在原有表額外增加2個隱藏字段,用來記錄事務號
createversion delete_version
添加記錄的時候會記錄添加事務的版本號
某條記錄被刪除,會記錄刪除事務的版本號
新用戶查看數據也是產生一個事務,能看到的內容只能是在他之前發生的事務
存儲引擎-blackhole
表空間遷移
事務-生命周期
事務-redo-undo恢復-斷電的3種情況
比對的是磁盤中ibd文件中lsn,T0和redo log中
斷電情況3
LSN號不一致觸發前滾,構造臟頁
前滾后,CSR日志發現日志中commit狀態已提交,不需要回滾了
事務-redo-undo-原理
事務-隔離界別-臟讀
Ru模式下,未提交別的用戶就能查到最新修改數據
事務-隔離級別-不可重復讀
左邊執行完提交后,就可以看到最新數據,rc(讀已提交)模式下
事務-隔離級別-幻讀
RC模式下幻讀
事務-多會話commit區別
media/image43.png
事務-死鎖
2個事務交差重復修改,都發生等待,出現死鎖
事務-行級鎖等待
Innodb參數-innodb_flush_log_at_trx_commit=1
控制的是redo日志
Redo日志刷寫磁盤3種策略
等於0的時候,每秒刷寫已經交和未提交到os
buffer(文件系統緩存),斷電可能會損失1秒的---可能會用到
等於1的時候,當commit后立即刷寫到os buffer,再立即刷寫到磁盤-----安全,常用
等於2的時候, 當commit后立即刷寫到os buffer,每秒刷寫到磁盤----一般用不到
為什么刷寫到os buffer,因為由os buffer刷寫到磁盤效率更高.
Innodb參數-innodb_flush_method
控制的是redo buffer(重做日志) 和buffer pool(存儲的是數據)
要么性能,要么安全
Fsync 性能
innodb_flush_method =O_direct 默認 建議模式(安全)
O_dsync
Buffer pool
redo buffer
lb_logfile(redo日志文件)
innodb_max_dirty_pages=75(臟頁占用bufferpool超過75則刷寫到磁盤)
如果臟頁丟失可以根據redo恢復
日志-二進制日志恢復
備份恢復
備份-備份恢復步驟
備份-差異備份
備份恢復-數據庫刪表恢復
前提log_bin=on(數據庫路徑開啟過)
加一個read鎖,讓用戶不能修改數據了.還能訪問
Flsuh tables with read lock;
開始做恢復准備
Show master logs; 查看日志.確認刪表的日志位置
查看完全備份時,--master-data=1二進制日志文件bin.000004及位置,=245(則1-3的bin日志可以刪掉不管)
Flush logs; 生成新的日志00005
刪除表動作發生在日志00004.所以導出00004日志
Mysqlbinlog --start-position=245 /data/binlog/mysql-bin.00004>/backup/bin.sql
cat /backup/bin.sql,定位一下.找到刪表的命令的位置,刪除這行命令
關掉數據庫網絡,防止外界訪問(或者刪了數據庫,重開服務)
開始恢復數據庫
備份恢復-單表恢復
Mysqldump-遷移數據庫
備份恢復-xtrabackup
Xtrabakcup-備份流程
Xtrabackup-增量備份的lsn號
全備和增量備lsn號的差為9
Xtrabackup-redo only
復制
復制-數據庫主從復制
主從復制原理
復制-主從異步
復制-mysql復制模型
一主多從級聯復制
主主復制
半同步復制
Mha
MHA
Mha-原理
MHA-多個主從
MHA-郵箱配置