溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

關(guān)系型數(shù)據(jù)庫(kù)之Mysql備份(五)

發(fā)布時(shí)間:2020-07-25 18:45:46 來(lái)源:網(wǎng)絡(luò) 閱讀:1235 作者:OpenSamlee 欄目:數(shù)據(jù)庫(kù)

二進(jìn)制日志簡(jiǎn)要:

二進(jìn)制日志通常作為備份的重要資源,所以再說(shuō)備份之前我們來(lái)回顧下前面專(zhuān)題講過(guò)的二進(jìn)制日志內(nèi)容。


1.二進(jìn)制日志內(nèi)容

引起mysql服務(wù)器改變的任何操作。

復(fù)制功能依賴(lài)于此日志。

從服務(wù)器通過(guò)主服務(wù)器的二進(jìn)制日志完成主從復(fù)制,在執(zhí)行之前保存于中繼日志中。

從服務(wù)器通??梢躁P(guān)閉二進(jìn)制日志以提升性能。

2.二進(jìn)制文件的格式表現(xiàn)形式:

默認(rèn)在安裝目錄下,存在mysql-bin.000001,mysql-bin.00002的二進(jìn)制文件

另外還有mysql-bin.index用來(lái)記錄被mysql管理的二進(jìn)制文件列表

如果需要?jiǎng)h除二進(jìn)制日志時(shí),切勿直接二進(jìn)制文件,這樣會(huì)導(dǎo)致mysql管理混亂。

3.二進(jìn)制文件查看相關(guān)mysql命令。

#> SHOW MASTER STATUS;查看正在使用的二進(jìn)制文件

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 |    22094 |              |                  |
+------------------+----------+--------------+------------------+

#> FLUSH LOGS;手動(dòng)滾動(dòng)二進(jìn)制日志

mysql> FLUSH LOGS;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000008 |      107 |              |                  |
+------------------+----------+--------------+------------------+
#滾動(dòng)以后,mysql重新創(chuàng)建一個(gè)新的日志mysql-bin.000008

#> SHOW BINARY LOGS 顯示使用過(guò)的二進(jìn)制日志文件。

mysql> SHOW BINARY LOGS;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       126 |
| mysql-bin.000002 |      2576 |
| mysql-bin.000003 |       126 |
| mysql-bin.000004 |       126 |
| mysql-bin.000005 |       126 |
| mysql-bin.000006 |       126 |
| mysql-bin.000007 |     22137 |
| mysql-bin.000008 |       107 |
+------------------+-----------+

#> SHOW BINLOG EVENTS;以表的形式查看二進(jìn)制文件

SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count] 
mysql> SHOW BINLOG EVENTS IN 'mysql-bin.000001' \G;
*************************** 1. row ***************************
   Log_name: mysql-bin.000001
        Pos: 4
 Event_type: Format_desc
  Server_id: 1
End_log_pos: 107
       Info: Server ver: 5.5.33-log, Binlog ver: 4


4.MySQL二進(jìn)制日志文件讀取工具mysqlbinlog

Usage: mysqlbinlog [options] log-files            
     --start-datetime
     --stop-datetime
     --start-position
     --stop-position

截取指定位置的日志記錄

# mysqlbinlog --start-position 15642 --stop-position 15643 /mydata/data/mysql-bin.000001
--截取結(jié)果如下:
# at 15642
#160612 16:56:52 server id 1  end_log_pos 15760     Query    thread_id=6    exec_time=0    error_code=0
use `hellodb`/*!*/;
根據(jù)以上截取結(jié)果第二行,進(jìn)行解釋二進(jìn)制日志內(nèi)容            
     1)時(shí)間點(diǎn): 160612 16:56:52
     2)服務(wù)器ID: server id 1 服務(wù)器ID主要用于標(biāo)記日志產(chǎn)生的服務(wù)器,主要用于雙主模型中,互為主從,確保二進(jìn)制文件不會(huì)被相互循環(huán)復(fù)制
     3)記錄類(lèi)型: Query  
     4)線(xiàn)程號(hào): thread_id = 6 
     5)語(yǔ)句的時(shí)間戳和寫(xiě)入二進(jìn)制日志文件的時(shí)間差; exec_time=0 
     6)事件內(nèi)容
     7)事件位置 #at 15642 
     8)錯(cuò)誤代碼 error_code=0 
     9)事件結(jié)束位置 end_log_pos也就是下一事件開(kāi)始的位置


5.二進(jìn)制日志格式

由bin_log_format={statement|row|mixed}定義

1)statement:基于語(yǔ)句,記錄生成數(shù)據(jù)的語(yǔ)句

#缺點(diǎn)在于如果當(dāng)時(shí)插入信息為函數(shù)生成,有可能不同時(shí)間點(diǎn)執(zhí)行結(jié)果不一樣。

例如:

mysql > INSERT INTO tb1 VALUE(CURRENT_DATE());

2)row:基于行數(shù)據(jù)

缺點(diǎn)在于,有時(shí)候數(shù)據(jù)量會(huì)過(guò)大

3)mixed:混合模式,又mysql自行決定何時(shí)使用statement,何時(shí)使用row模式


6.二進(jìn)制相關(guān)參數(shù)總結(jié):

1)log_bin = {ON|OFF} 還可以是個(gè)文件路徑,主要用于控制全局binlog的存放位置和是否開(kāi)啟

2)log_bin_trust_function_creators 是否記錄在

3)sql_log_bin = {ON|OFF} 會(huì)話(huà)級(jí)別是否關(guān)閉binlog, 如果關(guān)閉當(dāng)前會(huì)話(huà)內(nèi)的操作將不會(huì)記錄

4)sync_binlog 是否馬上同步事務(wù)類(lèi)操作到二進(jìn)制日志中

5)binlog_format = {statement|row|mixed} 二進(jìn)制日志的格式,上面單獨(dú)提到了

6)max_binlog_cache_size = 二進(jìn)制日志緩沖空間大小,僅用于緩沖事務(wù)類(lèi)的語(yǔ)句;

7)max_binlog_stmt_cache_size = 語(yǔ)句緩沖,非事務(wù)類(lèi)和事務(wù)類(lèi)共用的空間大小

