事務控制語句
行鎖和死鎖
行鎖
兩個客戶端同時對同一索引行進行操作
客戶端1正常運行
客戶端2想修改,被鎖行
除非將事務提交才能繼續運行
死鎖
客戶端1刪除第5行
客戶端2設置第1行為排他鎖
客戶端1刪除行1被鎖
客戶端2更新行5被鎖
如何避免死鎖
mysql的備份和還原以及日志管理
備份的目的就是災難恢復
數據備份的分類
備份策略
全量備份
查看mysql數據保存路徑
vim /etc/my.cnf
tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/
把mysql的data目錄,打包的格式.xz,保存到opt的目錄下
mysqldump的備份和恢復
熱備份
通過二進制日志進行備份和還原
先將mysql的二進制日志功能打開
二進制日志的記錄格式
使用mysqlbinlog命令來查看日志文件
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001
二進制日志的分割
mysqladimn -u root -p123456 flush-log
通過二進制日志進行恢復
mysqlbinlog --no-defaults mysql-bin.000001 | mysql -u root -p123456
如果日志在當前文件則不需要指明路徑,反之必須指明路徑
mysqladmin -u root -p123456 flush-logs
我們是按天來執行的,我們就可以按天對數據庫進行增量的備份。
mysqlbinlog --no-defaults mysql-bin.000004 | mysql -u root -p123456
基于位置和時間進行恢復
mysqlbinlog --no-defaults --start-position='1338' mysql-bin.000005 | mysql -u root -p123456
從指定位置開始恢復數據,一直恢復到文件的結尾。
mysqlbinlog --no-defaults --stop-position='1338' mysql-bin.000005 | mysql -u root -p123456
從開始恢復到結束位置
從指定位置開始,到指定的位置結束:
mysqlbinlog --no-defaults --start-position='1338' --stop-position='1338' mysql-bin.000005 |mysql -u root -p123456
mysqlbinlog --no-defaults --start-datetime='1338' mysql-bin.000005 | mysql -u root -p123456
從指定時間開始恢復數據,一直恢復到文件的結尾。
mysqlbinlog --no-defaults --stop-datetime='1338' mysql-bin.000005 | mysql -u root -p123456
從開始時間到結束位置
從指定時間開始,到指定的時間結束:
mysqlbinlog --no-defaults --start-datetime='2024-12-20 13:47:17' --stop-datetime='2024-12-20 13:47:38' mysql-bin.000005 |mysql -u root -p123456
log-error=/usr/local/mysql/date/mysql-error.log
#記錄mysql在啟動,停止或者是運行時,產生錯誤的日志
general_log=ON general_log_file=/usr/local/mysql/date/mysql_general.log
#開啟mysql在使用過程中的記錄日志
slow_query_log=ON slow_query_log_file=/usr/local/mysql/date/mysql_slow_query.log long_query_time=5
#開啟慢查詢日志,用來記錄所有查詢的時間超過long_query_time=5的記錄,查詢的執行時間超過5秒鐘就會記錄。
不注明,默認是10秒
開啟錯誤日志
og-error=/usr/local/mysql/date/mysql-error.log
#記錄mysql在啟動,停止或者是運行時,產生錯誤的日志
general_log=ON general_log_file=/usr/local/mysql/date/mysql_general.log
#開啟mysql在使用過程中的記錄日志
slow_query_log=ON slow_query_log_file=/usr/local/mysql/date/mysql_slow_query.log long_query_time=5
#開啟慢查詢日志,用來記錄所有查詢的時間超過long_query_time=5的記錄,查詢的執行時間超過5秒鐘就會記錄。
不注明,默認是10秒