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

創(chuàng)新互聯(lián)建站主要為客戶提供服務(wù)項目涵蓋了網(wǎng)頁視覺設(shè)計、VI標志設(shè)計、成都全網(wǎng)營銷推廣、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式重慶網(wǎng)站建設(shè)公司、手機網(wǎng)站開發(fā)、微商城、網(wǎng)站托管及成都網(wǎng)站維護、WEB系統(tǒng)開發(fā)、域名注冊、國內(nèi)外服務(wù)器租用、視頻、平面設(shè)計、SEO優(yōu)化排名。設(shè)計、前端、后端三個建站步驟的完善服務(wù)體系。一人跟蹤測試的建站服務(wù)標準。已經(jīng)為被動防護網(wǎng)行業(yè)客戶提供了網(wǎng)站制作服務(wù)。
一、MySQL數(shù)據(jù)庫備份
1.1 MySQL備份的概念
MySQL備份指將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出成特定格式的數(shù)據(jù)文件,以便在需要的時候進行還原操作。
1.2 MySQL備份的方法
MySQL備份有兩種方法:分別是使用mysqldump命令和使用C語言程序?qū)崿F(xiàn)。
1.2.1 使用mysqldump命令備份MySQL
mysqldump命令是一個命令行工具,可用于將MySQL數(shù)據(jù)庫備份為一個SQL腳本文件。在備份過程中,mysqldump命令將逐行按照DDL和DML語句將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出到一個SQL文件中,從而實現(xiàn)備份的目的。
1.2.2 使用C語言程序?qū)崿F(xiàn)MySQL備份
使用C語言程序?qū)崿F(xiàn)MySQL備份的方法如下:
之一步:連接到MySQL數(shù)據(jù)庫。要使用C語言程序連接到MySQL數(shù)據(jù)庫,需要在程序中建立一個連接句柄。句柄是一個標準的文件描述符,其類型為MYSQL。
第二步:執(zhí)行備份操作。在連接到MySQL數(shù)據(jù)庫后,需要執(zhí)行備份操作。備份操作的詳細內(nèi)容包括選擇要備份的數(shù)據(jù)庫以及使用查詢語句從MySQL數(shù)據(jù)庫中提取數(shù)據(jù)。
第三步:將備份結(jié)果寫入文件中。在執(zhí)行備份操作之后,需要將結(jié)果寫入到一個文件中保存起來。
1.3 MySQL備份的注意事項
MySQL備份非常重要,備份過程中需要注意以下幾點:
1.3.1 數(shù)據(jù)庫完整性
備份文件需包含數(shù)據(jù)庫中所有的數(shù)據(jù)、表結(jié)構(gòu)以及其他元數(shù)據(jù),以保證備份文件與原始數(shù)據(jù)庫的完整性一致。
1.3.2 備份文件的密鑰安全
備份文件應(yīng)該受到加密保護,以保護備份文件的內(nèi)容和備份密鑰不受到攻擊者的竊取和破解。備份文件應(yīng)該存儲在一個安全的地方,例如離線存儲設(shè)備或云存儲。
1.3.3 備份頻率
備份頻率應(yīng)該根據(jù)數(shù)據(jù)庫的敏感程度和業(yè)務(wù)需求進行調(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ù)庫中的過程。對于有些企業(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ù)庫,需要在程序中建立一個連接句柄。句柄是一個標準的文件描述符,其類型為MYSQL。
第二步:執(zhí)行還原操作。在連接到MySQL數(shù)據(jù)庫后,需要執(zhí)行還原操作。還原操作的詳細內(nèi)容包括選擇要還原的數(shù)據(jù)庫以及使用查詢語句從備份文件中提取數(shù)據(jù)。
第三步:將還原結(jié)果寫入MySQL數(shù)據(jù)庫中。在執(zhí)行還原操作之后,需要將結(jié)果寫入到MySQL數(shù)據(jù)庫中,以實現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)。
2.3 MySQL數(shù)據(jù)庫還原的注意事項
MySQL數(shù)據(jù)庫還原非常重要,還原過程中需要注意以下幾點:
2.3.1 數(shù)據(jù)庫完整性
還原過程需根據(jù)備份文件中的完整性反恢原數(shù)據(jù)庫。如果備份文件中缺少某些數(shù)據(jù)或結(jié)構(gòu),還原操作將失敗。
2.3.2 認證憑據(jù)的正確性
還原過程中需要確認認證憑據(jù)的正確性,包括用戶名、密碼、主機名等信息。只有確認憑據(jù)的正確性,才能成功連接到MySQL服務(wù)器,恢復(fù)數(shù)據(jù)庫。
2.3.3 備份文件的可讀性
還原過程中需要確認備份文件的可讀性,包括文件的格式、文件的完整性等。只有確認備份文件的可讀性,才能保證還原操作的成功。
三、
本文介紹了如何使用簡單易學(xué)的C語言實現(xiàn)MySQL數(shù)據(jù)庫的備份和還原。通過本文的介紹,讀者可以了解到MySQL備份和還原的基本概念和方法,并學(xué)習(xí)到如何使用C語言程序?qū)崿F(xiàn)MySQL備份和還原操作。對于有需要備份和還原MySQL數(shù)據(jù)庫的讀者而言,本文提供了一個簡單易行的方案。同時,在備份和還原過程中,需要注意確認數(shù)據(jù)庫完整性、備份文件安全以及備份頻率等注意事項。只有充分了解備份和還原數(shù)據(jù)庫的基本知識和注意事項,才能夠確保數(shù)據(jù)在備份和還原過程中安全可靠。
相關(guān)問題拓展閱讀:
- windows mysql幾種備份和 恢復(fù)
windows mysql幾種備份和 恢復(fù)
前言
MySQL 5.6引入了GTID,每個事務(wù)都會產(chǎn)生一個GTID,我們可以通過驗證主從GTID來驗證主從數(shù)據(jù)的一致性。
為了敘述簡便,定義一個量ALL_GTID: 表示某個數(shù)據(jù)庫實例上 所有存在過的 或 將要存在的事務(wù) 的GTID(包括已經(jīng)被purge掉的事務(wù))。
在討論數(shù)據(jù)庫可用性的場景中, 當(dāng)發(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語句。
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%來組合得出當(dāng)前日期,組合的效果為yyyymmdd,date命令得到的日期格式默認為yyyy-mm-dd(如果不是此格式可以通過pause命令來暫停命令行窗口看通過%date:~,20%得到的當(dāng)前計算機日期格式),所以通過%date:~5,2%即可得到日期中的第五個字符開始的兩個字符,例如今天為,通過%date:~5,2%則可以得到02。(日期的字符串的下標是從0開始的)
3、利用WinRAR對MySQL數(shù)據(jù)庫進行定時備份。
對于MySQL的備份,更好的方法就是直接備份MySQL數(shù)據(jù)庫的Data目錄。下面提供了一個利用WinRAR來對Data目錄進行定時備份的方法。
首先當(dāng)然要把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命令行。
關(guān)于c mysql備份還原數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級標準機房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達10T,機柜接入千兆交換機,能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認可。
網(wǎng)頁名稱:簡單易學(xué)的C語言實現(xiàn)MySQL數(shù)據(jù)庫備份與還原(cmysql備份還原數(shù)據(jù)庫)
當(dāng)前網(wǎng)址:http://fisionsoft.com.cn/article/cooeehh.html


咨詢
建站咨詢