8)max_binlog_size = 二進(jìn)制日志文件上限,超過(guò)上限后則滾動(dòng)

9)刪除二進(jìn)制日志
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }

刪除二進(jìn)制日志例:

mysql> PURGE BINARY LOGS TO 'mysql-bin.000001';
mysql> PURGE BINARY LOGS BEFORE '2016-06-12 00:00:00';

Tips:切勿將二進(jìn)制日志與數(shù)據(jù)文件放在同一設(shè)備及同一目錄下。


二進(jìn)制日志備份與恢復(fù):

為什么要做備份:

1.災(zāi)難恢復(fù)

2.審計(jì),數(shù)據(jù)庫(kù)在過(guò)去某一個(gè)時(shí)間點(diǎn)是什么樣的

3.測(cè)試


備份目的是什么呢?

1.用于恢復(fù),例如:數(shù)據(jù)誤刪除、數(shù)據(jù)庫(kù)損壞。

2.備份結(jié)束后,需要周期性的做恢復(fù)測(cè)試,以便保證備份的數(shù)據(jù)的完整。


備份類(lèi)型:

1.根據(jù)備份時(shí),服務(wù)器是否在線(xiàn)

1)冷備(cold backup): 服務(wù)器離線(xiàn),讀寫(xiě)操作都不能進(jìn)行

2)溫備份:全局施加鎖共享鎖,只能讀不能寫(xiě)

3)熱備(hot backup):數(shù)據(jù)庫(kù)在線(xiàn),讀寫(xiě)照樣進(jìn)行

2.根據(jù)備份時(shí)的數(shù)據(jù)集分類(lèi)

1)完全備份(full backup)

2)部分備份(partial backup)

3.根據(jù)備份時(shí)的接口

1)物理備份(physical backup):直接賦值數(shù)據(jù)文件,打包歸檔

特點(diǎn):

不需要額外工具,直接歸檔命令即可,但是可以跨平臺(tái)能比較差,如果數(shù)據(jù)量超過(guò)幾十個(gè)G,則使用于物理備份

2)邏輯備份(logical backup): 把數(shù)據(jù)抽取保存在sql腳本中

特點(diǎn):

可以使用文本編輯器編輯

導(dǎo)入方便,直接讀取sql語(yǔ)句即可;

邏輯備份恢復(fù)時(shí)間慢,占據(jù)空間大;

無(wú)法保證浮點(diǎn)數(shù)的精度;

恢復(fù)完數(shù)據(jù)庫(kù)后需要重建索引;

4.根據(jù)備份整個(gè)數(shù)據(jù)還是變化數(shù)據(jù)

1)完全備份 full backup

2)增量備份 incremental backup

在不同時(shí)間點(diǎn)起始備份一段數(shù)據(jù)

比較節(jié)約空間

3)差異備份 differential backup

5.備份策略,需要考慮因素如下:

備份方式

備份實(shí)踐

備份成本

鎖時(shí)間

時(shí)長(zhǎng)

性能開(kāi)銷(xiāo)

恢復(fù)成本

恢復(fù)時(shí)長(zhǎng)

可以容忍丟失的數(shù)據(jù)量

6.備份內(nèi)容

1)數(shù)據(jù)庫(kù)中的數(shù)據(jù)

2)配置文件

3)mysql中的代碼:存儲(chǔ)過(guò)程,存儲(chǔ)函數(shù),觸發(fā)器

4)OS相關(guān)的配置文件,crontab中的備份策略腳本

5)如果是主從復(fù)制的場(chǎng)景中:跟復(fù)制相關(guān)的信息

6)二進(jìn)制日志文件需要定期備份,一旦發(fā)現(xiàn)二進(jìn)制文件出現(xiàn)問(wèn)題,需要馬上對(duì)數(shù)據(jù)進(jìn)行完全備份。


7.常用的備份工具

1)mysqldump:邏輯備份工具

innodb:熱備,溫備

MyISAM,Aria:溫備

單線(xiàn)程備份恢復(fù)比較慢

2)mysqldumper:多線(xiàn)程的mysqldump

3)vm-snapshot:

接近于熱備的工具:因?yàn)橐日?qǐng)求全局鎖,而后創(chuàng)建快照,并在創(chuàng)建快照完成后釋放全局鎖;

使用cp、tar等工具進(jìn)行物理備份

備份與恢復(fù)速度較快

但是很難實(shí)現(xiàn)增量備份,并且請(qǐng)求全局需要等待一段時(shí)間,在繁忙的服務(wù)器上尤其如此;

4)通過(guò)查詢(xún)語(yǔ)句備份數(shù)據(jù):

mysql > SELECT * FROM tb1 INTO OUTFILE '/path/to/somefile';    --導(dǎo)出查詢(xún)數(shù)據(jù)為文本文件
mysql > LOAD DATA INFILE '/path/from/somefile';                --導(dǎo)入文本文件至數(shù)據(jù)庫(kù)中
部分備份工具,不會(huì)備份關(guān)系定義,僅備份表中的數(shù)據(jù);
邏輯備份鞏固,快于mysqldump,因?yàn)椴粋浞荼砀袷叫畔?/pre>

5)Innobase:商業(yè)備份工具,innobackup

InnoDB熱備,增量備份

MyISAM溫備,不支持增量,只有完全備份

屬于物理備份,速度快;

6)Xtrabackup:由Percona提供的開(kāi)源備份工具

InnoDB熱備,增量備份;

MyISAM溫備,不支持增量;

7)mysqlhotcopy:接近冷備,基本不使用。


mysqldump工具基本使用

1.mysqldump [OPTIONS] database [tables....]

還原庫(kù)時(shí)數(shù)據(jù)庫(kù)必須存在,不存在需要手動(dòng)創(chuàng)建

