天天看點

日志

11.25

事物隔離級别

事物日志redo undo

事物鎖 begin; update

事物日志性能優化 innodb_flush_log_at_trx_commit=0|1|2|3

innodb事務日志相關配置; show variables like '%innodb_log%';

通用日志

通用日志:記錄對資料庫的通用操作,包括錯誤的SQL語句

通用日志可以儲存在:file(預設值)或 table

通用日志相關設定

general_log=ON|OFF

general_log_file=HOSTNAME.log

log_output=TABLE|FILE|NONE

慢查詢(重點)

slow_query_log=on|off show profile for query 2;

long_query_time=N;

set global log_queries_not_using_indexes=ON;

二進制日志(重點)

記錄導緻資料改變或潛在導緻資料改變的SQL語句

記錄已送出的日志

不依賴于存儲引擎類型

功能:通過“重放”日志檔案中的事件來生成資料副本

注意:建議二進制日志和資料檔案分開存放

二進制日志記錄三種格式;

基于“語句”記錄:statement,記錄語句,預設模式

基于“行”記錄:row,記錄資料,日志量較大 (可恢複資料)

混合模式:mixed, 讓系統自行判定該基于哪種方式進行

二進制日志隻記錄已送出的事物 相當于離線日志

還原資料 臨時關閉二進制日志 set sqllog

顯示二進制記錄檔案 show binary logs

檢視使用中的二進制檔案 show master status

檢視二進制檔案指定内容 show binlog events in 'mysql-bin.000010';

删除000003以前的二進制檔案 purge binary logs to 'mysql-bin.000003';

建立一個新的二進制檔案 flush logs;

資料庫備份還原(重點)

完全備份

增量備份:僅備份最近一次完全備份或增量備份(如果存在增量)以來變化的資料,備份較

快,還原複雜

差異備份:僅備份最近一次完全備份以來變化的資料,備份較慢,還原簡單

前面必須有個完全備份

注意:二進制日志檔案不應該與資料檔案放在同一磁盤

冷、溫、熱備份

冷備:讀寫操作均不可進行

溫備:讀操作可執行;但寫操作不可執行

熱備:讀寫操作均可執行

MyISAM:溫備,不支援熱備 (不支援事務)

InnoDB:都支援 (不包括DDL語句)

實體和邏輯備份

實體備份:直接複制資料檔案進行備份,與存儲引擎有關,占用較多的空間,速度快

邏輯備份:從資料庫中“導出”資料另存而進行的備份,與存儲引擎無關,占用空間少,速度慢,可

能丢失精度

備份什麼

資料

二進制日志、InnoDB的事務日志

程式代碼(存儲過程、函數、觸發器、事件排程器)

伺服器的配置檔案

備份工具

cp, tar等複制歸檔工具:實體備份工具,适用所有存儲引擎;隻支援冷備;完全和部分備份

LVM的快照:先加鎖,做快照後解鎖,幾乎熱備;借助檔案系統工具進行備份

mysqldump:邏輯備份工具,适用所有存儲引擎,溫備;支援完全或部分備份;對InnoDB存儲

引擎支援熱備,結合binlog的增量備份

xtrabackup:由Percona提供支援對InnoDB做熱備(實體備份)的工具,支援完全備份、增量備份

MariaDB Backup: 從MariaDB 10.1.26開始內建,基于Percona XtraBackup 2.3.8實作

mysqlbackup:熱備份, MySQL Enterprise Edition元件

mysqlhotcopy:PERL 語言實作,幾乎冷備,僅适用于MyISAM存儲引擎,使用LOCK TABLES、

FLUSH TABLES和cp或scp來快速備份資料庫

重點mysqldump xtrabackup

基于LVM備份

1 請求鎖定所有表

mysql>flush tables with read lock;

2 記錄二進制日志檔案及事物位置

mysql>flush logs; mysql>show master status;

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

3 建立快照

lvcreate -L # -s -p r -n name /dev/vg_name/lvname

4 釋放鎖

mysql>unlock tables;

(5) 挂載快照卷,執行資料備份(6) 備份完成後,删除快照卷(7) 制定好政策,通過原卷備份二進制日志

邏輯備份工具 mysqldump,mydumper,phpmyadmin

Schema和資料存儲在一起、巨大的SQL語句、單個巨大的備份檔案

mysqldump備份工具

mysqldump database [tables] mysqldump -B DB1[DB2 DB3...] mysqldump -A

分庫備份并壓縮

利用二進制日志還原資料庫

二進制日志獨立存放

完全備份,并記錄備份的二進制位置

mysqldump -A --master-data=2 | gzip > /backup/all

date +%F

.sql.gz

11.27

mysql的mylsam相關備份

-x

innoDB相關備份

mysqldump -uroot -A -F -E -R

備份

mysqldump -A -F --single-transetciong --master -data=2 |gzip > /backup/all -`date +%F·.sql.gz

還原

停止資料庫通路(加鎖) 從完全備份中,找到二進制位置

grep '-- change master to' /backup

xtrabackup用法

1 備份;對資料庫做完全或增量備份 2 預制闆;還原前,先對備份的資料,整理至一個臨時目錄

3 還原(複制);複制會資料庫目錄中

新版xtrabackup備份及還原

1 完全備份;xtrabackup -uroot -p123 --backup --target-dir=/backup/base

2 修改資料

3 第一次增量備份 xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base

4 第二次修改資料

5 第二次增量 xtrabackup --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1

6 scp -r /backup/* 目标主機;/backup/

#備份過程生成三個備份目錄

/backup/{base,inc1;inc2}

還原過程

mysql叢集

分區

實作mysql主從複制配置

啟動二進制檔案

[mysqld]配置一個唯一ID号server_id=#

建立有複制權限的使用者帳号

grant replication slave on . to 'repluser'@HOST' INDENTIFIED BY 'replpas''

節點配置 1啟動中繼日志 [mysqld] server_id=# read_only=on relay_log=relay-log

relay_log_index=relay-log.index

2 使用複制權限的使用者帳号連接配接至主伺服器,并啟動複制線程

CHANGE MASTER TO MASTER_HOST='host', MASTER_USER='repluser',

MASTER_PASSWORD='replpass', MASTER_LOG_FILE=' mariadb-bin.xxxxxx',

MASTER_LOG_POS=#;

START SLAVE [IO_THREAD|SQL_THREAD];

主從複制相關 限制從伺服器為隻讀 read_only=ON 對super權限使用者無效

2 在從節點清楚資訊 以下都需要先STOP SLAVE

RESET SLAVE 從伺服器清楚master.info relay-log.info,

11.29

主從複制

mysql複制加密

主伺服器開啟SSL,配置證書私鑰路徑

[mysqld]

log-bin

server_id=1

ssl

ssl-ca=/etc/my.cnf.d/ssl/cacert.pem

ssl-cert=/etc/my.cnf.d/ssl/master.crt

ssl-key=/etc/my.cnf.d/ssl/master.key

需要修改權限chown -R mysql.mysql

繼續閱讀