日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C語言實現(xiàn)數(shù)據(jù)庫備份和還原(c實現(xiàn)數(shù)據(jù)庫的備份和還原)

隨著信息化和互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,人們對于數(shù)據(jù)的重視程度越來越高。在企業(yè)運營和管理中,數(shù)據(jù)庫作為數(shù)據(jù)管理的主要工具,其重要性不言而喻。但是,即使是最完善的系統(tǒng)也難以避免數(shù)據(jù)丟失、損壞等情況,這時備份和還原數(shù)據(jù)庫就顯得尤為重要。本文將介紹如何用的過程。

企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對外擴展宣傳的重要窗口,一個合格的網(wǎng)站不僅僅能為公司帶來巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺,創(chuàng)新互聯(lián)公司面向各種領(lǐng)域:成都建筑動畫網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷推廣解決方案、網(wǎng)站設(shè)計等建站排名服務(wù)。


一、數(shù)據(jù)庫備份

1. 創(chuàng)建備份文件

需要創(chuàng)建一個備份文件,將需要備份的數(shù)據(jù)庫信息存儲到備份文件中。在C語言中,可以使用fopen函數(shù)創(chuàng)建一個備份文件。有兩種方式可以打開文件,一種是文本文件,一種是二進制文件。

“`

/* 打開備份文件 */

FILE *fp;

fp = fopen(“backup.dat”, “wb”);

if(format == TEXT) {

fp = fopen(“backup.txt”, “w”);

}

“`

其中,format是備份文件的格式,可以通過傳參控制。如果是文本格式,就使用“w”打開文件,如果是二進制格式,就使用“wb”。

2. 遍歷數(shù)據(jù)庫

接下來,需要遍歷數(shù)據(jù)庫中的所有表格和數(shù)據(jù),并將其寫入備份文件中??梢允褂肕ySQL提供的API函數(shù)進行遍歷。

“`

/* 遍歷數(shù)據(jù)庫 */

MYSQL_RES *result;

MYSQL_ROW row;

mysql_query(conn, “show tables”);

result = mysql_use_result(conn);

while((row = mysql_fetch_row(result))) {

// 獲取表名

char table[100];

sprintf(table, “%s”, row[0]);

// 獲取表數(shù)據(jù)

int rows = getRows(conn, table);

mysql_query(conn, “set names utf8”);

sprintf(sql, “select * from %s”, table);

mysql_query(conn,sql);

result = mysql_store_result(conn);

// 寫入表格信息到備份文件中

createTable(fp, rows, result, table);

}

“`

上述代碼中,conn是MySQL連接句柄,getRows函數(shù)是獲取表格的行數(shù)函數(shù),sql是SQL語句,createTable是將表格信息寫入備份文件中的函數(shù)。

3. 關(guān)閉文件

完成備份之后,需要關(guān)閉備份文件,釋放內(nèi)存。

“`

/* 關(guān)閉備份文件 */

fclose(fp);

mysql_free_result(result);

mysql_close(conn);

“`

二、數(shù)據(jù)庫還原

1. 獲取備份文件

在數(shù)據(jù)庫還原的過程中,需要獲取備份文件中的數(shù)據(jù)。同樣,可以使用fopen函數(shù)打開備份文件并讀取備份文件的數(shù)據(jù)。根據(jù)之前備份時選擇的格式,可以通過“r”或“rb”方式打開備份文件。

“`

/* 獲取備份文件 */

FILE *fp;

fp = fopen(“backup.dat”, “rb”);

if(format == TEXT) {

fp = fopen(“backup.txt”, “r”);

}

“`

2. 連接數(shù)據(jù)庫

在獲取備份文件之后,需要連接數(shù)據(jù)庫。同樣,可以使用MySQL提供的API函數(shù)進行連接。

“`

/* 連接數(shù)據(jù)庫 */

MYSQL *conn;

conn = mysql_init(NULL);

mysql_real_connect(conn,”localhost”,”root”,””,”test”, 0, NULL, 0);

“`

3. 讀取備份文件

接下來,需要從備份文件中讀取數(shù)據(jù),并還原到數(shù)據(jù)庫中。具體操作是,讀取備份文件中的表格信息,然后通過SQL語句將表格信息寫入數(shù)據(jù)庫中。

“`

/* 讀取備份文件并還原到數(shù)據(jù)庫中 */

while(fscanf(fp, “%s”, table) != EOF) {

// 獲取表格信息

int rows;

fscanf(fp, “%d”, &rows);

char types[100][100], fields[100][100];

for(int i = 0; i

fscanf(fp, “%s %s”, types[i], fields[i]);

}

// 利用SQL語句將表格信息寫入數(shù)據(jù)庫中

char sql[1000];

sprintf(sql, “create table %s(“, table);

for(int i = 0; i

strcat(sql, fields[i]);

strcat(sql, ” “);

strcat(sql, types[i]);

strcat(sql, “,”);

}

sprintf(sql+strlen(sql)-1, “)”);

mysql_query(conn,sql);

}

“`