--all-databases: 備份所有庫(kù)    
    --databases db1 db2 ...: 備份指定的多個(gè)庫(kù),如果使用此命令,恢復(fù)時(shí)將不用手動(dòng)創(chuàng)建庫(kù)
    --lock-all-tables:請(qǐng)求鎖定所有表之后再備份,對(duì)MyISAM、InnoDB、Aria做溫備
    --lock-table: 對(duì)正在備份的表加鎖,但是不建議使用,如果其它表被修改,則備份后表與表之間將不同步
    --single-transaction: 能夠?qū)nnoDB存儲(chǔ)引擎實(shí)現(xiàn)熱備;
    啟動(dòng)一個(gè)很大的大事物,基于MOCC可以保證在事物內(nèi)的表版本一致
    自動(dòng)加鎖不需要,再加--lock-table, 可以實(shí)現(xiàn)熱備
備份代碼:
    --events: 備份事件調(diào)度器代碼
    --routines: 備份存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)
    --triggers:備份觸發(fā)器
備份時(shí)滾動(dòng)日志:
    --flush-logs: 備份前、請(qǐng)求到鎖之后滾動(dòng)日志;
    方恢復(fù)備份時(shí)間點(diǎn)以后的內(nèi)容
復(fù)制時(shí)的同步位置標(biāo)記:主從架構(gòu)中的,主服務(wù)器數(shù)據(jù)。效果相當(dāng)于標(biāo)記一個(gè)時(shí)間點(diǎn)。
    --master-data=[0|1|2]
    0:不記錄
    1:記錄為CHANGE MASTER語(yǔ)句
    2:記錄為注釋的CHANGE MASTER語(yǔ)句

2.使用mysqldump備份簡(jiǎn)要過(guò)程如下:

1)請(qǐng)求鎖:-lock-all-tables或使用-singe-transaction進(jìn)行innodb熱備;

2)滾動(dòng)日志: -flush-logs

3)選定要備份的數(shù)據(jù)庫(kù):-databases

4)記錄二進(jìn)制日志文件及位置:-master-data=

mysql > FLUSH TABLES WITH READ LOCK;

3.恢復(fù):

恢復(fù)過(guò)程無(wú)需寫(xiě)到二進(jìn)制日志中

Tips:關(guān)閉二進(jìn)制日志,關(guān)閉其他用戶(hù)連接;

4.備份策略:基于mysqldump

備份:mysqldump+二進(jìn)制日志文件;

周日做一次完全備份:備份的同時(shí)滾動(dòng)日志

周一至周六:備份二進(jìn)制日志;

恢復(fù):

完全備份+各二進(jìn)制日志文中至此刻的事件


5.二進(jìn)制備份恢復(fù)使用案例

1)完全備份mysql數(shù)據(jù)庫(kù),并實(shí)現(xiàn)還原

備份之前的數(shù)據(jù)庫(kù)及數(shù)據(jù)情況

mysql> SHOW DATABASES;    --查詢(xún)當(dāng)前數(shù)據(jù)庫(kù)服務(wù)器下所有的數(shù)據(jù)庫(kù)
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
--開(kāi)啟mysql二進(jìn)制日志功能
# vim /etc/my.cnf 
[server]
log-bin=/mydata/data/mysql-bin
--修改配置文件后重啟mysql服務(wù)
# service mysqld restart
--經(jīng)安全考慮在備份的時(shí)候最好不要使用管理員賬號(hào)操作,所以需要?jiǎng)?chuàng)建一個(gè)專(zhuān)門(mén)的用戶(hù)用來(lái)做mysqldump備份
mysql> GRANT SELECT,SHOW DATABASES,LOCK TABLES,RELOAD,EVENT,SUPER ON *.* TO 'sqldump'@'172.16.100.%' IDENTIFIED BY 'sqldum';

然后使用mysqldump進(jìn)行備份

# mysqldump --events --master-data=2 --all-databases --lock-all-tables --flush-logs -usqldump -h272.16.100.7 -psqldump > /tmp/all_dump_bak.sql
以上賦予sqldump用戶(hù)權(quán)限對(duì)應(yīng)分析:
SHOW DATABASES --> --all-databases
LOCK TABLES --> --lock-all-tables
RELOAD ---> --flush-logs
EVENT ---> --events
SUPER ---> --master-data 主要授予SHOW MASTER STATUS權(quán)限

在hellodb.students表中插入一行,再刪除hellodb庫(kù),然后再恢復(fù)
mysql> INSERT hellodb.students (Name,Age,Gender) VALUE ('Samlee GZ',28,'M');
mysql> DROP DATABASE hellodb;

恢復(fù):
此時(shí)需要關(guān)閉session級(jí)別的二進(jìn)制日志功能,恢復(fù)內(nèi)容不記錄日志
mysql> SET SESSION sql_log_bin='OFF';
mysql> SOURCE /tmp/all_dump_bak.sql;

此時(shí)數(shù)據(jù)庫(kù)恢復(fù)到,插入Samlee GZ 這一行之前的數(shù)據(jù),然后通過(guò)二進(jìn)制日志恢復(fù)直到數(shù)據(jù)庫(kù)被刪除之前的內(nèi)容
由于設(shè)置了--master-data選項(xiàng),所以在備份文件中可以找到如下一行
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=107;
這一行標(biāo)記了新的二進(jìn)制文件從那個(gè)點(diǎn)起始,通過(guò)查看二進(jìn)制日志mysql_bin.000010可以得知,還需要恢復(fù)107到340也就是hellodb被刪除之前的數(shù)據(jù)
# mysqlbinlog --start-position 107 --stop-position 340 /mydata/data/mysql-bin.000010 > /tmp/binlog107_340.sql
mysql> SOURCE /tmp/binlog107_340.sql;
mysql> SELECT * FROM hellodb.students;--查詢(xún)我們可以看到最后一行是自己插入的數(shù)據(jù)
|    26 | Samlee GZ     |  28 | M      |    NULL |      NULL |

2)使用shell腳本自動(dòng)定時(shí)備份--mysqldump方式:

腳本內(nèi)容如下:

