中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql數據庫備份與恢復

發布時間:2020-07-06 11:25:15 來源:網絡 閱讀:18968 作者:dscp_linux 欄目:MySQL數據庫

1 數據備份與恢復

2 使用第三方軟件進行備份



1 數據備份與恢復

1.1 數據備份方式

物理備份:直接拷貝庫或者表對應的文件。cp,tar, ...

具有局限性,前提是表的存儲引擎為myisam,跨平臺性差,數據備份恢復浪費時間。

邏輯備份:執行備份時,根據已有的數據,生成對應的sql命令,把sql保存到指定的文件里。恢復時執行備份文件里的sql命令。

1.2 數據備份策略

完全備份:備份所有數據。

增量備份:備份自上一次備份之后有變化的數據

差異備份:備份自完全備份之后有變化的數據

完全備份+增量備份

完全備份+差異備份

1.3 完全備份

備份命令:

[root@ser51 ~]#mysqldump -hlocalhost -uroot -p密碼 源庫名 >文件名

源庫名的表示:

--all-databases  所有庫

庫名             指定單個庫

庫名 表名        指定庫的表(注意庫名和表名之間是空格)

-B 數據庫1 數據庫2  備份多個庫

恢復命令:

兩種方式:

(1)[root@ser51 ~]#mysql 連接庫操作  目標庫名 <文件名.sql

(2)mysql>source 備份文件路徑;

1.4 增量備份

(1)啟用binlog日志 實現實時增量備份

binlog日志介紹:二進制日志,是mysql數據庫服務日志文件中的一種,記錄執行的除查詢之外的sql命令。默認沒有啟用。

vim  /etc/my.cnf

[mysqld]

server_id=數值  #數值范圍1-255

log_bin          #啟用默認存放路徑/var/lib/mysql/

binlog_format="mixed"

重啟服務之后生成的文件為:

/var/lib/mysql/主機名-bin.000001  

#超過500M生成新的(000001-999999)

/var/lib/mysql/localhost-bin.index    #索引文件

#systemctl   restart  mysqld       #重啟服務

(2)查看日志當前記錄格式

mysql > show variables like "binlog_format";

三種記錄格式:

statement:每一條修改數據的sql命令都會記錄在binlog日志中;

row:不記錄sql語句上下文相關信息,僅保存哪條記錄被修改。;

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

(3)查看binlog日志文件內容

#mysqlbinlog  /var/lib/mysql/localhost-bin.000001

# mysqlbinlog localhost-bin.000001  | grep -i insert

(4)自定義binlog日志文件存儲的目錄和文件名

# mkdir /logdir

# chown  mysql  /logdir;  setenforce  0

#vim /etc/my.cnf

server_id=數值  #數值范圍1-255

log_bin=/logdir/mysql   

#自定義存放路徑(mysql相當于主機名,必須寫,無需mkdir)

binlog_format="mixed"

#systemctl  restart  mysqld

#ls  /logdir/

(5)分析binlog日志

binlog日志文件記錄sql命令的方式?

時間點

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

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

pos點(偏移量)

--start-position=數字     

--stop-position=數字

[root@ser51 logdir]# mysqlbinlog

--start-position=336 --stop-position=1494  mysql.000001

(6)執行binlog日志里的sql命令恢復數據

#mysqlbinlog  [選項]  日志文件名  |  mysql  -uroot  -p123qqq

#mysqlbinlog --start-position=300 --stop-position=1006   /var/lib/mysql/localhost-bin.000001  | mysql  -uroot  -p123456

(7)手動生成新的binlog日志

第1種:mysql> flush  logs;     #刷新一次生成一次

第2種:mysql -uroot -p123qqq -e "flush logs"

#-e就是以mysql登錄方式執行sql命令

第3種:# systemctl  restart mysqld

第4種:#mysqldump -uroot -p123qqq --flush-logs  teadb t7  > /databak/t7.sql  #備份的時候重新生成

(8)刪除已有的binlog日志文件

第1種:mysql> reset  master;   #重置所有

第2種:mysql> purge  master  logs  to  "binlog文件名";

#刪除指定binlog之前的日志

第3種:#rm  -rf   binlog日志文件

 

2 使用第三方軟件進行備份

2.1 安裝Percona

一款強大的在線熱備份工具,備份過程中不鎖庫表,適合生產環境。

主要含兩個組件:

xtrabackup:

innobackupex:

[root@ser51 ~]# yum -y install perl-Digest-MD5 perl-DBD-MySQL

#環境不一樣安裝的依賴包不一樣

[root@ser51 ~]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm

[root@ser51 ~]# rpm -ivh percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm

2.2 innobackupex完全備份

(1) 基本選項:

--host  --user  --port   --password  --databases=  

--no-timestamp #不用日期命名備份文件存儲的子目錄名

--redo-only #日志回滾合并,最后一次增量備份日志回滾不需要此項

--apply-log #準備還原(回滾日志)

--copy-back #恢復數據

--incremental 目錄名 #增量備份存放的路徑

--incremental--basedir=目錄名  

#增量備份時,指定上一次備份數據存儲的目錄名

--incremental--dir=目錄名 #恢復數據時,指定增量備份數據存儲的目錄名

--export #導出表信息

import  #導入表空間

恢復數據的時候要求數據庫目錄必須是空的(/var/lib/mysql)

(2) 使用innobackupex做完全備份和完全恢復

案例:完全備份到/allback中