上述代碼中,fscanf函數(shù)用于從備份文件中讀取數(shù)據(jù),而sprintf和strcat函數(shù)用于拼接SQL語句。

4. 關(guān)閉文件

還原完成之后,需要關(guān)閉備份文件,并釋放內(nèi)存。

“`

/* 關(guān)閉備份文件 */

fclose(fp);

mysql_close(conn);

“`

三、

本文介紹了如何用的過程。通過遍歷數(shù)據(jù)庫、創(chuàng)建備份文件、讀取備份文件等操作,實現(xiàn)了備份和還原的功能。實際應(yīng)用中,可以根據(jù)需要修改代碼,適應(yīng)不同的數(shù)據(jù)庫系統(tǒng)、備份方式等情況。本文的代碼示例同樣適用于其他編程語言,讀者可以參照代碼實現(xiàn)自己的數(shù)據(jù)庫備份和還原功能。

相關(guān)問題拓展閱讀:

  • windows mysql幾種備份和 恢復(fù)
  • MySQL數(shù)據(jù)庫備份和還原的常用命令?

windows mysql幾種備份和 恢復(fù)

1、復(fù)制date文件夾備份

============================

假想環(huán)境:

MySQL 安裝位置:C:\MySQL

論壇數(shù)據(jù)庫名稱為:bbs

數(shù)據(jù)庫備份目的地:C:\db_bak\

============================

新建db_bak.bat,寫入以下代碼

*******************************Code Start*****************************

net stop mysql

xcopy c:\mysql\data\bbs\*.* c:\db_bak\bbs\%date:~0,10%\ /S /I

net start mysql

*******************************Code End *****************************

然后使用Windows的“計劃任務(wù)”定時執(zhí)行該批處理腳本即可。(例肢擾做如:每天凌晨3點執(zhí)行back_db.bat)

解釋:備份和恢復(fù)的操作都比較簡單,完整性比較高,控制備份周期比較靈活,例如,用%date:~0,10%。此方法適合有獨立主機但對mysql沒有管理經(jīng)驗的用戶。缺點是占用空間比較多,備份期間mysql會短時間斷李掘開(例如:針對30M左右的數(shù)據(jù)庫耗時5s左右),針對%date:~0,10%的用法參考。

2、mysqldump備份成sql文件

==============

假想環(huán)境:

MySQL 安裝位置:C:\MySQL

論壇數(shù)據(jù)庫名稱為:bbs

MySQL root 密碼:123456

數(shù)據(jù)庫備份目的地:D:\db_backup\

腳本:

rem *******************************Code Start*****************************

@echo off

set “Ymd=%date:~,4%%date:~5,2%%date:~8,2%”

C:\MySQL\bin\mysqldump –opt -u root –password=bbs > D:\db_backup\bbs_%Ymd%.sql

@echo on

rem *******************************Code End*****************************

將以上代碼保存為backup_db.bat

然后使用Windows的“計劃任務(wù)”定時執(zhí)行該腳本即可。(例如:每天凌晨5點執(zhí)行back_db.bat)

說明:此方法可以不用關(guān)閉數(shù)據(jù)庫,并且可以按歷衡每一天的時間來名稱備份文件。

通過%date:~5,2%來組合得出當前日期,組合的效果為yyyymmdd,date命令得到的日期格式默認為yyyy-mm-dd(如果不是此格式可以通過pause命令來暫停命令行窗口看通過%date:~,20%得到的當前計算機日期格式),所以通過%date:~5,2%即可得到日期中的第五個字符開始的兩個字符,例如今天為,通過%date:~5,2%則可以得到02。(日期的字符串的下標是從0開始的)

3、利用WinRAR對MySQL數(shù)據(jù)庫進行定時備份。

對于MySQL的備份,更好的方法就是直接備份MySQL數(shù)據(jù)庫的Data目錄。下面提供了一個利用WinRAR來對Data目錄進行定時備份的方法。

首先當然要把WinRAR安裝到計算機上。

將下面的命令寫入到一個文本文件里

*******************************Code Start*****************************

net stop mysql

c:\progra~1\winrar\winrar a -ag -k -r -s d:\mysql.rar d:\mysql\data

net start mysql

*******************************Code End*****************************

保存,然后將文本文件的擴展名修改成CMD。進入控制面版,打開計劃任務(wù),雙擊“添加計劃任務(wù)”。在計劃任務(wù)向?qū)е姓业絼偛诺腃MD文件,接著為這個任務(wù)指定一個運行時間和運行時使用的賬號密碼就可以了。