#!/bin/bash
#
## Using mysqldump to backup the all databases
function backup {
    prefix=$1
    outputdir=$2
    [ -d $outputdir ] || (echo "No output dir,create one!" && mkdir -p $outputdir)
    now=`/bin/date +'%Y_%b_%d_%k%M'`
    mysqldump='/usr/local/mysql/bin/mysqldump'
    mysqldump --events -master-data=2 --all-databases --single-transaction --flush-logs -usqldump -h272.16.100.7 -psqldump > $outputdir/${prefix}_${now}.sql
}
function main {
    case $# in
    2)
    backup $1 $2
    ;;
    *)
    echo 'Usage: ./mysqldump_backup.sh prefix outputdir'
    ;;
    esac
}
main $*
You have new mail in /var/spool/mail/root

設(shè)置周期任務(wù)計(jì)劃表

# crontab -e            
* * * * * /usr/local/mysql/bin/mysqldump_backup.sh back /tmp/mysqlback
# ll /tmp/mysqlback/    --實(shí)現(xiàn)每分鐘備份一次
-rw-r--r-- 1 root root 0 Jun 14 11:13 back_2016_Jun_14_1113.sql
-rw-r--r-- 1 root root 0 Jun 14 11:14 back_2016_Jun_14_1114.sql
-rw-r--r-- 1 root root 0 Jun 14 11:15 back_2016_Jun_14_1115.sql
-rw-r--r-- 1 root root 0 Jun 14 11:16 back_2016_Jun_14_1116.sql
-rw-r--r-- 1 root root 0 Jun 14 11:17 back_2016_Jun_14_1117.sql
-rw-r--r-- 1 root root 0 Jun 14 11:18 back_2016_Jun_14_1118.sql
-rw-r--r-- 1 root root 0 Jun 14 11:19 back_2016_Jun_14_1119.sql
-rw-r--r-- 1 root root 0 Jun 14 11:20 back_2016_Jun_14_1120.sql

lvm-snapshot:基于LVM快照的備份

關(guān)于快照:

1.事務(wù)日志跟數(shù)據(jù)文件必須在同一個(gè)卷上;

2.剛剛創(chuàng)立的快照卷,里面沒(méi)有任何數(shù)據(jù),所有的數(shù)據(jù)均來(lái)源于原卷

3.一旦員卷數(shù)據(jù)發(fā)生修改,修改的數(shù)據(jù)將復(fù)制到快照卷中,此時(shí)訪(fǎng)問(wèn)數(shù)據(jù)-部分來(lái)自于快照卷,一部分來(lái)自于原卷

4.當(dāng)快照使用過(guò)程中,如果修改的數(shù)據(jù)量大于快照卷容量,則會(huì)導(dǎo)致快照卷崩潰。

5.快照卷本身不是備份,只是提供一個(gè)實(shí)踐一致性的訪(fǎng)問(wèn)目錄。

基于快照備份幾乎為熱備:

1.創(chuàng)建快照卷之前,要請(qǐng)求MySQL的全局鎖;在快照創(chuàng)建完成之后釋放鎖;

2.如果是Innodb引擎,當(dāng)flush tables后會(huì)有一部分保存在事務(wù)日志中,卻不在文件中。因此恢復(fù)時(shí)候,需要事務(wù)日志和數(shù)據(jù)文件

但是釋放鎖以后,事務(wù)日志的內(nèi)容會(huì)同步數(shù)據(jù)文件中,因此備份內(nèi)容并不絕對(duì)是鎖釋放時(shí)刻的內(nèi)容,由于有些未完成的事務(wù)已經(jīng)完成,但在備份數(shù)據(jù)中因?yàn)闆](méi)有完成而回滾。因此需要借助二進(jìn)制日志往后走一段。

基于快照備份的注意事項(xiàng):

1.事務(wù)日志跟數(shù)據(jù)文件必須在同一個(gè)卷中;

2.創(chuàng)建快照卷之前,要請(qǐng)求MySQL的全局鎖;在快照創(chuàng)建完成之后釋放鎖;

3.請(qǐng)求全局鎖完成之后,做一次日志滾動(dòng);做二進(jìn)制日志文件及位置標(biāo)記(手動(dòng)進(jìn)行);

備份與恢復(fù)的簡(jiǎn)要步驟如下:

備份

1.請(qǐng)求全局鎖,并滾動(dòng)日志

mysql > FLUSH TABLES WITH READ LOCK;
mysql > FLUSH LOGS;

2.生成二進(jìn)制日志文件及位置標(biāo)記(手動(dòng)進(jìn)行)

# mysql -e 'SHOW MASTER STATUS' > /path/to/orignal_volume

3.創(chuàng)建快照卷

# lvcreate -L -s -n -p r /path/to/some_lv

4.釋放全局鎖

5.掛載快照卷并備份

6.備份完成之后,刪除快照卷

恢復(fù):

1.二進(jìn)制日志保存好;

提取備份之后的所有事件至某sql腳本中

2.還原數(shù)據(jù),修改權(quán)限及屬主屬組等,并啟動(dòng)mysql

3.做即時(shí)點(diǎn)還原

4.生產(chǎn)環(huán)境下,一次大型恢復(fù)后,需要馬上進(jìn)行一次完全備份。


使用快照卷備份恢復(fù)mysql實(shí)例:

環(huán)境,實(shí)現(xiàn)創(chuàng)建一個(gè)myvg的卷組,mydata邏輯卷用來(lái)存儲(chǔ)mysql數(shù)據(jù),掛載至/mydata/data

備份:

1.創(chuàng)建備份專(zhuān)用的賬號(hào),授予權(quán)限FLUSH LOGS和LOCK TABLES

mysql> GRANT RELOAD,LOCK TABLES,SUPER ON *.* TO 'lvm'@'172.16.100.%' IDENTIFIED BY 'lvm';

mysql> FLUSH PRIVILEGES;

2.請(qǐng)求全局鎖,鎖定數(shù)據(jù)庫(kù)并且滾動(dòng)日志

mysql > FLUSH TABLES WITH READ LOCK;

mysql > FLUSH LOGS;

3.記錄備份點(diǎn)

# mysql -ulvm -h272.16.100.7 -plvm -e 'SHOW MASTER STATUS' > /tmp/backp_point.txt
# cat /tmp/backp_point.txt
File    Position    Binlog_Do_DB    Binlog_Ignore_DB
mysql-bin.000010    499

