linux學習之Mysql資料備份與恢復

2021-09-11 19:38:49 字數 4818 閱讀 5215

資料備份方式

1、物理備份

–冷備:cp、tar、

2、邏輯備份

–mysqlump

–mysql

資料備份策略

1、完全備份

–備份所有資料

2、增量備份

–備份上次備份以後所產生的新資料

3、差異備份

–在完全備份後,只備份所有新產生的資料

物理備份和恢復

備份:

cp -rp /var/lib/mysql/資料庫  備份目錄

tar -zcvf ***.tar.gz /var/lib/mysql/資料庫/*

恢復:

cp -rp 備份目錄/檔名 /var/lib/mysql/

tar -zxvf ***.tar.gz -c /var/lib/mysql/資料庫名/

邏輯備份和恢復

備份:

mysqldump -uroot -p 庫名  > /路徑/***.sql
恢復

mysql -uroot -p 庫名 < 路徑/***.sql
庫名表示方式:

–all-databases 或 -a 指所有庫

mysqldump  -uroot -p --all-databases >  alldb.sql
資料庫名指單個庫

mysqldump -uroot -p userdb > userdb.sql
資料庫名 表名 指某庫某錶

mysqldump -uroot -p 庫名 表名
-b 資料庫1 資料庫2 指多個庫

mysqldump -uroot -p -b 資料庫1 資料庫2 > double.sql
binlog日誌

binlog日誌概述:

binlog日誌是二進位制日誌,記錄所有更改資料的操作

【配置】

log_bin[=dir/name]

server_id=數字

max_binlog_size=數字m

用處:記錄查詢之外的所有sql命令,可用於資料恢復,是配置主從同步的必要條件

啟用binlog日誌

vim /etc/my.cnf

[mysqld]

log_bin //啟用binlog日誌

server_id=100 //指定id值

systemctl restart mysqld //重啟服務

手動生成新的日誌檔案:

1、重啟mysql

2、在mysql中使用命令flush logs;

3、使用mysqldump --flush-logs命令

4、生成新日誌檔案mysql -uroot -p密碼 -e 『flush logs』

清理binlog日誌

刪除早於制定版本的日誌檔案

mysql> puurge master logs to 'binlog檔名';

mtsql>reset master;

binlog日誌的三種記錄格式:

1、statement:每一條修改資料的sql命令都會記錄在binlog日誌中

2、row:不記錄sql語句上下文相關資訊,僅儲存哪條記錄被修改

3、mixed:是以上兩種格式的混合使用

檢視目前日誌記錄格式:

mysql>show variables like "binlog_format";
修改日誌記錄格式

vim /etc/my.cnf

[mysql]

binlog_format=mixed

systemctl restart mysqld

分析binlog日誌

使用mysqlbinlog工具

格式:mysqlbinlog [選項] binlog日誌檔名

常用選項

--start-datetime="yyyy-mm-dd hh:mm:ss"

--stop-datetime="yyyy-mm-dd hh:mm:ss"

--start-position=數字

--stop-position=數字

使用binlog恢復資料

使用mysqlbinlog提取歷史sql操作,在管道給mysql執行命令

(相當於把執行過的命令再執行,達到恢復資料的效果)

cd /var/lib/mysql

mysqlbinlog mysql-bin.000001 | mysql -uroot -p密碼

mysql備份工具特點

物理備份缺點:

跨平台性差,備份時間長、冗餘備份、浪費儲存空間

mysqldump備份缺點:

效率過低,備份還原速度慢、備份過程會導致資料插入更新被掛起

yum -y install perl-digest-md5.x86_64 rsync perl-dbd-mysql   #依賴包

rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm

rpm -ivh percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm

/usr/bin/innobackupex :備份innodb、xtrdb、myisam引擎的表

/usr/bin/xtrabackup :備份innodb、xtrdb引擎的表

innobackupex基本選項

常用選項

含義–host

主機名–user

使用者名稱–password

密碼–databases

資料庫名

–no-timestamp

不用日期命名備份檔案儲存的子目錄名

–redo-only

日誌合併

準備還原

–copy-back

恢復資料

–incremental目錄名

增量備份

–incremental-basedir=目錄名

增量備份時,指定上一次備份資料儲存的目錄名

–export

匯出表資訊

import

匯入表空間

ps:–databases=「庫名」 #單個庫

–databases=「庫1 庫2」 #多個庫

–databases=「庫.表」 #單個表

innobk應用案例

完全備份與恢復

1、完全備份

innobackupex --user root --password 密碼   /backup  --no-timestamp   #完全備份
2、恢復資料

rm -rf /var/lib/mysql/* #恢復時要求庫目錄為空

innobackupex --user root --password 密碼 --copy-back /backup #恢復資料

systemctl restart mysqld #重啟服務,完成恢復

增量備份與恢復

在增量備份前,必須有一次備份,通常是完全備份

增量備份:

innobackupex --user root --password 密碼 --databases =「庫名列表」 /fullbak  --no-timestamp  #完全備份

innobackupex --user root --password 密碼 --databases="庫名列表" --incremental /new1 --incremental-basedir="/fullbak" --no-timestamp #第一次增量備份

innobackupex --user root --password 密碼 --databases=「庫名列表」 --incremental /new2 --incremental-basedir="/new1" --no-timestamp #第二次增量

恢復:(資料丟失後)

innobackupex --user root --password 密碼 --databases="庫名列表" --copy-back /fullbak #拷貝檔案

chown -r mysql:mysql /var/lib/mysql/ #資料庫目錄許可權

重啟服務

在完全備份中恢復單個表

innobackupex --user root --password 密碼 --databases="test" /allbak --no-timestramp   #備份test庫

mysql> drop table test.a; #刪掉test庫中的a表

mysql>create table test.a(id int……); #建立表

mysql>alter table test.a discard tablespace; #刪除表空間

恢復單個表

mysql>system cp /allbak/test/a. /var/lib/mysql/test  #拷貝表資訊檔案

mysql>system chown mysql:mysql /var/lib/mysql/bbsdb/a.* #修改所有者

mysql> alter table test.a import tablespace; #匯入表空間

恢復完成

Linux學習之資料處理

grep egrep 過濾 grep 過濾 a10 b10 c10 grep a10 bin bash etc passwd 將包括 bin bash的資訊以及它以下10的資訊都顯示出來 grep b10 bin bash etc passwd 將包括 bin bash的資訊以及它以上10的資訊都顯...

mysql學習之資料備份和恢復

一.使用mysqldump進行備份 如 將test資料庫備份到 tmp mysql back 目錄下 root localhost tmp mysqldump uroot p111 l f tmp mysql back test.sql 引數解讀 mysqldump mysql資料備份的命令 tes...

MySQL學習之插入 刪除 更新資料

一 插入資料 插入資料的方式 插入完整的記錄 插入記錄的一部分 插入多條記錄 插入另乙個查詢記錄 1 為表的所有字段插入記錄 insert int table name column list values value lists 1 指定所有欄位名 列名順序可以不是表所定義的順序,及插入資料時不需...