這種方法缺點是占用時間比較多,備份期間壓縮需要時間,mysql斷開比之一種方法更多的時間,但是對于文件命名很好。

  設(shè)mysql 安裝在c:盤,mysql數(shù)據(jù)庫的用戶名是root,密碼是123456,數(shù)據(jù)庫名是database_name,在d:盤根目錄下面存放備份數(shù)據(jù)庫,備份數(shù)據(jù)庫名槐檔字為database_name_backup_.sql(.sql為備份咐梁日期)

  備份數(shù)據(jù)庫:

  mysqldump -uroot -pdatabase_name>d:/database_name_backup_.sql

  恢復(fù)數(shù)據(jù)庫:

  刪除原有數(shù)據(jù)庫,建立數(shù)據(jù)庫,把備份數(shù)據(jù)庫導(dǎo)入。

  mysqladmin -uroot -pdrop database_name

  衡明運mysqladmin -uroot -pcreate database_name

  mysql -uroot -pdatabase_name

  注:在導(dǎo)入備份數(shù)據(jù)庫前,database_name如果沒有,是需要創(chuàng)建的;而且與database_name_backup_.sql中數(shù)據(jù)庫名是一樣的才能導(dǎo)入。

  注:環(huán)境Windows命令行。

前言

MySQL 5.6引入了GTID,每個事務(wù)都會產(chǎn)生一個GTID,我們可以通過驗證主從GTID來驗證主從數(shù)據(jù)的一致性。

為了敘述簡便,定義一個量ALL_GTID: 表示某個數(shù)據(jù)庫實例上 所有存在過的 或 將要存在的事務(wù) 的GTID(包括已經(jīng)被purge掉的事務(wù))。

在討論數(shù)據(jù)庫可用性的場景中, 當發(fā)生主備切換時, 需要進行數(shù)據(jù)補償。通過比較主備的ALL_GTID,可以確定需要補償多少數(shù)據(jù):

在實例存活的情況,可以在實例狀態(tài)中查詢ALL_GTID。

在實例崩潰的情況,無法在實例狀態(tài)中查詢ALL_GTID。可以通過查詢BINLOG中的Previous-GTIDs計算來獲得ALL_GTID。

下面列舉與ALL_GTID相關(guān)的變量。

與ALL_GTID相關(guān)的變量

Previous-GTIDs

Previous-GTIDs格式如下(環(huán)境為MySQL5.7,日志手動flush binary logs獲得):

查看新輪轉(zhuǎn)出的BINLOG:

下面為mysql-bin.00001中包含的GTID:

請點擊輸入圖片描述

然后再次flush binary logs:

請點擊輸入圖片描述

mysql-bin.00002中是沒有任何GTID的。

請點擊輸入圖片描述

綜上Previous-GTIDs是本身這個BINLOG文件前面的所有BINLOG的。

請點擊輸入圖片描述

全局變量中的GTID相關(guān)的變量

請點擊輸入圖片描述

變量解釋:

gtid_executed 代表著server上所有事務(wù)執(zhí)行產(chǎn)生的GTID(包含已經(jīng)被purge的BINLOG中的GTID或者是手動set gtid_purged的GTID)。

gtid_purged 代表著已經(jīng)被purge到的GTID。gtid_purged是gtid_executed的子集。

gtid_retrieved 是從機上relay_log中的GTID。

ALL_GTID 的計算

了解了GTID相關(guān)的變量之后,可以得到獲得實例的All_GTID的的方法:

對象

方法

存活的Master實例    gtid_executed    

存活的Slave實例    gtid_executed和gtid_retrieved的并集    

非存活Master實例    最后一個BINLOG文件的Previous-GTIDs + 最后一個BINLOG文件中所有的GTID    

非存活Slave實例    最后一個BINLOG文戚虧件的Previous-GTIDs + 最后一個BINLOG文件中所有的GTID    

在獲得非存活實例中的ALL_GTID時,最后一個BINLOG文件中的GTID可能不連續(xù)(比如事務(wù)同時來自于本實例客戶端和復(fù)制回放),所以需要掃描最后一個BINLOG文件。

生產(chǎn)中我們使用Xtrabackup來產(chǎn)生一個 從實例 的流程如下:

拉取備份,進行還原

change master to

set @@global.gtid_purged=’xxx’;

set @@global.gtid_purged=’xxx’; 的影響:

將 從實例 的ALL_GTID手工置為xxx, 在通過GTID方式建立復(fù)制時不會出錯.

將更新Binlog中記錄的Previous-GTIDs (由于Binlog不可改變, 將產(chǎn)生新的Binlog, 記錄新的Previous-GTIDs).

MySQL 5.7中set gtid_purged的行為變更

問題描述

回顧一下備份恢復(fù)的流歷渣程:

拉取備份,進行還原

change master to

set @@global.gtid_purged=’xxx’;

現(xiàn)象: 發(fā)現(xiàn)有一臺MySQL 5.7的Slave服務(wù)器恢復(fù)后沒有產(chǎn)生 正確的Previous-GTIDs。

分析

分析整個過程,解決問題高爛神應(yīng)該分階段進行手動模擬發(fā)現(xiàn)問題。以下為詳細步驟:

手工還原備份

環(huán)境

BINLOG數(shù)量,Previous-GTIDs狀態(tài)

Xtrabackup 2.4.2 & MySQL 5.6    1,空    

Xtrabackup 2.4.2 & MySQL 5.7    1,空    

Xtrabackup 2.2.9 & MySQL 5.6    1,空    

Xtrabackup 2.2.9 & MySQL 5.7    1,空    

可見: 恢復(fù)過程不會輪轉(zhuǎn)BINLOG。

驗證change master和set gtid_purged在不同的MySQL版本中執(zhí)行的差異

環(huán)境

BINLOG數(shù)量,Previous-GTIDs狀態(tài)

change master & MySQL 5.6    1,空    

change master & MySQL 5.7    1,空    

set gtid_purged & MySQL 5.6    2,正常    

set gtid_purged & MySQL 5.7    1,空    

可見: 執(zhí)行set gtid_purged時不同版本的MySQL產(chǎn)生了差異

驗證

對不同版本MySQL單獨執(zhí)行set @@global.gtid_purged=”;語句。檢查結(jié)果

環(huán)境

進行的操作

BINLOG數(shù)量,Previous-GTIDs狀態(tài)

MySQL 5.7    reset master; set @@global.gtid_purged=”;    1,空    

MySQL 5.6    reset master; set @@global.gtid_purged=”;    2,正常    

結(jié)論

參考:

官方解釋: 在5.7版本中,執(zhí)行SET GTID_PURGED語句后binlog_simple_gtid_recovery會給GTID_PURGED計算出一個錯誤的值。

由于5.7中新增了存儲GTID的表。所以5.7版本中set @@global.gtid_purged=”;語句被改成只修改存放GTID的表。

而5.6版本中會進行BINLOG輪轉(zhuǎn)和向Previous_gtids_log_event中添加GTID。如果5.7需要產(chǎn)生和5.6相同結(jié)果的話,可以在SET GTID_PURGED語句后手動執(zhí)行flush binary logs語句。

MySQL數(shù)據(jù)庫備份和還原的常用命令?

1.備份MySQL數(shù)據(jù)庫的命令

mysqldump-hhostname-uusername-ppassworddatabasename>backupfile.sql

2.備份MySQL數(shù)據(jù)庫為帶刪除表的格式,能夠讓該備份覆蓋已有數(shù)據(jù)庫而不需要手動刪除原有數(shù)據(jù)庫。

mysqldump-_add-drop-table-uusername-ppassworddatabasename>backupfile.sql

3.直接將MySQL數(shù)據(jù)庫壓縮備份

mysqldump-hhostname-uusername-ppassworddatabasename|gzip>backupfile.sql.gz

4.備份MySQL數(shù)據(jù)庫某個(些)表

mysqldump-hhostname-uusername-ppassworddatabasenamespecific_table1specific_table2>backupfile.sql

5.同時備份多個MySQL數(shù)據(jù)庫

mysqldump-hhostname-uusername-ppassword_databasesdatabasename1databasename2databasename3>multibackupfile.sql

6.僅僅備份灶此數(shù)據(jù)庫結(jié)構(gòu)

mysqldump_no-data_databasesdatabasename1databasename2databasename3>structurebackupfile.sql

7.備份服務(wù)器上所有數(shù)據(jù)庫

mysqldump_all-databases>allbackupfile.sql

8.還原MySQL數(shù)據(jù)庫的命令

mysql-hhostname-uusername-ppassworddatabasename

9.還隱碰迅原壓縮的MySQL數(shù)據(jù)庫

gunzip

10.將數(shù)據(jù)庫轉(zhuǎn)移到新服吵缺務(wù)器

mysqldump-uusername-ppassworddatabasename|mysql_host=*.*.*.*-Cdatabasename

c 實現(xiàn)數(shù)據(jù)庫的備份和還原的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于c 實現(xiàn)數(shù)據(jù)庫的備份和還原,C語言實現(xiàn)數(shù)據(jù)庫備份和還原,windows mysql幾種備份和 恢復(fù),MySQL數(shù)據(jù)庫備份和還原的常用命令?的信息別忘了在本站進行查找喔。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


當前文章:C語言實現(xiàn)數(shù)據(jù)庫備份和還原(c實現(xiàn)數(shù)據(jù)庫的備份和還原)
URL分享:http://m.5511xx.com/article/ccoppss.html