4.創(chuàng)建快照卷并掛載快照卷及創(chuàng)建備份文件提取點(diǎn)

# lvcreate -L 100M -s -n mydata-snap -p r /dev/myvg/mydata 
# mount -t ext4 -o ro /dev/myvg/mydata-snap /mnt/
#  mkdir /backups

5.釋放鎖

# mysql -ulvm -h272.16.100.7 -plvm -e 'UNLOCK TABLES';
## 模擬寫(xiě)入操作
mysql> UNLOCK TABLES;
mysql> CREATE DATABASE samleedb;

6.復(fù)制快照里面文件至備份文件存儲(chǔ)目錄

# cp -ar /mnt/data/ /backups/data-2016-06-14

7.備份完成,刪除快照卷,減少磁盤(pán)I/O

# umount /mnt/
# lvremove /dev/myvg/mydata-snap

故障模擬恢復(fù): 數(shù)據(jù)庫(kù)存儲(chǔ)目錄損壞或整個(gè)服務(wù)器崩潰,并且數(shù)據(jù)存儲(chǔ)目錄全部被刪除

1.模擬數(shù)據(jù)損壞故障:

[root@mysql ~]# service mysqld stop
Shutting down MySQL.                                       [  OK  ]
[root@mysql ~]# rm -rf /mydata/data/*
[root@mysql ~]# service mysqld start
Starting MySQL....The server quit without updating PID file[FAILED]a/data/mysql.samlee.com.pid).
--此時(shí)發(fā)現(xiàn)mysql無(wú)法啟動(dòng)了

2.將備份的數(shù)據(jù)文件復(fù)制回源目錄再啟動(dòng)mysql

# cp -arp /backups/data-2016-06-14/* /mydata/data/
# service mysql start
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| samlee             |
| test               |
+--------------------+
此時(shí)顯示沒(méi)有samleedb,因?yàn)檫@個(gè)是備份之后創(chuàng)建的,因此需要通過(guò)之前記錄的二進(jìn)制日志位置還原

3.查看之前記錄的記錄點(diǎn)。向后還原

# cat /tmp/backp_point.txt 
File    Position    Binlog_Do_DB    Binlog_Ignore_DB
mysql-bin.000010    499    
# mysqlbinlog /mydata/data/mysql-bin.000010 --start-position 499 > /tmp/2016_06_14.sql
mysql> source /tmp/2016_06_14.sql;
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| samlee             |
| test               |
| samleedb             |
+--------------------+

使用Xtrabackup進(jìn)行MySQL備份

安裝:

1.簡(jiǎn)介

  Xtrabackup是percona提供的mysql數(shù)據(jù)庫(kù)備份工具,據(jù)官方介紹,這也是世界上唯一一款開(kāi)源的能夠?qū)nnodb和xtradb數(shù)據(jù)庫(kù)進(jìn)行熱備的工具。特點(diǎn):

1)備份過(guò)程快速、可靠;

2)備份過(guò)程不會(huì)打斷正在執(zhí)行的事務(wù);

3)能夠基于壓縮等功能節(jié)約磁盤(pán)空間和流量;

4)自動(dòng)實(shí)現(xiàn)備份校驗(yàn);

5)還原速度快;


2.安裝及安裝源獲取

其最新版本可以從以下URL獲得:

https://www.percona.com/downloads/XtraBackup/

安裝

# yum -y install  percona-toolkit-2.2.16-1.noarch.rpm 
# yum -y install  libev-4.15-1.el6.rf.x86_64.rpm
# yum -y install  percona-xtrabackup-2.3.2-1.el6.x86_64.rpm


備份實(shí)現(xiàn):

1.完全備份:

如果要使用一個(gè)最小權(quán)限的用戶(hù)進(jìn)行備份,則可基于如下命令創(chuàng)建此類(lèi)用戶(hù):

Usage: innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/
--user:需要?jiǎng)?chuàng)建一個(gè)擁有最小權(quán)限的用戶(hù)
mysql> GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT ON *.* TO 'xtrauser'@'localhost' IDENTIFIED BY 'xtrauser';
mysql> REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'xtrauser';
mysql> GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT ON *.* TO 'xtrauser'@'localhost';
mysql> FLUSH PRIVILEGES;

/path/to/BACKUP_DIR:備份出來(lái)的數(shù)據(jù)存儲(chǔ)目錄,外加包含一些xtrabackup的元數(shù)據(jù)

使用innobackupex備份時(shí),其會(huì)調(diào)用xtrabackup備份所有的InnoDB表,復(fù)制所有關(guān)于表結(jié)構(gòu)定義的相關(guān)文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關(guān)文件,同時(shí)還會(huì)備份觸發(fā)器和數(shù)據(jù)庫(kù)配置信息相關(guān)的文件。這些文件會(huì)被保存至一個(gè)以時(shí)間命令的目錄中。


示例:備份

# innobackupex --user=xtrauser --password=xtrauser /tmp/xtrabackup/
160615 09:47:34 Executing UNLOCK TABLES
160615 09:47:34 All tables unlocked
160615 09:47:34 Backup created in directory '/tmp/xtrabackup//2016-06-15_09-47-27'
MySQL binlog position: filename 'mysql-bin.000011', position '655'
160615 09:47:34 [00] Writing backup-my.cnf
160615 09:47:34 [00]        ...done
160615 09:47:34 [00] Writing xtrabackup_info
160615 09:47:34 [00]        ...done
xtrabackup: Transaction log of lsn (1604789) to (1604789) was copied.
160615 09:47:35 completed OK!

看到最后一行的時(shí)候,說(shuō)明備份已經(jīng)完成。


在備份的同時(shí),innobackupex還會(huì)再備份目錄中創(chuàng)建如下文件:

(1)xtrabackup_checkpoints —— 備份類(lèi)型(如完全或增量)、備份狀態(tài)(如是否已經(jīng)為prepared狀態(tài))和LSN(日志序列號(hào))范圍信息;

# cat xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 1604789
last_lsn = 1604789
compact = 0
recover_binlog_info = 0

