FC 定时自动备份服务器本地数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php

use OSS\OssClient;

function handler($event, $context) {
// 设置时区
date_default_timezone_set('PRC');

// 获取存储桶名称
$bucket = 'hongfs-backup-mysql-r7b0pl3buuwrg9g3';
// 获取存储桶地域
$region = 'cn-shenzhen';

// 主机
$host = 'mysql.hongfs.cn';
// 端口
$port = '3306';
// 用户名
$user = 'hongfs';
// 密码
$password = 'FKDdjYVV813lfj3H';
// 数据库名称
$database = 'hongfs';

// 备份文件名
$filename = $database . '-' . date('YmdHis') . '.sql';
// 临时存储路径
$filepath = getenv('HOME') . '/' . $filename;

// 执行备份
// 57 指的是 mysql-5.7 版本。如果是 8.0 则需要换成 80
exec(sprintf('%smysqldump-57 --host=%s --port=%s --user=%s --password=%s --compact %s > %s', getenv('FC_FUNC_CODE_PATH'), $host, $port, $user, $password, $database, $filepath));

if(!is_file($filepath)) {
return '失败';
}

// 实例化 OSS
$oss = new OssClient(
$context['credentials']['accessKeyId'],
$context['credentials']['accessKeySecret'],
'https://oss-' . $region . '-internal.aliyuncs.com', // 内网
false,
$context['credentials']['securityToken']
);

// 上传文件
$oss->uploadFile($bucket, 'backup/' . $filename, $filepath);

return '完成';
}

部署

OSS

  1. 创建一个存储桶

FC

  1. 创建一个事件函数,函数的地域和存储桶的地域一致,语言为 PHP,内存 3072 MB,超时时间 600 秒。
  2. 配置服务页面添加 AliyunOSSFullAccess 权限。
  3. 在刚刚创建的函数页面上传代码,代码压缩包在文章底部。
  4. 将代码里面的配置换成自己的。
  5. 设置一个定时触发器,具体触发时间根据自己业务定。


源码下载

往上