[root@ser51 ~]#innobackupex --user root  --password 123456 --databases="mysql performance_schema sys db66" /allback

#databases:要備份的數據庫名  /allback創建的時候自動生成,無需創建

[root@ser51 ~]#ls /allback/2018-01-22_21-19-33/

#查看生成的備份文件

[root@ser51 ~]#innobackupex --user root  --password 123456 --databases="mysql performance_schema sys db66" --apply-log  /allback/2018-01-22_21-19-33     

#同步日志

[root@ser51 ~]#rm -rf /var/lib/mysql/  #恢復時要求清空

[root@ser51 ~]#mkdir /var/lib/mysql  #創建新的

[root@ser51 ~]#innobackupex --user root  --password 123456 --databases="mysql performance_schema sys db66" --copy-back  /allback/2018-01-22_21-19-33   

#恢復數據

[root@ser51 ~]#ls -ld /var/lib/mysql  #查看目錄的屬性

[root@ser51 ~]#chown -R mysql:mysql /var/lib/mysql

#更改為所有者,屬組為mysql

[root@ser51 ~]#systemctl restart mysqld   #重啟服務

[root@ser51 ~]#mysql -uroot -p123456     #進入查看是否恢復成功

 

如果服務沒有成功?

mv /etc/my.cnf  /etc/my.cnf.back

mysql_install_db --user=mysql --datadir=/var/lib/mysql

2.3 innobackupex增量備份

(1) 條件

必須有一次完全備份,本例以備份到/onedir為例

第一次增量備份到/new1dir中

第二次增量備份到/new2dir中

(2)增量備份

第一步:完全備份

[root@ser51 ~]#innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66" /onedir  --no-timestamp

第二步:改變db66數據庫表中的數據

進行第一次的增量備份到/new1dir

[root@ser51 ~]#innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66" --incremental  /new1dir  --incremental-basedir=/onedir --no-timestamp

#增量備份時,指定上一次備份數據存儲的目錄名

第三步:再次改變db66數據庫表中的數據

進行第二次的增量備份到/new2dir

[root@ser51 ~]#innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66" --incremental  /new2dir  --incremental-basedir=/new1dir --no-timestamp

第四步:數據恢復

[root@ser51 ~]# innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66"

--apply-log  --redo-only  /onedir   #恢復完全備份日志

[root@ser51 ~]# innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66"

--apply-log  --redo-only  /onedir/  --incremental-dir=/new1dir

#恢復增量日志

[root@ser51 ~]# innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66"

--apply-log  --redo-only  /onedir/  --incremental-dir=/new2dir

#恢復增量日志

[root@ser51 ~]# innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66" --copy-back /onedir  #恢復文件

[root@ser51 ~]# chown -R mysql:mysql /var/lib/mysql/

[root@ser51 ~]# systemctl restart mysqld

登錄數據庫查看數據是否恢復

2.4 增量備份原理:

在/var/lib/mysql/下存在事務日志ib_logfile0 和ib_logfile1  ibdata1

備份之后同步日志會在新的備份的文件內存在以下兩個文件:

xtrabackup_checkpoints #存在lsn:日志序列號

xtrabackup_logfile  #日志文件

每一次的增量恢復日志時,會和完全備份的日志進行合并,并且日志序列號會發生變化,這個變化記錄了合并的序列號位置,同時會把增量備份的數據合并到完全備份中。

[root@ser51 ~]# cat /onedir/xtrabackup_checkpoints

[root@ser51 ~]# cat /new1dir/xtrabackup_checkpoints

[root@ser51 ~]# cat /new2dir/xtrabackup_checkpoints

2.5恢復完全備份數據中的某張表

(1)刪除表空間命令

mysql> alter  table 庫.表  discard  tablespace;

(2)前提完全備份的數據庫:

#innobackupex --user root --password 123456  --databases="db66"   /db66bak   --no-timestamp

#ls /db66bak

(3)mysql> use db66;

mysql> drop  table  a;  #刪除表a,對表a操作恢復的過程

mysql> create  table a(id int); # 建空表,表字段信息必須和原來一致

#ls /var/lib/mysql/db66/

a.frm  a.ibd

(4)導出表信息

#innobackupex --user root --password 123456

--databases="db66" --apply-log --export /db66bak  

#ls /db66bak/db66/ #查看發生了什么變化

(5)刪除表空間

mysql> alter  table db66.a  discard  tablespace;  

#ls /var/lib/mysql/db66/

(6)把備份目錄下導出的表信息文件拷貝到數據庫目錄下

# cp /db66bak/db66/a.{cfg,exp,ibd}  /var/lib/mysql/db66/

(7)修改文件所有者

# chown  mysql /var/lib/mysql/db66/a.*

(8)導入表空間

mysql> alter  table  db66.a  import  tablespace;

mysql> select  * from  a;

mysql> select  * from  b;


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

韶山市| 武平县| 岗巴县| 荔波县| 朔州市| 旬阳县| 汶上县| 家居| 荔浦县| 曲麻莱县| 宜州市| 西贡区| 泗水县| 枝江市| 新源县| 清苑县| 新余市| 怀远县| 新乡县| 兰考县| 诏安县| 龙海市| 长海县| 南通市| 伊金霍洛旗| 永吉县| 开化县| 承德县| 阿瓦提县| 龙里县| 宣威市| 天台县| 河西区| 南川市| 桐庐县| 黄陵县| 滨海县| 香格里拉县| 沈丘县| 东乌珠穆沁旗| 赤水市|