每個(gè)InnoDB頁(yè)(通常為16k大小)都會(huì)包含一個(gè)日志序列號(hào),即LSN。LSN是整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的系統(tǒng)版本號(hào),每個(gè)頁(yè)面相關(guān)的LSN能夠表明此頁(yè)面最近是如何發(fā)生改變的

在mysql中,存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)塊會(huì)有按照順序的ID,如果某一塊數(shù)據(jù)被修改,將會(huì)賦予新的ID。根據(jù)這些ID,可以標(biāo)記數(shù)據(jù)的新老程度。xtrabackup也就是使用這些ID來(lái)進(jìn)行備份,和增量備份。


2.xtrabackup_binlog_info: mysql服務(wù)器當(dāng)前正在使用的二進(jìn)制日志文件及至備份這 一刻位置二進(jìn)制日志事件的位置。

# cat xtrabackup_binlog_info 
mysql-bin.000011    655

3. xtrabackup_info: 包含很多xtrabackup工具信息以及所備份的數(shù)據(jù)庫(kù)信息

# cat xtrabackup_info 
uuid = 21c7cde7-329b-11e6-b888-000c2923351b
name = 
tool_name = innobackupex
tool_command = --user=xtrauser --password=... /tmp/xtrabackup/
tool_version = 2.3.2
ibbackup_version = 2.3.2
server_version = 5.5.33-log
start_time = 2016-06-15 09:47:31
end_time = 2016-06-15 09:47:34
lock_time = 0
binlog_pos = filename 'mysql-bin.000011', position '655'
innodb_from_lsn = 0
innodb_to_lsn = 1604789
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N

4.backup-my.cnf —— 備份命令用到的配置選項(xiàng)信息

# cat backup-my.cnf 
# This MySQL options file was generated by innobackupex.

# The MySQL server
[mysqld]
innodb_checksum_algorithm=innodb
innodb_log_checksum_algorithm=innodb
innodb_data_file_path=ibdata1:10M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=5242880
innodb_fast_checksum=false
innodb_page_size=16384
innodb_log_block_size=512
innodb_undo_directory=.
innodb_undo_tablespaces=0

5.xtrabackup_binlog_pos_innodb —— 二進(jìn)制日志文件及用于InnoDB或XtraDB表的二進(jìn)制日志文件的當(dāng)前position。

在使用innobackupex進(jìn)行備份時(shí),還可以使用--no-timestamp選項(xiàng)來(lái)阻止命令自動(dòng)創(chuàng)建一個(gè)以時(shí)間命名的目錄;如此一來(lái),innobackupex命令將會(huì)創(chuàng)建一個(gè)BACKUP-DIR目錄來(lái)存儲(chǔ)備份數(shù)據(jù)。


準(zhǔn)備(prepare)一個(gè)完全備份

一般情況下,在備份完成后,數(shù)據(jù)尚且不能用于恢復(fù)操作,因?yàn)閭浞莸臄?shù)據(jù)中可能會(huì)包含尚未提交的事務(wù)或已經(jīng)提交但尚未同步至數(shù)據(jù)文件中的事務(wù)。

因此,此時(shí)數(shù)據(jù)文件仍處理不一致?tīng)顟B(tài)。"準(zhǔn)備"的主要作用正是通過(guò)回滾未提交的事務(wù)及同步提交的事務(wù)至數(shù)據(jù)文件也使得數(shù)據(jù)文件處于一致性狀態(tài)。

innobackupex命令的-apply-log選項(xiàng)可用于實(shí)現(xiàn)上述功能。如下面的命令:實(shí)際上就是把未完成的事務(wù)提交,準(zhǔn)備工作需要在還原之前才執(zhí)行,在這之前都能執(zhí)行準(zhǔn)備工作。

Usage:innobackupex --apply-log /path/to/BACKUP-DIR
示例:
# innobackupex --apply-log /tmp/xtrabackup/2016-06-15_09-47-27/
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 1605142
160615 10:26:54 completed OK!
看到這幾行說(shuō)明已經(jīng)完成"準(zhǔn)備"
在實(shí)現(xiàn)"準(zhǔn)備"的過(guò)程中,innobackupex通常還可以使用--use-memory選項(xiàng)來(lái)指定其可以使用的內(nèi)存大小,默認(rèn)通常為100M。如果有足夠的內(nèi)容可用,可以多劃分一些內(nèi)存給prepare的過(guò)程使用,以提高其完成速度。


從一個(gè)完全備份中恢復(fù)數(shù)據(jù)

注意:恢復(fù)不用啟動(dòng)MySQL
innobackupex命令的--copy-back選項(xiàng)用于執(zhí)行恢復(fù)操作,其通過(guò)復(fù)制所有數(shù)據(jù)相關(guān)的文件至mysql服務(wù)器DATADIR目錄中來(lái)執(zhí)行恢復(fù)過(guò)程。innobackupex通過(guò)backup-my.cnf來(lái)獲取DATADIR目錄的相關(guān)信息。

usage:innobackupex --copy-back  /path/to/BACKUP-DIR
# innobackupex --copy-back /tmp/xtrabackup/2016-06-15_09-47-27/
如果執(zhí)行正確,其輸出信息的最后幾行通常如下:
160615 10:46:34 [01]        ...done
160615 10:46:34 completed OK!

當(dāng)數(shù)據(jù)恢復(fù)至DATADIR目錄以后,還需要確保所有數(shù)據(jù)文件的屬主和屬組均為正確的用戶(hù),如mysql,否則,在啟動(dòng)mysqld之前還需要事先修改數(shù)據(jù)文件的屬主和屬組。

# chown -R mysql:mysql /mydata/data/
# service mysqld start


使用innobackupex進(jìn)行增量備份

            每個(gè)InnoDB的頁(yè)面都會(huì)包含一個(gè)LSN信息,每當(dāng)相關(guān)的數(shù)據(jù)發(fā)生改變,相關(guān)的頁(yè)面的LSN就會(huì)自動(dòng)增長(zhǎng)。這正是InnoDB表可以進(jìn)行增量備份的基礎(chǔ),即innobackupex通過(guò)備份上次完全備份之后發(fā)生改變的頁(yè)面來(lái)實(shí)現(xiàn)。

        1. 備份過(guò)程: 

            要實(shí)現(xiàn)第一次增量備份,可以使用下面的命令進(jìn)行:

usage: innobackupex –incremental /backup –incremental-basedir=BASEDIR
BASEDIR:指的是完全備份所在的目錄,
此命令執(zhí)行結(jié)束后,innobackupex命令會(huì)在/backup目錄中創(chuàng)建一個(gè)新的以時(shí)間命名的目錄以存放所有的增量備份數(shù)據(jù)。另外,在執(zhí)行過(guò)增量備
份之后再一次進(jìn)行增量備份時(shí),其–incremental-basedir應(yīng)該指向上一次的增量備份所在的目錄。

                需要注意的是,增量備份僅能應(yīng)用于InnoDB或XtraDB表,對(duì)于MyISAM表而言,執(zhí)行增量備份時(shí)其實(shí)進(jìn)行的是完全備份。


增量備份恢復(fù)案例應(yīng)用:

首先做一次完全備份,在之前完全備份的基礎(chǔ)上做兩次增量備份,之間創(chuàng)建兩個(gè)數(shù)據(jù)庫(kù)。

完全備份:

# innobackupex --user=xtrauser --password=xtrauser --no-timestamp /tmp/xtrabackup/full_backup
--創(chuàng)建測(cè)試數(shù)據(jù)庫(kù)
mysql> CREATE DATABASE samlee1;

第一次增量備份:

# innobackupex --user=xtrauser --password=xtrauser --incremental /tmp/xtrabackup/ --incremental-basedir=/tmp/xtrabackup/full_backup/
mysql> CREATE DATABASE samlee2;

第二次增量備份:

# innobackupex --user=xtrauser --password=xtrauser --incremental /tmp/xtrabackup/ --incremental-basedir=/tmp/xtrabackup/2016-06-15_13-26-08/

2. 準(zhǔn)備過(guò)程

準(zhǔn)備”(prepare)增量備份與整理完全備份有著一些不同,尤其要注意的是:

1)需要在每個(gè)備份(包括完全和各個(gè)增量備份)上,將已經(jīng)提交的事務(wù)進(jìn)行“重放”?!爸胤拧敝?,所有的備份數(shù)據(jù)將合并到完全備份上。

2)基于所有的備份將未提交的事務(wù)進(jìn)行“回滾”。于是,操作就變成了:不能回滾,因?yàn)橛锌赡艿谝淮蝹浞輹r(shí)候沒(méi)提交,在增量中已經(jīng)成功提交

使用方法如下:

# innobackupex --apply-log --redo-only BASE-DIR

接著執(zhí)行:

 # innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1

而后就是第二個(gè)增量

 # innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

這樣一個(gè)個(gè)準(zhǔn)備完成后,所有增量備份將合并至完全備份中。

其中BASE-DIR指的是完全備份所在的目錄,而INCREMENTAL-DIR-1指的是第一次增量備份的目錄,INCREMENTAL-DIR-2指的是第二次增量備份的目錄,其它依次類(lèi)推,即如果有多次增量備份,每一次都要執(zhí)行如上操作;

示例:

# innobackupex --apply-log --redo-only /tmp/xtrabackup/full_backup
# innobackupex --apply-log --redo-only /tmp/xtrabackup/full_backup/ --incremental-dir=/tmp/xtrabackup/2016-06-15_13-26-08
# innobackupex --apply-log --redo-only /tmp/xtrabackup/full_backup/ --incremental-dir=/tmp/xtrabackup/2016-06-15_13-28-42/

 3. 恢復(fù)過(guò)程:與完全備份類(lèi)似,直接copy-back完全備份的那個(gè)目錄。 此時(shí)所有的增量已經(jīng)正好到完全備份的目錄中

# service mysqld stop
# rm -rf /mydata/data/*
# innobackupex --copy-back /tmp/xtrabackup/full_backup/
# chown -R mysql:mysql /mydata/data
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| samlee             |
| samlee1            |
| samlee2            |
| test               |
+--------------------+
可以看到我們前面創(chuàng)建的兩個(gè)數(shù)據(jù)庫(kù)都已經(jīng)恢復(fù)成功了。

Xtrabackup的“流”及“備份壓縮”功能

            Xtrabackup對(duì)備份的數(shù)據(jù)文件支持“流”功能,即可以將備份的數(shù)據(jù)通過(guò)STDOUT傳輸給tar程序進(jìn)行歸檔,而不是默認(rèn)的直接保存至某備份目錄中。要使用此功能,僅需要使用–stream選項(xiàng)即可。如:

Usage: innobackupex –stream=tar  /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz

示例:

# innobackupex --user=xtrauser --password=xtrauser --stream=tar /tmp/xtrabackup/ | gzip > /tmp/xtrabackup/`date +%F_%H-%M-%S`.tar.gz

甚至也可以使用類(lèi)似如下命令將數(shù)據(jù)備份至其它服務(wù)器:

# innobackupex --stream=tar  /backup | ssh user@www.samlee.com  "cat -  > /backups/`date +%F_%H-%M-%S`.tar"

此外,在執(zhí)行本地備份時(shí),還可以使用--parallel選項(xiàng)對(duì)多個(gè)文件進(jìn)行并行復(fù)制。此選項(xiàng)用于指定在復(fù)制時(shí)啟動(dòng)的線(xiàn)程數(shù)目。當(dāng)然,在實(shí)際進(jìn)行備份時(shí)要利用此功能的便利性,也需要啟用innodb_file_per_table選項(xiàng)或共享的表空間通過(guò)innodb_data_file_path選項(xiàng)存儲(chǔ)在多個(gè)ibdata文件中。對(duì)某一數(shù)據(jù)庫(kù)的多個(gè)文件的復(fù)制無(wú)法利用到此功能。其簡(jiǎn)單使用方法如下:

# innobackupex --parallel  /path/to/backup

同時(shí),innobackupex備份的數(shù)據(jù)文件也可以存儲(chǔ)至遠(yuǎn)程主機(jī),這可以使用--remote-host選項(xiàng)來(lái)實(shí)現(xiàn):

