mysql日誌是mysql的重要組成部分,用來記錄再使用mysql的過程當中的各類信息,其中包括事務日誌,錯誤日誌,通用日誌,滿查詢日誌和二進制日誌等mysql
mysql事務在寫入硬盤以前會先寫入內存,再以順序io寫入事務日誌中,最後再將事務日誌寫入硬盤(隨機io),以此來防止數據的不一致性,同時提升存儲的速度。事務日誌通常爲兩組,且同數據文件分開存儲。使用事務日誌,存儲引擎在修改表的數據時只須要修改其內存拷貝,再把改修改行爲記錄到持久在硬盤上的事務日誌中,而不用每次都將修改的數據自己持久到磁盤。sql
MariaDB [(none)]> show global variables like 'innodb_%log%'; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 9 Current database: *** NONE *** +-------------------------------------------+---------+ | Variable_name | Value | +-------------------------------------------+---------+ | innodb_flush_log_at_trx_commit | 1 | | innodb_locks_unsafe_for_binlog | OFF | | innodb_log_block_size | 512 | | innodb_log_buffer_size | 8388608 | | innodb_log_file_size | 5242880 |//一個事務日誌組的大小,默認爲5M | innodb_log_files_in_group | 2 |//事務日誌組數 | innodb_log_group_home_dir | ./ |//事務日誌的存放位置(./在此處表示數據文件的存放位置,通常不建議將事務日誌同數據文件一塊兒存放) | innodb_mirrored_log_groups | 1 |//1表示對事務日誌組作鏡像 +-------------------------------------------+---------+
記錄數據庫服務的運行信息,通常用於數據庫服務排錯,默認開啓數據庫
MariaDB [(none)]> show global variables like '%log%_error'; +---------------+------------------------------+ | Variable_name | Value | +---------------+------------------------------+ | log_error | /var/log/mariadb/mariadb.log |//錯誤日誌的存放位置 +---------------+------------------------------+
通用日誌會記錄數據庫的全部操做,其中包括錯誤的mysql語句,會大量增長數據庫負擔通常不開啓,默認關閉vim
MariaDB [(none)]> show global variables like 'general_log%'; +------------------+-------------+ | Variable_name | Value | +------------------+-------------+ | general_log | OFF |//off爲通用日誌關閉,on爲開啓 | general_log_file | centos7.log |//通用日誌的存儲位置(同數據庫的數據文件位置) +------------------+-------------+
用來記錄執行查詢超時或者屢次索引的操做,記錄這些操做的時間,經常使用來優化數據庫,默認開啓centos
MariaDB [(none)]> show global variables like 'slow_query_log%'; +---------------------+------------------+ | Variable_name | Value | +---------------------+------------------+ | slow_query_log | ON |//on爲慢查詢開啓,off爲關閉 | slow_query_log_file | centos7-slow.log |//慢查詢日誌存放位置(同數據庫的數據文件位置) +---------------------+------------------+
二進制日誌用於記錄全部已提交的更改數據的操做,其記錄了語句發生時間、執行時長、操做的數據等等,經常使用於數據庫備份,通常建議二進制日誌和數據文件分開存儲安全
二進制日誌有兩種記錄格式,記錄語句和記錄行,默認爲記錄語句,記錄行佔用空間大可是更加安全,默認一個二進制日誌文件的大小爲1G,二進制文件的前245字節均用來記錄當前數據庫的版本號。服務器
MariaDB [(none)]> show global variables like '%log_bin%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin | OFF |//二進制日誌文件存儲位置,off爲關閉 | log_bin_trust_function_creators | OFF | | sql_log_bin | ON |//on爲二進制日誌開啓,off爲關閉 +---------------------------------+-------+
二進制日誌是默認開啓的,可是其存儲位置默認沒有,因此至關於不開啓這個功能,但咱們能夠自定義其存儲位置session
vim /etc/my.cnfapp
log_bin=目錄/文件名函數
而後給予這個目錄即對應文件mysql的讀寫權限便可
flush log ; 開啓新的日誌
show binary logs; 查詢全部二進制日誌列表
show master logs; 查詢全部二進制日誌列表
show master status; 查詢當前二進制日誌狀態
show binlog events in‘二進制日誌文件’; 查看某一二進制文件
show binlog events in ‘二進制日誌文件’from n ;查看某一二進制日誌文件n位置後的部分
purge binary logs to ‘二進制日誌文件’; 清空某二進制日誌文件以前的二進制日誌文件
reset master ;重置(清空) 二進制日誌文件
mysqlbinlog --start-position=n --stop-position=m 二進制日誌文件;只查看n到m的二進制日誌文件
show binlog events in ‘二進制日誌文件’from n limit a,b ;查看部分二進制日誌文件
備份能夠從不一樣的角度能夠分類爲邏輯備份,物理備份和冷備份,溫備份,熱備份,在mysql中咱們主要使用mysqldump和xtrabackup這兩個工具
邏輯備份和物理備份
邏輯備份中是對數據庫的操做,恢復時只需執行這些語句便可
物理備份則是直接記錄數據庫的數據,佔用空間較多,但速度較快
冷備份,溫備份和熱備份
冷備份在備份時不可讀寫
溫備份在備份時可讀但不可寫
熱備份在備份時可讀可寫
mysql有其專門的備份工具mysqldump,屬於邏輯備份,能夠經過事務功能輕易的實現熱備份。雖然在備份時咱們須要讓數據庫暫時保持靜止,即數據不被修改,可是mysql擁有事務功能可讓備份時產生幻讀。
mysqldump
-A 備份全部數據庫
-B db_name 備份指定數據庫
-R 備份全部存儲過程和自定義函數
--trigger 備份觸發器(默認開啓)
--skip-trigger 不備份觸發器
--master-data[=n] 此選項須啓用二進制日誌 n=1:所備份的數據以前加一條記錄,爲CHANGE MASTER TO語句用於獲取二進制日誌文件的位置和名稱,默認爲1;n=2:記錄爲註釋的CHANGE MASTER TO語句,此選項會自動關閉--lock-tables功能(除非開啓--single-transaction)
-F 鎖定表而且前滾動日誌
--single-transaction 利用事務功能讓備份時產生幻讀,即在一個事務中讀到的數據爲暫時靜止的狀態(在開始的時候把該session的事務隔離級別設置成repeatable read;而後啓動一個事務,備份結束的時候結束該事務有了這兩個操做,在備份過程當中,該session讀到的數據都是啓動備份時的數據。能夠理解爲對於innodb引擎來講加了該參數,備份開始時就已經把要備份的數據定下來了,備份過程當中的提交的事務時是看不到的,也不會備份進去。)
通常咱們用mysqldump -A -F -R --single-transaction --master-data >bank.sql 便可完整熱備份數據庫到bank.sql文件中,bank.sql是咱們導入的文件名,能夠自定義
直接將咱們的備份文件導入mysql便可
xtrabackup是mysql的一個備份工具,屬於物理備份,它讀取innodb數據來進行數據備份的,支持熱備,增量備份和差量備份。xtrabackup 是用來備份 innodb 表的,不能備份非 innodb 表,和 mysql Server 沒有交互。
xtrabackup的備份分爲徹底備份和增量備份,徹底備份是拷貝全部文件,而增量備份則是基於以前的備份只備份修改的數據
innobackupex /目錄
命令加目錄便可將數據庫徹底備份到咱們指定的目錄下,文件名爲當前日期
innobackupex --incremental 路徑 --incremental-basedir=路徑
--incremental指定這是增量備份
第一個目錄是咱們的存儲目錄
第二個目錄爲咱們基於這個目錄所作的增量目錄
1.將備份拷貝至要進行還原操做的主機上
2.同步日誌 innobackupex --apply-log 備份的文件
--apply-log 在數據庫備份好後,這些備份的數據並不能當即用於恢復,由於這些剛備份的數據裏包含了未提交的數據,須要回滾,也包括的已完成的事務在重作日誌文件中並無寫入數據文件中,這些數據須要重作,這個參數正是用於作這些事情,以保證數據 文件的一致性,在數據庫恢復以前,須先對備份的數據文件應用此參數(innobackup會重現重作日誌文件中的事務條目,重作已經提交的事務和回滾未提交的事務)
3.保證數據目錄爲空,mysql服務中止
4.恢復數據 innobackupex --copy-back 備份文件
5.將恢復的文件修改所屬人,所屬組並修改其權限,使mysql對其可讀寫,重啓mysql
1.將全部備份拷貝到要進行還原操做的主機上
2.同步日誌,由於是增量,因此咱們每一次增量都須要進行一次同步,將增量合併到全量備份中
對徹底備份和最後一個增量備份以前的增量備份進行以下操做
innobackupex --apply-log --redo-only 備份文件
--redo-only 在作增量恢復時,全備和增量備份的數據文件在恢復前必須先將在重作日誌文件中的已提交的事務重作,此參數將會合並全備和增量備份的數據文件,讓xtrabackup跳過 rollback 階段,只進行redo 階段,若是增量備份中含有rollback可能致使
增量備份沒法銜接
對最後一個備份進行以下操做
innobackupex --apply-log 備份文件
3.保證數據目錄爲空,mysql服務中止
4.恢復數據 innobackupex --copy-back 整合後的全量備份文件
5.將恢復的文件修改所屬人,所屬組並修改其權限,使mysql對其可讀寫
XtraBackup優勢 :
一、無需中止數據庫進行InnoDB熱備二、增量備份MySQL三、流壓縮到傳輸到其它服務器四、能比較容易地建立主從同步五、備份MySQL時不會增大服務器負載