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

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

新聞中心

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

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

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


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

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

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

“`

/* 打開(kāi)備份文件 */

FILE *fp;

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

if(format == TEXT) {

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

}

“`

其中,format是備份文件的格式,可以通過(guò)傳參控制。如果是文本格式,就使用“w”打開(kāi)文件,如果是二進(jìn)制格式,就使用“wb”。

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

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

“`

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

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);

// 寫(xiě)入表格信息到備份文件中

createTable(fp, rows, result, table);

}

“`

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

3. 關(guān)閉文件

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

“`

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

fclose(fp);

mysql_free_result(result);

mysql_close(conn);

“`

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

1. 獲取備份文件

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

“`

/* 獲取備份文件 */

FILE *fp;

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

if(format == TEXT) {

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

}

“`

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

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

“`

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

MYSQL *conn;

conn = mysql_init(NULL);

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

“`

3. 讀取備份文件

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

“`

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

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語(yǔ)句將表格信息寫(xiě)入數(shù)據(jù)庫(kù)中

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語(yǔ)句。

4. 關(guān)閉文件

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

“`

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

fclose(fp);

mysql_close(conn);

“`

三、

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

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

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

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

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

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

假想環(huán)境:

MySQL 安裝位置:C:\MySQL

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

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

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

新建db_bak.bat,寫(xiě)入以下代碼

*******************************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的“計(jì)劃任務(wù)”定時(shí)執(zhí)行該批處理腳本即可。(例肢擾做如:每天凌晨3點(diǎn)執(zhí)行back_db.bat)

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

2、mysqldump備份成sql文件

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

假想環(huán)境:

MySQL 安裝位置:C:\MySQL

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

MySQL root 密碼:123456

數(shù)據(jù)庫(kù)備份目的地: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的“計(jì)劃任務(wù)”定時(shí)執(zhí)行該腳本即可。(例如:每天凌晨5點(diǎn)執(zhí)行back_db.bat)

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

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

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

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

首先當(dāng)然要把WinRAR安裝到計(jì)算機(jī)上。

將下面的命令寫(xiě)入到一個(gè)文本文件里

*******************************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*****************************

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

這種方法缺點(diǎn)是占用時(shí)間比較多,備份期間壓縮需要時(shí)間,mysql斷開(kāi)比之一種方法更多的時(shí)間,但是對(duì)于文件命名很好。

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

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

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

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

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

  mysqladmin -uroot -pdrop database_name

  衡明運(yùn)mysqladmin -uroot -pcreate database_name

  mysql -uroot -pdatabase_name

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

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

前言

MySQL 5.6引入了GTID,每個(gè)事務(wù)都會(huì)產(chǎn)生一個(gè)GTID,我們可以通過(guò)驗(yàn)證主從GTID來(lái)驗(yàn)證主從數(shù)據(jù)的一致性。

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

在討論數(shù)據(jù)庫(kù)可用性的場(chǎng)景中, 當(dāng)發(fā)生主備切換時(shí), 需要進(jìn)行數(shù)據(jù)補(bǔ)償。通過(guò)比較主備的ALL_GTID,可以確定需要補(bǔ)償多少數(shù)據(jù):

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

在實(shí)例崩潰的情況,無(wú)法在實(shí)例狀態(tài)中查詢ALL_GTID。可以通過(guò)查詢BINLOG中的Previous-GTIDs計(jì)算來(lái)獲得ALL_GTID。

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

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

Previous-GTIDs

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

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

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

請(qǐng)點(diǎn)擊輸入圖片描述

然后再次flush binary logs:

請(qǐng)點(diǎn)擊輸入圖片描述

mysql-bin.00002中是沒(méi)有任何GTID的。

請(qǐng)點(diǎn)擊輸入圖片描述

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

請(qǐng)點(diǎn)擊輸入圖片描述

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

請(qǐng)點(diǎn)擊輸入圖片描述

變量解釋:

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

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

gtid_retrieved 是從機(jī)上relay_log中的GTID。

ALL_GTID 的計(jì)算

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

對(duì)象

方法

存活的Master實(shí)例    gtid_executed    

存活的Slave實(shí)例    gtid_executed和gtid_retrieved的并集    

非存活Master實(shí)例    最后一個(gè)BINLOG文件的Previous-GTIDs + 最后一個(gè)BINLOG文件中所有的GTID    

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

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

生產(chǎn)中我們使用Xtrabackup來(lái)產(chǎn)生一個(gè) 從實(shí)例 的流程如下:

拉取備份,進(jìn)行還原

change master to

set @@global.gtid_purged=’xxx’;

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

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

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

MySQL 5.7中set gtid_purged的行為變更

問(wèn)題描述

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

拉取備份,進(jìn)行還原

change master to

set @@global.gtid_purged=’xxx’;

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

分析

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

手工還原備份

環(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,空    

可見(jiàn): 恢復(fù)過(guò)程不會(huì)輪轉(zhuǎn)BINLOG。

驗(yàn)證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,空    

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

驗(yàn)證

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

環(huán)境

進(jì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語(yǔ)句后binlog_simple_gtid_recovery會(huì)給GTID_PURGED計(jì)算出一個(gè)錯(cuò)誤的值。

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

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

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

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

mysqldump-hhostname-uusername-ppassworddatabasename>backupfile.sql

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

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

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

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

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

mysqldump-hhostname-uusername-ppassworddatabasenamespecific_table1specific_table2>backupfile.sql

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

mysqldump-hhostname-uusername-ppassword_databasesdatabasename1databasename2databasename3>multibackupfile.sql

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

mysqldump_no-data_databasesdatabasename1databasename2databasename3>structurebackupfile.sql

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

mysqldump_all-databases>allbackupfile.sql

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

mysql-hhostname-uusername-ppassworddatabasename

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

gunzip

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

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

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

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


網(wǎng)站題目:C語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)庫(kù)備份和還原(c實(shí)現(xiàn)數(shù)據(jù)庫(kù)的備份和還原)
當(dāng)前URL:http://www.5511xx.com/article/ccoppss.html