# innobackupex --remote-host=root@www.samlee.com  /path/IN/REMOTE/HOST/to/backup


 導(dǎo)入或?qū)С鰡螐埍?/strong>

            默認(rèn)情況下,InnoDB表不能通過(guò)直接復(fù) 制表文件的方式在mysql服務(wù)器之間進(jìn)行移植,即便使用了innodb_file_per_table選項(xiàng)。而使用Xtrabackup工具可以實(shí)現(xiàn)此 種功能,不過(guò),此時(shí)需要“導(dǎo)出”表的mysql服務(wù)器啟用了innodb_file_per_table選項(xiàng)(嚴(yán)格來(lái)說(shuō),是要“導(dǎo)出”的表在其創(chuàng)建之 前,mysql服務(wù)器就啟用了innodb_file_per_table選項(xiàng)),并且“導(dǎo)入”表的服務(wù)器同時(shí)啟用了 innodb_file_per_table和innodb_expand_import選項(xiàng)。

        在創(chuàng)建數(shù)據(jù)庫(kù)之前,在配置文件中server段下面寫(xiě)入innodb_file_per_table=1

1) “導(dǎo)出”表

導(dǎo)出表是在備份的prepare階段進(jìn)行的,因此,一旦完全備份完成,就可以在prepare過(guò)程中通過(guò)–export選項(xiàng)將某表導(dǎo)出了:

Usage: innobackupex –apply-log –export /path/to/backup

示例:

# innobackupex --user=xtrauser --password=xtrauser /tmp/xtrabackup/
# innobackupex --apply-log --export /tmp/xtrabackup/2016-06-15_14-45-06/
--此命令會(huì)為每個(gè)innodb表的表空間創(chuàng)建一個(gè)以.exp結(jié)尾的文件,這些以.exp結(jié)尾的文件則可以用于導(dǎo)入至其它服務(wù)器。
# ls /tmp/xtrabackup/2016-06-15_14-45-06/hellodb/*.exp
classes.exp  students.exp    scores.exp    toc.exp
coc.exp      teachers.exp    courses.exp


2 )“導(dǎo)入”表

使用show CREATE TABLE mytable; 來(lái)查看原始表創(chuàng)建命令 

要在mysql服務(wù)器上導(dǎo)入來(lái)自于其它服務(wù)器的某innodb表,需要先在當(dāng)前服務(wù)器上創(chuàng)建一個(gè)跟原表表結(jié)構(gòu)一致的表,而后才能實(shí)現(xiàn)將表導(dǎo)入:

事例: 這里以students 表為例:

mysql> SHOW CREATE TABLE hellodb.students \G
*************************** 1. row ***************************
       Table: students
Create Table: CREATE TABLE `students` (
  `StuID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `Name` varchar(50) NOT NULL,
  `Age` tinyint(3) unsigned NOT NULL,
  `Gender` enum('F','M') NOT NULL,
  `ClassID` tinyint(3) unsigned DEFAULT NULL,
  `TeacherID` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`StuID`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8
1 row in set (0.02 sec)
在samlee庫(kù)中創(chuàng)建這個(gè)表:
mysql> CREATE TABLE `students` (
    ->   `StuID` int(10) unsigned NOT NULL AUTO_INCREMENT,
    ->   `Name` varchar(50) NOT NULL,
    ->   `Age` tinyint(3) unsigned NOT NULL,
    ->   `Gender` enum('F','M') NOT NULL,
    ->   `ClassID` tinyint(3) unsigned DEFAULT NULL,
    ->   `TeacherID` int(10) unsigned DEFAULT NULL,
    ->   PRIMARY KEY (`StuID`)
    -> ) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8;
    
 然后將此表的表空間刪除:
 mysql> ALTER TABLE samlee.students DISCARD TABLESPACE;
 接下來(lái),將來(lái)自于“導(dǎo)出”表的服務(wù)器的students表的students.ibd和students.exp文件復(fù)制到當(dāng)前服務(wù)器的數(shù)據(jù)目錄,然后使用如下命令將其“導(dǎo)入”:    
 ##注意權(quán)限
# cp /tmp/xtrabackup/2016-06-15_14-45-06/hellodb/students{.ibd,.exp} /mydata/data/samlee/
# chown mysql.mysql /mydata/data/samlee/students.*
mysql> ALTER TABLE samlee.students IMPORT TABLESPACE;


備份注意:

        1. 將數(shù)據(jù)和備份放在不同的磁盤(pán)設(shè)備上;異機(jī)或異地備份存儲(chǔ)較為理想;

        2. 備份的數(shù)據(jù)應(yīng)該周期性地進(jìn)行還原測(cè)試;

        3. 每次災(zāi)難恢復(fù)后都應(yīng)該立即做一次完全備份;

        4. 針對(duì)不同規(guī)?;蚣?jí)別的數(shù)據(jù)量,要定制好備份策略;

        5. 二進(jìn)制日志應(yīng)該跟數(shù)據(jù)文件在不同磁盤(pán)上,并周期性地備份好二進(jìn)制日志文件;

從備份中恢復(fù)應(yīng)該遵循步驟:

        1. 停止MySQL服務(wù)器;

        2. 記錄服務(wù)器的配置和文件權(quán)限;

        3. 將數(shù)據(jù)從備份移到MySQL數(shù)據(jù)目錄;其執(zhí)行方式依賴(lài)于工具;

        4. 改變配置和文件權(quán)限;

        5. 以限制訪(fǎng)問(wèn)模式重啟服務(wù)器;mysqld的–skip-networking選項(xiàng)可跳過(guò)網(wǎng)絡(luò)功能;

            方法:編輯my.cnf配置文件,添加如下項(xiàng):

            skip-networking

            socket=/tmp/mysql-recovery.sock

        6. 載入邏輯備份(如果有);而后檢查和重放二進(jìn)制日志;

        7. 檢查已經(jīng)還原的數(shù)據(jù);

        8. 重新以完全訪(fǎng)問(wèn)模式重啟服務(wù)器;

            注釋前面在my.cnf中添加的選項(xiàng),并重啟;


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI