新聞中心
隨著數(shù)字化時(shí)代的到來,數(shù)據(jù)已經(jīng)成為了企業(yè)發(fā)展的重要財(cái)富,而數(shù)據(jù)庫作為存儲(chǔ)和管理企業(yè)數(shù)據(jù)的最基本的工具之一,扮演了至關(guān)重要的角色。對(duì)于企業(yè)的數(shù)據(jù)庫管理員而言,備份和還原數(shù)據(jù)庫是日常工作中必不可少的環(huán)節(jié)之一。雖然備份和還原數(shù)據(jù)庫的過程看似簡(jiǎn)單,但實(shí)際上卻需要多方面的技術(shù)支持。為此,本文將介紹如何使用簡(jiǎn)單易學(xué)的C語言實(shí)現(xiàn)MySQL數(shù)據(jù)庫的備份和還原。

創(chuàng)新互聯(lián)建站主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁視覺設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、成都全網(wǎng)營(yíng)銷推廣、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式重慶網(wǎng)站建設(shè)公司、手機(jī)網(wǎng)站開發(fā)、微商城、網(wǎng)站托管及成都網(wǎng)站維護(hù)、WEB系統(tǒng)開發(fā)、域名注冊(cè)、國(guó)內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個(gè)建站步驟的完善服務(wù)體系。一人跟蹤測(cè)試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為被動(dòng)防護(hù)網(wǎng)行業(yè)客戶提供了網(wǎng)站制作服務(wù)。
一、MySQL數(shù)據(jù)庫備份
1.1 MySQL備份的概念
MySQL備份指將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出成特定格式的數(shù)據(jù)文件,以便在需要的時(shí)候進(jìn)行還原操作。
1.2 MySQL備份的方法
MySQL備份有兩種方法:分別是使用mysqldump命令和使用C語言程序?qū)崿F(xiàn)。
1.2.1 使用mysqldump命令備份MySQL
mysqldump命令是一個(gè)命令行工具,可用于將MySQL數(shù)據(jù)庫備份為一個(gè)SQL腳本文件。在備份過程中,mysqldump命令將逐行按照DDL和DML語句將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出到一個(gè)SQL文件中,從而實(shí)現(xiàn)備份的目的。
1.2.2 使用C語言程序?qū)崿F(xiàn)MySQL備份
使用C語言程序?qū)崿F(xiàn)MySQL備份的方法如下:
之一步:連接到MySQL數(shù)據(jù)庫。要使用C語言程序連接到MySQL數(shù)據(jù)庫,需要在程序中建立一個(gè)連接句柄。句柄是一個(gè)標(biāo)準(zhǔn)的文件描述符,其類型為MYSQL。
第二步:執(zhí)行備份操作。在連接到MySQL數(shù)據(jù)庫后,需要執(zhí)行備份操作。備份操作的詳細(xì)內(nèi)容包括選擇要備份的數(shù)據(jù)庫以及使用查詢語句從MySQL數(shù)據(jù)庫中提取數(shù)據(jù)。
第三步:將備份結(jié)果寫入文件中。在執(zhí)行備份操作之后,需要將結(jié)果寫入到一個(gè)文件中保存起來。
1.3 MySQL備份的注意事項(xiàng)
MySQL備份非常重要,備份過程中需要注意以下幾點(diǎn):
1.3.1 數(shù)據(jù)庫完整性
備份文件需包含數(shù)據(jù)庫中所有的數(shù)據(jù)、表結(jié)構(gòu)以及其他元數(shù)據(jù),以保證備份文件與原始數(shù)據(jù)庫的完整性一致。
1.3.2 備份文件的密鑰安全
備份文件應(yīng)該受到加密保護(hù),以保護(hù)備份文件的內(nèi)容和備份密鑰不受到攻擊者的竊取和破解。備份文件應(yīng)該存儲(chǔ)在一個(gè)安全的地方,例如離線存儲(chǔ)設(shè)備或云存儲(chǔ)。
1.3.3 備份頻率
備份頻率應(yīng)該根據(jù)數(shù)據(jù)庫的敏感程度和業(yè)務(wù)需求進(jìn)行調(diào)整。如果數(shù)據(jù)庫的數(shù)據(jù)更新頻率很高,需要經(jīng)常備份數(shù)據(jù),以保證備份文件能夠更大程度上反映數(shù)據(jù)庫最新的狀態(tài)。
二、MySQL數(shù)據(jù)庫還原
2.1 MySQL數(shù)據(jù)庫還原的概念
MySQL數(shù)據(jù)庫還原是將備份文件中的數(shù)據(jù)恢復(fù)到MySQL數(shù)據(jù)庫中的過程。對(duì)于有些企業(yè)而言,備份和還原數(shù)據(jù)庫的頻率很高,因此還原操作也要非常熟悉和靈活。
2.2 MySQL數(shù)據(jù)庫還原的方法
MySQL數(shù)據(jù)庫還原的方法有兩種:分別是使用MySQL命令行和使用C語言程序?qū)崿F(xiàn)。
2.2.1 使用MySQL命令行還原MySQL
使用MySQL命令行還原MySQL的方法如下:
之一步:連接到MySQL數(shù)據(jù)庫。
第二步:選擇要還原的數(shù)據(jù)庫。
第三步:將備份文件中的數(shù)據(jù)導(dǎo)入到MySQL數(shù)據(jù)庫中。
2.2.2 使用C語言程序?qū)崿F(xiàn)MySQL還原
使用C語言程序?qū)崿F(xiàn)MySQL還原的方法如下:
之一步:連接到MySQL數(shù)據(jù)庫。要使用C語言程序連接到MySQL數(shù)據(jù)庫,需要在程序中建立一個(gè)連接句柄。句柄是一個(gè)標(biāo)準(zhǔn)的文件描述符,其類型為MYSQL。
第二步:執(zhí)行還原操作。在連接到MySQL數(shù)據(jù)庫后,需要執(zhí)行還原操作。還原操作的詳細(xì)內(nèi)容包括選擇要還原的數(shù)據(jù)庫以及使用查詢語句從備份文件中提取數(shù)據(jù)。
第三步:將還原結(jié)果寫入MySQL數(shù)據(jù)庫中。在執(zhí)行還原操作之后,需要將結(jié)果寫入到MySQL數(shù)據(jù)庫中,以實(shí)現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)。
2.3 MySQL數(shù)據(jù)庫還原的注意事項(xiàng)
MySQL數(shù)據(jù)庫還原非常重要,還原過程中需要注意以下幾點(diǎn):
2.3.1 數(shù)據(jù)庫完整性
還原過程需根據(jù)備份文件中的完整性反恢原數(shù)據(jù)庫。如果備份文件中缺少某些數(shù)據(jù)或結(jié)構(gòu),還原操作將失敗。
2.3.2 認(rèn)證憑據(jù)的正確性
還原過程中需要確認(rèn)認(rèn)證憑據(jù)的正確性,包括用戶名、密碼、主機(jī)名等信息。只有確認(rèn)憑據(jù)的正確性,才能成功連接到MySQL服務(wù)器,恢復(fù)數(shù)據(jù)庫。
2.3.3 備份文件的可讀性
還原過程中需要確認(rèn)備份文件的可讀性,包括文件的格式、文件的完整性等。只有確認(rèn)備份文件的可讀性,才能保證還原操作的成功。
三、
本文介紹了如何使用簡(jiǎn)單易學(xué)的C語言實(shí)現(xiàn)MySQL數(shù)據(jù)庫的備份和還原。通過本文的介紹,讀者可以了解到MySQL備份和還原的基本概念和方法,并學(xué)習(xí)到如何使用C語言程序?qū)崿F(xiàn)MySQL備份和還原操作。對(duì)于有需要備份和還原MySQL數(shù)據(jù)庫的讀者而言,本文提供了一個(gè)簡(jiǎn)單易行的方案。同時(shí),在備份和還原過程中,需要注意確認(rèn)數(shù)據(jù)庫完整性、備份文件安全以及備份頻率等注意事項(xiàng)。只有充分了解備份和還原數(shù)據(jù)庫的基本知識(shí)和注意事項(xiàng),才能夠確保數(shù)據(jù)在備份和還原過程中安全可靠。
相關(guān)問題拓展閱讀:
- windows mysql幾種備份和 恢復(fù)
windows mysql幾種備份和 恢復(fù)
前言
MySQL 5.6引入了GTID,每個(gè)事務(wù)都會(huì)產(chǎn)生一個(gè)GTID,我們可以通過驗(yàn)證主從GTID來驗(yàn)證主從數(shù)據(jù)的一致性。
為了敘述簡(jiǎn)便,定義一個(gè)量ALL_GTID: 表示某個(gè)數(shù)據(jù)庫實(shí)例上 所有存在過的 或 將要存在的事務(wù) 的GTID(包括已經(jīng)被purge掉的事務(wù))。
在討論數(shù)據(jù)庫可用性的場(chǎng)景中, 當(dāng)發(fā)生主備切換時(shí), 需要進(jìn)行數(shù)據(jù)補(bǔ)償。通過比較主備的ALL_GTID,可以確定需要補(bǔ)償多少數(shù)據(jù):
在實(shí)例存活的情況,可以在實(shí)例狀態(tài)中查詢ALL_GTID。
在實(shí)例崩潰的情況,無法在實(shí)例狀態(tài)中查詢ALL_GTID??梢酝ㄟ^查詢BINLOG中的Previous-GTIDs計(jì)算來獲得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中是沒有任何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í)來自于本實(shí)例客戶端和復(fù)制回放),所以需要掃描最后一個(gè)BINLOG文件。
生產(chǎn)中我們使用Xtrabackup來產(chǎn)生一個(gè) 從實(shí)例 的流程如下:
拉取備份,進(jìn)行還原
change master to
set @@global.gtid_purged=’xxx’;
set @@global.gtid_purged=’xxx’; 的影響:
將 從實(shí)例 的ALL_GTID手工置為xxx, 在通過GTID方式建立復(fù)制時(shí)不會(huì)出錯(cuò).
將更新Binlog中記錄的Previous-GTIDs (由于Binlog不可改變, 將產(chǎn)生新的Binlog, 記錄新的Previous-GTIDs).
MySQL 5.7中set gtid_purged的行為變更
問題描述
回顧一下備份恢復(fù)的流歷渣程:
拉取備份,進(jìn)行還原
change master to
set @@global.gtid_purged=’xxx’;
現(xiàn)象: 發(fā)現(xiàn)有一臺(tái)MySQL 5.7的Slave服務(wù)器恢復(fù)后沒有產(chǎn)生 正確的Previous-GTIDs。
分析
分析整個(gè)過程,解決問題高爛神應(yīng)該分階段進(jìn)行手動(dòng)模擬發(fā)現(xià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,空
可見: 恢復(fù)過程不會(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,空
可見: 執(zhí)行set gtid_purged時(shí)不同版本的MySQL產(chǎn)生了差異
驗(yàn)證
對(duì)不同版本MySQL單獨(dú)執(zhí)行set @@global.gtid_purged=”;語句。檢查結(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語句后binlog_simple_gtid_recovery會(huì)給GTID_PURGED計(jì)算出一個(gè)錯(cuò)誤的值。
由于5.7中新增了存儲(chǔ)GTID的表。所以5.7版本中set @@global.gtid_purged=”;語句被改成只修改存放GTID的表。
而5.6版本中會(huì)進(jìn)行BINLOG輪轉(zhuǎn)和向Previous_gtids_log_event中添加GTID。如果5.7需要產(chǎn)生和5.6相同結(jié)果的話,可以在SET GTID_PURGED語句后手動(dòng)執(zhí)行flush binary logs語句。
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的“計(jì)劃任務(wù)”定時(shí)執(zhí)行該批處理腳本即可。(例肢擾做如:每天凌晨3點(diǎn)執(zhí)行back_db.bat)
解釋:備份和恢復(fù)的操作都比較簡(jiǎn)單,完整性比較高,控制備份周期比較靈活,例如,用%date:~0,10%。此方法適合有獨(dú)立主機(jī)但對(duì)mysql沒有管理經(jīng)驗(yàn)的用戶。缺點(diǎn)是占用空間比較多,備份期間mysql會(huì)短時(shí)間斷李掘開(例如:針對(duì)30M左右的數(shù)據(jù)庫耗時(shí)5s左右),針對(duì)%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的“計(jì)劃任務(wù)”定時(shí)執(zhí)行該腳本即可。(例如:每天凌晨5點(diǎn)執(zhí)行back_db.bat)
說明:此方法可以不用關(guān)閉數(shù)據(jù)庫,并且可以按歷衡每一天的時(shí)間來名稱備份文件。
通過%date:~5,2%來組合得出當(dāng)前日期,組合的效果為yyyymmdd,date命令得到的日期格式默認(rèn)為yyyy-mm-dd(如果不是此格式可以通過pause命令來暫停命令行窗口看通過%date:~,20%得到的當(dāng)前計(jì)算機(jī)日期格式),所以通過%date:~5,2%即可得到日期中的第五個(gè)字符開始的兩個(gè)字符,例如今天為,通過%date:~5,2%則可以得到02。(日期的字符串的下標(biāo)是從0開始的)
3、利用WinRAR對(duì)MySQL數(shù)據(jù)庫進(jìn)行定時(shí)備份。
對(duì)于MySQL的備份,更好的方法就是直接備份MySQL數(shù)據(jù)庫的Data目錄。下面提供了一個(gè)利用WinRAR來對(duì)Data目錄進(jìn)行定時(shí)備份的方法。
首先當(dāng)然要把WinRAR安裝到計(jì)算機(jī)上。
將下面的命令寫入到一個(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)入控制面版,打開計(jì)劃任務(wù),雙擊“添加計(jì)劃任務(wù)”。在計(jì)劃任務(wù)向?qū)е姓业絼偛诺腃MD文件,接著為這個(gè)任務(wù)指定一個(gè)運(yùn)行時(shí)間和運(yùn)行時(shí)使用的賬號(hào)密碼就可以了。
這種方法缺點(diǎn)是占用時(shí)間比較多,備份期間壓縮需要時(shí)間,mysql斷開比之一種方法更多的時(shí)間,但是對(duì)于文件命名很好。
設(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
衡明運(yùn)mysqladmin -uroot -pcreate database_name
mysql -uroot -pdatabase_name
注:在導(dǎo)入備份數(shù)據(jù)庫前,database_name如果沒有,是需要?jiǎng)?chuàng)建的;而且與database_name_backup_.sql中數(shù)據(jù)庫名是一樣的才能導(dǎo)入。
注:環(huán)境Windows命令行。
關(guān)于c mysql備份還原數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級(jí)標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
網(wǎng)頁標(biāo)題:簡(jiǎn)單易學(xué)的C語言實(shí)現(xiàn)MySQL數(shù)據(jù)庫備份與還原(cmysql備份還原數(shù)據(jù)庫)
標(biāo)題來源:http://www.dlmjj.cn/article/cooeehh.html


咨詢
建站咨詢
