mariadb數據庫備份與恢復


1.查詢日志:

記錄每一條sql語句,建議不開啟,因為如果訪問量較大,會占用相當大的資源,影響性能;

vim /etc/my.cnf.d/server.cnf

general_log = ON| OFF#查詢日志開關

general_log_file localhost.log #查詢日志的文件名字(/var/lib/mysql)

log_output TABLE | FILE | NONE #查詢日志的存儲形式

2.慢查詢日志

執行時長超出指定時間的查詢操作(測試命令:select sleep(4);)

slow_query_log = OFF|ON  #開啟慢查詢日志

slow_query_log_file = LOCALHOST-SLOW.log #慢查詢日志的文件路徑

long_query_time  #慢查詢時長;默認是10s

log_slow_rate_limit#如果要記錄的慢查詢日志非常多的話,會按照速率來記錄,默認1秒記錄一個

log_slow_verbosity=full | query_plan #記錄的詳細級別

 

3.錯誤日志

mysqld啟動和關閉過程中輸出的事件信息

mysqld運行中產生的錯誤信息

event scheduler 運行一個event時產生的日志信息

在主從復制架構中的從服務器上啟動從服務器線程時產生的信息

 

log_error = /var/log/mysql_error.log#指定錯誤日志的輸出位置

log_warnings 為0, 表示不記錄告警信息。

log_warnings 為1, 表示告警信息寫入錯誤日志。

log_warnings 大於1, 表示各類告警信息,例如有關網絡故障的信息和重新連接信息寫入錯誤日志。(默認為2)

 

4.二進制日志

針對時間點還原起着至關重要的作用

1)查看二進制日志:

SHOW {BINARY | MASTER} LOGS

SHOW BINLOG EVENTS [IN 'log_name']

show master status;

 

2)記錄導致數據改變或者可能導致數據改變的SQL語句

log_bin = OFF | ON

log_bin_basename = /var/lib/mysql/mysql-bin

 

binlog_format=STATEMENT|ROW|MIXED:二進制記錄格式

STATEMENT:基於“語句”記錄

ROW:基於“行”記錄

MIXED:讓系統自行判定該基於哪種方式進行

sql_log_bin=1|0:是否啟用二進制日志

log_bin_index=PATH:二進制日志索引位置

sync_binlog=1|0:設定是否啟動二進制日志同步功能

max_binlog_size=SIZE:單個二進制文件最大體積,默認為1G

expire_logs_days=0#超過多少天就清除二進制日志,默認為0,代表不啟用此功能

 

3)二進制日志滾動:

1.flush logs;

2.文件超出指定大小

3.service mariadb restart

 

4)二進制日志文件的構成:

兩類文件:

日志文件:mysql-bin.xxxxx,二進制格式

索引文件:mysql-bin.index,索引文件

 

 

5)二進制日志格式:

#190613 14:17:32 server id 1  end_log_pos 666 CRC32 0xeb1cde6b  Query   thread_id=9     exec_time=

0       error_code=0

use `testdb`/*!*/;

事件發生的日期和時間:190613 14:17:32

事件發生的服務器標識:server id 1

事件的結束位置:end_log_pos 666

事件的類型:Query

事件發生時所在服務器執行此事件的線程ID:thread_id=9

語句的時間戳與將其寫入二進制文件中的時間差:exec_time=0

錯誤代碼:error_code=0

事件內容:

 

GTID:Global Transaction ID;

專屬屬性:GTID

 

6)mysqlbinlog:客戶端命令工具

mysqlbinlog [options] log_file ...

--start-datetime=

--stop-datetime=

 

 

--start-position=

--stop-position=

 

 

5.中繼日志:

復制架構中,備服務器用於保存主服務器的二進制日志中讀取到的事件

 

 

6.事務日志:transaction log(ib_logfile0,ib_logfile1)

innodb_buffer_pool_size                                一般設置成為物理內存的3/4,或者4/5

innodb_log_files_in_group = 2                          事務日志文件的個數,默認為2個事務日志文件

innodb_log_file_size = 50331648(48m)        事務日志文件的單個大小48m

innodb_log_group_home_dir = ./                         事務日志文件的所在路徑,默認就在mariadb的數據目錄/var/lib/mysql

事務型存儲引擎自行管理和使用(Innodb,myisam引擎是不支持事務,外鍵,行級鎖)

redo log : 重做日志

undo log :撤銷日志

 

7.備份和恢復:

1)為什么要備份?

災難恢復:硬件故障,軟件故障,自然災害,黑客攻擊,誤操作

測試

2)要注意的要點:

備份需要多少時間

能容忍最多丟失多少數據

恢復數據需要在多場時間內完成

需要恢復哪些數據

(1)做還原測試,用於測試備份的可用性

(2)還原演練

 

3)備份類型:

完全備份,部分備份

完全備份:整個數據集

部分備份:只備份數據子集

 

完全備份、增量備份、差異備份

增量備份:僅備份最近一次完全備份或增量備份(如果有增量備份)以來變化的數據

差異備份:僅備份最近一次完全備份以來變化的數據;

 

熱備、溫備、冷備

熱備:讀寫操作均可執行

溫備:讀操作可以、寫不行

冷備:讀寫操作均不能執行

 

MyISAM:溫備,不能熱備;

Innodb:熱備

 

物理備份、邏輯備份

物理備份:直接復制數據文件進行備份,與存儲引擎無關

邏輯備份:從數據庫中“導出”數據庫另存而進行備份

備份時需要考慮的因素:

持續多久

備份過程的時長

備份負載

恢復過程的時長

備份什么?

要備份的數據

二進制日志,innodb的事務日志

代碼(存儲過程,存儲函數,觸發器,時間調度器)

服務器的配置文件

設計備份方案:

數據集:完全+增量

備份手段:物理,邏輯

對於備份較大的數據建議物理備份,對於較小的數據建議用邏輯備份;

 

備份工具的選擇:

mysqldump+復制binlog:

mysqldump:完全備份

復制binlog中指定時間范圍內的event:增量備份

lvm2快照+復制binlog:

lvm2快照:適用cp或者tar等做物理備份:完全備份

復制binlog中指定時間范圍內的event:增量備份

xtrabackup|mariabackup:

由Percona提供的支持對InnoDB做熱備(物理備份)工具

完全備份,增量工具

 

 

 

4)基於二進制文件的恢復

1.算好要恢復數據的時間段,重定向輸入到bin.sql文件中

mysqlbinlog --start-datetime="2019-06-08 22:55:13" --stop-datetime="2019-06-08 22:55:13" binlog.0000011 > bin.sql

mysqlbinlog /var/lib/mysql/mysqlbin.000001 --stop-pos=1093 | mysql -uroot -proot

2.執行bin.sql文件還原

source bin.sql

 

5)基於lvm2的備份

(1)請求鎖定所有表

flush tables with read lock;

(2)記錄二進制日志文件及事件位置或時間點

flush logs;

mysql -uroot -proot -e 'show  master status;' > /path/to/somefile

(3)創建快照

lvcreate -L # -s -p r -n NAME /DEV/VG_NAME/LV_NAME

(4)釋放鎖

unlock tables;

(5)掛在快照卷,執行數據備份

(6)備份完成后,刪除快照卷

(7)指定好策略,通過原卷備份二進制日志

(8)還原的時候確保屬組和屬主是mysql:mysql

如果是yum安裝默認數據目錄在/var/lib/mysql,如果需要更改

[mysqld]

datadir=/mysql_data/

pid_file=/mysql_data/localhost.pid

socket=/mysql_data/mysql.sock

wsrep_data_home_dir=/mysql_data/

log-bin=mysql-bin

[client]

socket=/mysql_data/mysql.sock

 

 

 

6)備份工具mariabackup

Mariabackup

簡介

Mariabackup是MariaDB提供的一個開源工具,用於對InnoDB,Aria和MyISAM表進行物理在線備份。這個工具是基於Percona的XtraBackup(版本2.3.8)的解決方案。

這里有一點需要注意,在MariaDB10.3.x及以上的版本用Percona XtraBackup工具會有問題。原因可能是MariaDB10.3以上版本的redo日志格式和之前不同了。

 

Percona的官方文檔:https://www.percona.com/doc/percona-xtrabackup/2.4/index.html

Mariabackup的官方文檔:https://mariadb.com/kb/en/library/mariabackup-overview/

安裝方法

yum install MariaDB-backup

 

備份與恢復

全備+恢復

1.全量備份

mariabackup --backup --target-dir=/root/fullbackup --user=root --password=root

2.准備全備數據

mariabackup --prepare --target-dir=/root/fullbackup/ --user=root --password=root

3.還原數據(請確保數據目錄下是空的)

mariabackup --copy-back --target-dir=/root/fullbackup/ --user=root --password=root

4.修改屬組和屬主

chown -R mysql.mysql /var/lib/mysql

全備+增量+恢復

1.全量備份

mariabackup --backup --target-dir=/root/fullbackup --user=root --password=root

2.增量備份

mariabackup --backup --target-dir=/root/inc1 --incremental-basedir=/root/fullbackup/ --user=root --password=root

3.准備全備數據

mariabackup --prepare --target-dir=/root/fullbackup/ --user=root --password=root

4.增量和全備數據合並

mariabackup --prepare --target-dir=/root/fullbackup/ --user=root --password=root --incremental-dir=/root/inc1/ --apply-log-only

5.恢復數據(請確保數據目錄下是空的)

mariabackup --copy-back --target-dir=/root/fullbackup/ --user=root --password=root

6.修改屬組和屬主

chown -R mysql.mysql /var/lib/mysql

7)基於mysqldump工具進行備份(邏輯備份工具)

備份testdb數據庫(-l代表備份單個數據庫時鎖定該庫的所有表;-x代表對所有表進行備份時鎖定所有數據庫的所有表)

mysqldump -uroot -proot -l --databases testdb > testdb.sql

備份所有數據庫

mysqldump -uroot -proot --all-databases > all-databases.sql

備份testdb數據庫下的students表

mysqldump -uroot -proot testdb students > students.sql

還原數據

source testdb.sql


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM