mysql> show global varibable like '%log%';
sql_log_bin 是否記錄二進制日誌
mysql> set sql_log_bin=off; 臨時關閉二進制日誌
mysql> show master status;查看二進制日誌
mysql> show binlog events in 'mysql-bin.000001'; 查看指定二進制文件內容
還原數據庫時先關閉二進制文件
mysql> set sql_log_bin=off;
mysql> \. /root/students.sql
mysqldump
--database DB1,DB2,...
--all-databases
MyISAM:溫備份
--lock-all-tables
--lock-tables
InnoDB:熱備份
--single-transaction
--flush-logs
--events 備份事件
--routines存儲過程和存儲函數
--triggers觸發器
--master-data{0|1|2}
邏輯備份:
1.浮點數據丟失精度
2.備份出來的數據可能比原數據大,壓縮以後可大大節省空間
3.不適合對大數據庫做完全備份
--------------------------------------------------------
對InnoDB:溫備
mysql> flush tables with read lock ;
等待後臺同步到數據文件後
show engine innodb status; 查看後臺數據同步情況 Ibuf:
mvcc,repeatable-read 多版本併發控制
--single-transaction
此還原不寫入2進制日誌:
-----------------------------------------------
select * into outfile '/tmp/t1.txt' from t1; 備份
create table t1s like t1;先創建一張表結構相同的空表
load data infile '/tmp/t1.txt'into table t1s;還原
---------------------------------------------------
# mysqlbinlog '/mydata/data/mysql-bin.00001'
#at 605
# mysqlbinlog --start-position=605 /mydata/data/mysql-bin.00001 > /root/a.sql 從605開始到結束 從新執行一遍 並保存下來
create table tutors like tutor; 創建一張新表
truncte table tutor;清空表裏的數據
set sql_log_bin=0; 關閉二進制日誌
# source /root/a.sql; 恢復
---------------------------------------------
幾乎熱備: LVM
snapshot:
前提:
1.數據文件要在邏輯捲上
2.此邏輯卷所在卷組必須有足夠空間使用快照卷
3.數據文件和事務日誌要在同一個捲上
步驟:
1.打開會話施加讀鎖名鎖定所有表;
mysql> flush tables with read lock;
mysql> flush logs;
2.通過另一個終端,保存二進制日誌文件及相關位置信息;
$ mysql -uroot -p -e `show master status\G` > /path/to/master.info
3.創建快照卷
#lvcreate -L # -s -p r -n LV_NAME /path/to/source_lv
4.釋放鎖
mysql> unlock tables;
5.掛載快照卷,備份
mount
cp
6.刪除快照卷
7.增量備份二進制日誌
load data infile '/tmp/tutor.txt' info table tutors;
start transaction 啓動事務
use jiaowu;
desc tuors;
insert into tutors (Tname) value ('stu001');
select @@tx_isolation; 查看隔離級別
commit;提交事務
flush tables with read lock; 刷新表,並以只讀方式鎖表
執行完以後
flush logs;刷新日誌
show master status; 確保當前二進制文件信息的位置
# mysql -e 'show master status\G' > /backup/master-`date +%F`.info
創建快照卷,只讀,大小50M
# lvcreate -L 50M -s -p r -n mydata-snap /dev/myvg/mydata
unlock tables;釋放鎖
mount /dev/myvg/mydata/mydata-snap /mnt -o ro 掛載
mkdir /backup/full-backup-2016-10-21/
[root@localhost data]# cp -a ./* /backup/full-backup-2016-10-21
umount /mnt
lvremove --force /dev/myvg/mydata-snap 刪除快照
刪除備份文件裏的二進制日誌
cat /backup/master-2016-10-21.info
事件掛文件了 就要基於事件來做限定
mysqlbinlog --start-datetime='2016-10-21 11:10:10' mysql-bin.00003 mysql-bin.00004 > /backup/incremental-`date +%F-%H-%M-%S`.sql;
[root@localhost data]# rm -rf ./* 刪除數據
# cp -a /backup/full-backup-2016-10-21/* /mydata/data
# server mysqld start
mysql > set sql_log_bin=0
mysql > soure /backup/incremental -...