阿里云CentOS自动备份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 /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并上传至七牛云 已经结束;
如果这篇博文对你有所帮助,麻烦动动手指点个赞^-^
阿里云CentOS自动备份MySql 8.0并上传至七牛云的更多相关文章
- 上传文件到Ubuntu阿里云服务器(windows到Linux的文件上传)
上传文件到Ubuntu阿里云服务器(windows到Linux的文件上传) 最近在阿里云上面租了一个轻量级服务器玩玩,学习学习怎么在服务器部署网站.然后嘞,在想要将本地文件上传到服务器的时候,自己研究 ...
- 图片上传到七牛云/阿里云的OSS
1.准备 七牛云/阿里云OSS https://github.com/pfinal/storage 2.composer安装包 安装 composer require pfinal/storage 本 ...
- CentOS自动备份MySql
1.确认Crontab是否安装 service crond startcrontab -l 2.编写备份脚本 cd mkdir backup cd backup vim auto.sh /usr/bi ...
- 阿里云centos远程连接mysql
首先在服务器管理控制台设置防火墙规则 添加规则 使用root登录到mysql 添加一个用户名,权限为%的远程连接用户 grant all on *.* to 'yuancheng'@'%' ident ...
- 170208、用Navicat自动备份mysql数据库
数据库备份很重要,很多服务器经常遭到黑客的恶意攻击,造成数据丢失,如果没有及时备份的话,后果不堪设想. 一:备份的目的: 做灾难恢复:对损坏的数据进行恢复和还原 需求改变:因需求改变而需要把数据还原到 ...
- 用Navicat自动备份mysql数据库
以下文章转载自https://blog.csdn.net/u013628152/article/details/54909885,放在自己的博客园以供后面方便查询 —————————————————— ...
- 定时备份 MySQL 并上传到七牛
多数应用场景下,我们需要对重要数据进行备份.并放置到一个安全的地方,以备不时之需. 常见的 MySQL 数据备份方式有,直接打包复制对应的数据库或表文件(物理备份).mysqldump 全量逻辑备份. ...
- 阿里云 如何减少备份使用量? mysql数据库的完整备份、差异备份、增量备份
RDS for MySQL备份.SQL审计容量相关问题_MYSQL使用_技术运维问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/knowledge_detail/4 ...
- 在CentOS下自动备份mysql
在CentOS下自动备份mysql数据库,并差异同步到其它网络主机上 1.在/root/mysql_backup/下添加backup.sh:vim /root/mysql_backup/backup. ...
随机推荐
- iOS上Delegate的悬垂指针问题
文章有点长,写的过程很有收获,但读的过程不一定有收获,慎入 [摘要] 悬垂指针(dangling pointer)引起的crash问题,是我们在iOS开发过程当中经常会遇到的.其中由delegat ...
- DOMINO的JDBC和ODBC连接方法
利用ODBC实现Domino和关系数据库的互操作 Lotus Domino是当今办公自动化系统的主流开发平台之一,Domino自带一个非关系型数据库–文档型数据库,而目前大部分企业的信息都储存在 ...
- 微信小程序接口开发中解决https外网调试问题
准备工作 1.有一台阿里云的Linux CentOS6 服务器,安装支持ssl模块的Nginx 2.有自己的域名,把域名解析到指向该服务器IP,本例中将wx.wangjiang.net 解析到服务器I ...
- 第三届移动互联网测试开发大会 PPT合集下载
PPT下载地址 http://www.51test.space/archives/2887 大会介绍 Mobile Testing Summit China(中国移动互联网测试开发大会)是一个以移动测 ...
- DROP语句总结
一.基本语句 通过使用 DROP 语句,可以轻松地删除索引.表和数据库. 1.DROP INDEX 语句 DROP INDEX 语句用于删除表中的索引. <!--用于 MS Access 的 ...
- 自己搭建anki服务器
目录 centos端 电脑客户端 安卓端 centos端 # 安装服务 yum -y install python-setuptools easy_install Ankiserver mkdir - ...
- session 之session混乱解决方法(转)
知道了session混乱产生的原因之后,也就知道了问题的根源.同时也引出了很多的问题: 1.如何记录住在线人员(这里只有帐号的系统用户,不包括访客): 2.如何限制同一个帐号在同一时间段内只能够登陆一 ...
- JSP中forEach和forTokens循环的用法
<%@page import="java.util.*"%> <%@ page language="java" contentType=&qu ...
- EditPlus 自动格式化js、html、css,以EditPlus 文本编辑器v3.41(1145)为例
工具/原料 edtools.rar 方法/步骤 下载工具包:edtools.rar ,解压后放到磁盘的一个目录,如D:/edTools 打开ED,打开“工具”-“配置用户工具”,在弹出 ...
- Linux which/whereis/locate命令详解
which 查看可执行文件的位置,从全局环境变量PATH里面查找对应的路径,默认是找 bash内所规范的目录 whereis 查看文件的位置,配合参数-b,用于程序名的搜索,从linux数据库查找. ...