本文主要介紹一下阿裡雲CentOS7下如何對MySql 8.0資料庫進行自動備份,並使用.NET Core 將備份文件上傳至七牛雲存儲上,並對整個過程所踩的坑加以記錄. 環境、工具、準備工作 伺服器:阿裡雲64位CentOS 7.4.1708版本;並安裝MySql 8.0 資料庫(如何安裝點擊) 客 ...
本文主要介紹一下阿裡雲CentOS7下如何對MySql 8.0資料庫進行自動備份,並使用.NET Core 將備份文件上傳至七牛雲存儲上,並對整個過程所踩的坑加以記錄.
環境、工具、準備工作
- 伺服器:阿裡雲64位CentOS 7.4.1708版本;並安裝MySql 8.0 資料庫(如何安裝點擊)
- 客戶端:Windows 10;
- SFTP客戶端:FileZilla;用來進行文件傳輸;
- SSH工具:Putty;用來在Windows 上遠程訪問CentOS;
編寫Shell腳本實現自動備份MySql資料庫
1.創建相關目錄
使用mkdir命令創建兩個目錄,一個用來存放Shell和上傳七牛雲的APP;命令如下
mkdir /home/software/mysql/backupapp //此目錄用來存放相關shell和應用程式 mkdir /home/software/mysql/backupfiles //此目錄用來存放mysql的備份文件
2.編寫MySQL備份Shell
- 使用命令進如shell存放的目錄,命令如下:
cd /home/software/mysql/backupapp
- 創建備份的shell文件,命令如下:
vi backup.sh //vi命令學習
- 編寫mysql備份shell命令,內容如下:
db_user="dbuser" //輸入你的資料庫用戶名
db_password="password" //輸入你的資料庫密碼
db_name="dbname" //輸入你要備份的資料庫名 mysqldump -u$db_user -p$db_password $db_name | gzip > /home/software/mysql/backupfiles/$(date +%Y%m%d%H%M%S).sql.gz
//將導出的腳本按照年月日時分秒命名並壓縮成gz文件,要保證/home/software/mysql/backupfiles存在,並註意腳本不能在windows環境下編寫,註意腳本的空格與相關字元的全半形. -
測試腳本是否正常,命令如下:
sh /home/software/mysql/backupapp/backup.sh
//沒有錯誤信息或者提示 Using a password on the command line interface can be insecure 表示正常
cd /home/software/mysql/backupfile //進入備份文件目錄並使用ls命令查看是否備份成功 -
設置shell的許可權並設置可運行,命令如下:
chmod 777 /home/software/mysql/backupapp/backup.sh //chmod命令學習
3.設置crontab實現自動執行Shell備份資料庫
- 創建定時任務使備份腳本能定時運行,命令如下:
crontab -e //進入調度器編輯視窗
//編寫如下命令,此命令表示每天凌晨01:00分執行腳本backup.sh crontab命令學習
0 1 * * * /home/software/mysql/backupapp/backup.sh
//註意事項:保證/home/software/mysql/backupapp/backup.sh至少有讀和可執行許可權
//為方便測試可設置10 * * * * 表示每10分鐘執行一次shell - 重啟crontab使命令生效,命令如下:
systemctl restart crond
開發APP實現將資料庫備份文件上傳至七牛雲
1.註冊七牛雲(已註冊可忽略)
因為七牛雲免費提供10G的對象存儲空間,所以本文選擇七牛雲做遠程備份.相關註冊操作請跳轉至七牛雲並創建存儲空間.
2.新建控制台應用程式編寫代碼實現上傳功能
使用.NET Core創建一個Console應用程式,並使用NuGet安裝Newtonsoft.json和Qiniu.Shared;上傳功能代碼如下:
using Microsoft.Extensions.Configuration;
using Qiniu.Common;
using Qiniu.Http;
using Qiniu.IO;
using Qiniu.IO.Model;
using Qiniu.Util;
using System;
using System.IO;
using System.Runtime.InteropServices;
namespace QiniuManagerApp
{
internal class Program
{
private const string AccessKey = "";//設置七牛AccessKey
private const string SecretKey = "";設置七牛SecretKey
private const string Bucket = "";//設置你的Bucket,就是你新建的存儲空間名稱
private static void Main(string[] args)
{
var systemPath = Environment.CurrentDirectory;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
systemPath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
}
var logPath = systemPath + @"/logs/";
var uploadBackupPath = systemPath + @"/filebackup/";
DeleteFile(uploadBackupPath, 7);
var config = new ConfigurationBuilder()
.SetBasePath(systemPath)
.AddJsonFile("appsettings.json")
.Build();
//讀取配置
var filePath = config["filePath"];
if (!string.IsNullOrEmpty(filePath))
{
Console.WriteLine("當前文件路徑:" + filePath);
var logName = DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
if (!File.Exists(logPath + logName))
{
File.Create(logPath + logName);
}
using (StreamWriter sw = new StreamWriter(logPath + logName, true))
{
try
{
var files = Directory.GetFiles(filePath);
if (files.Length > 0)
{
sw.WriteLine("[Start]=============================================================================================================================");
for (int i = 0; i < files.Length; i++)
{
FileInfo file = new FileInfo(files[i]);
if (file.Extension == ".gz")
{
sw.WriteLine($"[DateTime]: {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffff")}");
var reslut = string.Empty;
if (UploadFile(file.DirectoryName + @"/", file.Name, out reslut))
{
sw.WriteLine($"[FileName]:{file.Name} upload successfully.");
Console.WriteLine($"[FileName]:{file.Name} upload successfully.");
file.MoveTo(uploadBackupPath + @"/" + file.Name);
}
else
{
sw.WriteLine($"[FileName]:{file.Name} upload unsuccessfully.");
Console.WriteLine($"[FileName]:{file.Name} upload unsuccessfully.");
sw.WriteLine($"[ Result ]:{reslut}");
}
}
sw.WriteLine();
}
sw.WriteLine("[ End ]=============================================================================================================================");
}
}
catch (Exception ex)
{
sw.WriteLine("[Exception]=============================================================================================================================");
sw.WriteLine(ex.Message);
sw.WriteLine("[Exception]=============================================================================================================================");
throw;
}
}
Console.WriteLine("上傳完成!");
}
}
private static bool UploadFile(string filePath, string fileName, out string error)
{
Mac mac = new Mac(AccessKey, SecretKey);
// 設置上傳策略,詳見:https://developer.qiniu.com/kodo/manual/1206/put-policy
PutPolicy putPolicy = new PutPolicy();
// 設置要上傳的目標空間
putPolicy.Scope = Bucket;
// 上傳策略的過期時間(單位:秒)
putPolicy.SetExpires(3000);
// 生成上傳token
string token = Auth.CreateUploadToken(mac, putPolicy.ToJsonString());
// 設置上傳區域
Config.SetZone(ZoneID.CN_North, false);
// 表單上傳
FormUploader target = new FormUploader();
// 上傳文件
var fileBytes = File.ReadAllBytes(filePath + fileName);
HttpResult result = target.UploadData(fileBytes, fileName, token);
error = result.ToString();
if (result.Code == 200)
{
return true;
}
return false;
}
private static void DeleteFile(string filePath, int createdDays)
{
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
DirectoryInfo di = new DirectoryInfo(filePath);
var files = di.GetFiles();
for (int i = 0; i < files.Length; i++)
{
if (files[i].CreationTime >= DateTime.Now.AddDays(createdDays))
{
files[i].Delete();
}
}
}
}
}
//appsetting.json的內容,文件要新建,預設console程式沒有該文件 { "filePath": "/home/software/mysql/backupfiles"//設置你MySQL備份文件所在路徑 }
註意事項:
- 註意設置七牛雲相關配置如AccessKey ,SecretKey ,Bucket 選擇正確的上傳區域;
- 發佈程式時,需要將console依賴的相關文件都拷貝至應用程式根目錄下(此處可能是.NET Core的一個bug);
- 註意區分獲取程式根目錄的方式(在Linux伺服器和Window 伺服器獲取方式不一樣)
3.將Console部署至阿裡雲CentOS併進行測試
- 將程式部署至CentOS(參見此文或官方文檔),目錄路徑為:/home/software/mysql/backupapp/qiniuapp
- 使用chmod命令,設置console程式的可執行許可權;命令如下:
chmod 777 /home/software/mysql/backupapp/qiniuapp/QiniuManagerApp.dll
- 測試程式;命令如下:
dotnet /home/software/mysql/backupapp/qiniuapp/QiniuManagerApp.dll
- 進入七牛站點,查看文件是否上傳成功;
- 編寫app shell腳本;內容如下:
cd /home/software/mysql/backupapp vi backupapp.sh
//編寫如下內容:
dotnet /home/software/mysql/backupapp/qiniuapp/QiniuManagerApp.dll
4.設置crond 實現自動將備份文件上傳至七牛雲
- 創建定時任務使備份App能定時運行,命令如下:
crontab -e //進入調度器編輯視窗
//編寫如下命令
10 1 * * * /home/software/mysql/backupapp/backupapp.sh
//註意事項:保證/home/software/mysql/backupapp/backupapp.sh至少有讀和可執行許可權 - 重啟crontab使命令生效,命令如下:
systemctl restart crond
至此,阿裡雲CentOS自動備份MySql 8.0並上傳至七牛雲 已經結束;
如果這篇博文對你有所幫助,麻煩動動手指點個贊^-^
作者:微沙 出處:https://www.cnblogs.com/xrzs 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。