V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zzzmh
V2EX  ›  程序员

问个问题,你们的服务器,数据库备份怎么做?

  •  
  •   zzzmh · 2020-03-18 13:45:51 +08:00 · 10447 次点击
    这是一个创建于 1709 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,目前没买专门的 mysql 主机,都是云主机上装 mysql。云主机本地的备份感觉不保险。

    66 条回复    2020-03-19 16:02:35 +08:00
    gz911122
        1
    gz911122  
       2020-03-18 13:51:49 +08:00
    前排蹲一个个人最简单的解决方案
    villivateur
        2
    villivateur  
       2020-03-18 13:54:52 +08:00 via Android
    我也想知道,目前能想到的办法就是定时执行 mysqldump
    nybux
        3
    nybux  
       2020-03-18 13:54:58 +08:00
    在本地搞个从?
    derek80
        4
    derek80  
       2020-03-18 13:58:05 +08:00
    xtrabackup
    jinsongzhao
        5
    jinsongzhao  
       2020-03-18 13:58:05 +08:00   ❤️ 2
    @gz911122 那就给你一个个人方案
    mysqldump -h IP 地址 -uroot -p 密码 --opt --compress 库名 --skip-lock-tables | mysql -h localhost -uroot -p 密码 库名
    然后加到 crontab 定时执行里面,也可以把管道后面的 | mysql .... 替换为其他文件等等
    jiom
        6
    jiom  
       2020-03-18 13:58:10 +08:00
    蹲大佬的经验分享~
    summerwar
        7
    summerwar  
       2020-03-18 13:58:37 +08:00
    晚上 3 点的定时备份脚本,然后备份完发送到 cdn 或者邮箱
    CallMeReznov
        8
    CallMeReznov  
       2020-03-18 14:00:43 +08:00
    阿里不是有定时的保存的镜像吗,你定时下载下来不就好咯?

    而且我刚刚上区看新出了一个跨地域备份
    gz911122
        9
    gz911122  
       2020-03-18 14:04:13 +08:00
    @jinsongzhao mysqldump 会锁表嘛?
    littleylv
        10
    littleylv  
       2020-03-18 14:07:28 +08:00
    每天 crontab 执行一次:
    1、mysqldump
    2、tar 打包
    3、ftp 传到别的机子

    单纯的备份到当前服务器跟没备份差不到哪里去,万一服务器全盘毁了都毁了
    vazo
        11
    vazo  
       2020-03-18 14:20:37 +08:00
    主机安装 wordpress,再装个插件数据库备份扩展,备份内容只备份数据库,备份可以选择邮件 /ftp/onedrive 等等
    jinsongzhao
        12
    jinsongzhao  
       2020-03-18 14:23:50 +08:00
    @gz911122 没研究,不过这个参数--skip-lock-tables,看起来是不锁表的
    scukmh
        13
    scukmh  
       2020-03-18 14:24:13 +08:00   ❤️ 1
    Shirakawa
        14
    Shirakawa  
       2020-03-18 14:30:32 +08:00
    crontab+rsync
    aec4d
        15
    aec4d  
       2020-03-18 14:32:13 +08:00
    数据量小可以每天全量备份放 S3
    akira
        16
    akira  
       2020-03-18 14:33:13 +08:00
    你的数据越值钱 你才会花越多的钱去备份它
    shansing
        17
    shansing  
       2020-03-18 14:36:06 +08:00
    @littleylv 用 FTP 不怕明文传输吗(逃
    lialzm
        18
    lialzm  
       2020-03-18 14:37:35 +08:00 via iPhone
    @Shirakawa 同步数据库文件吗,对当前数据库使用会不会有影响?
    hs0000t
        19
    hs0000t  
       2020-03-18 14:39:09 +08:00 via Android
    定期快照
    Shirakawa
        20
    Shirakawa  
       2020-03-18 14:44:26 +08:00
    @lialzm 只是同步备份文件 rsync 直接增量同步数据库文件也不是不行 就是恢复起来麻烦
    tangbao
        21
    tangbao  
       2020-03-18 14:48:16 +08:00 via iPhone
    goodsync + sftp
    murmur
        22
    murmur  
       2020-03-18 14:49:24 +08:00
    我们有专门的存储设备,直接可以对虚机全量备份
    doco
        23
    doco  
       2020-03-18 14:58:26 +08:00
    搬瓦工有个传家宝 19.9 一年的...直接往那里扔
    zzzmh
        24
    zzzmh  
    OP
       2020-03-18 15:10:18 +08:00
    恩恩,学到了,我们目前的方案是每天定时任务,拿到备份文件再加密压缩,再发到类似 oss、或者其他的私密文件存储空间里。但总感觉还是不保险。一怕数据泄露,二怕丢数据。尤其是重要库,丢半天的数据都要命了。
    lqw3030
        25
    lqw3030  
       2020-03-18 15:59:59 +08:00
    树莓派主从
    tomczhen
        26
    tomczhen  
       2020-03-18 16:01:56 +08:00 via Android
    云平台有磁盘镜像功能,定时镜像。

    弄个对象存储 client 同步到私有 bucket,不放心可以压缩打包时加密。
    chztv
        27
    chztv  
       2020-03-18 16:18:13 +08:00
    @vazo 为啥要装 wordpress ??
    ajaxfunction
        28
    ajaxfunction  
       2020-03-18 16:35:24 +08:00
    每天夜里
    定时发 cdn
    ohmyzsh
        29
    ohmyzsh  
       2020-03-18 16:42:53 +08:00
    mysqldump > tar > dropbox
    nuyan
        30
    nuyan  
       2020-03-18 16:57:21 +08:00
    @akira 这话属实没毛病
    baobao1270
        31
    baobao1270  
       2020-03-18 16:58:33 +08:00
    set CURRENT_DATE=%date:~0,4%-%date:~5,2%-%date:~8,2%
    ssh %SERVER% "tar -czvf /home/backup-bot/mysql-data.tar.gz /var/lib/mysql"
    scp %SERVER%:/home/backup-bot/mysql-data.tar.gz D:\GoogleDrive\%CURRENT_DATE%.tar.gz
    lc7029
        32
    lc7029  
       2020-03-18 17:43:28 +08:00
    Oracle RAC,存储做 HA
    定期离线完整备份到磁带
    ala2008
        33
    ala2008  
       2020-03-18 17:53:52 +08:00
    数据异步 /同步复制到另外的数据库
    ylsc633
        34
    ylsc633  
       2020-03-18 18:03:38 +08:00   ❤️ 1
    现在云主机 快照都是收费的!

    所以我把我博客写了一个功能!

    每天定时把博客的静态文件(上传的图片,其他不要) + 数据库导出

    发送到我邮箱!

    https://github.com/izghua/go-blog#main
    threegrandfather
        35
    threegrandfather  
       2020-03-18 18:14:03 +08:00
    rsync 走你的 binlog ?
    jzmws
        36
    jzmws  
       2020-03-18 18:21:07 +08:00
    xtrabackup 腾讯云 rds 数据库用的 ,自己搞了一下 很好用
    RookieZoe
        37
    RookieZoe  
       2020-03-18 18:21:25 +08:00   ❤️ 3
    个人小项目我一般用 docker-compose 跑服务。

    数据库备份还原:
    # PostgreSQL backup
    docker exec -i $CONTAINER_NAME pg_dump -U $DB_USER -d $DB_NAME -Fc > $FILE_NAME.dump

    # PostgreSQL restore
    ## 1. 创建目标数据库
    docker exec -i $CONTAINER_NAME psql -U $DB_USER -d postgres -c "create database $DB_NAME"
    ## 2. 恢复数据库
    docker exec -i $CONTAINER_NAME pg_restore -c -U $DB_USER -d $DB_NAME -Fc < $FILE_NAME.dump

    # MySQL backup
    docker exec $CONTAINER_NAME sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > $FILE_NAME.sql

    # MySQL restore
    docker exec -i $CONTAINER_NAME sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < $FILE_NAME.sql

    全部备份:
    直接加密码压缩 docker-compose.yml 所在项目文件夹,然后上传完事。。。
    mayx
        38
    mayx  
       2020-03-18 18:26:15 +08:00 via Android
    懒得手动备份,都是直接上快照
    programV2
        39
    programV2  
       2020-03-18 19:05:26 +08:00 via iPhone
    @jinsongzhao 你这个只是把数据库备份到本地吗?
    vibbow
        40
    vibbow  
       2020-03-18 19:18:13 +08:00
    阿里云 DBS
    programV2
        41
    programV2  
       2020-03-18 19:25:54 +08:00 via iPhone
    @RookieZoe 我也是用 DOcker. 请问全部备份:
    直接加密码压缩 docker-compose.yml 所在项目文件夹, 如果迁移至不同的主机, 这个以后怎么恢复呢?。

    还是说只要备份数据库就行了?但我的是 Drupal 网站,用的是自己的主题。好像还需要备份源码
    rockyou12
        42
    rockyou12  
       2020-03-18 21:32:18 +08:00
    数据量小上面的方案还行,稍微大点还是老实买云数据库保险
    caotian
        43
    caotian  
       2020-03-18 21:45:57 +08:00
    以前定时任务, 现在阿里云出了 DBS 数据库备份了, 支持自建库, 最低的配置的一年也就 170 多好像, 小库够用了, 可以备份到 OSS 里, 保险
    janxin
        44
    janxin  
       2020-03-18 21:50:50 +08:00
    mysqldump
    surpass
        45
    surpass  
       2020-03-18 22:37:13 +08:00
    你们用的哪家的云服务器?
    yEhwG10ZJa83067x
        46
    yEhwG10ZJa83067x  
       2020-03-18 23:09:02 +08:00
    做主从
    再定时吧从数据库备份出来上传到亚马逊
    xi2008wang
        47
    xi2008wang  
       2020-03-18 23:21:32 +08:00
    mysqldump tgz cos
    wangyzj
        48
    wangyzj  
       2020-03-18 23:23:09 +08:00
    xtrabackup
    gearfox
        49
    gearfox  
       2020-03-18 23:23:13 +08:00
    @scukmh 谢谢,明天我去试试
    RookieZoe
        50
    RookieZoe  
       2020-03-19 00:14:31 +08:00
    @programV2

    就比如我的 gogs 项目文件树是这样的:

    ```文件树
    ├─gogs/
    ├─db-data/
    ├─site-data/
    ├─docker-compose.yml
    ```

    然后 docker-compose.yml 部分配置如下:

    ``` docker-compose.yml
    # 部分配置省略
    services:
    gogs.postgresql:
    image: postgres:12-alpine
    expose:
    - 5432
    volumes:
    - ./db-data/:/var/lib/postgresql/data/
    restart: always
    environment:
    - TZ=Asia/Shanghai
    - POSTGRES_DB=name
    - POSTGRES_USER=user
    - POSTGRES_PASSWORD=password
    network_mode: bridge
    container_name: gogs.postgresql

    gogs.core:
    image: gogs/gogs:latest
    ports:
    - 22
    - 3000
    volumes:
    - ./site-data/:/data/
    restart: always
    depends_on:
    - gogs.postgresql
    environment:
    - TZ=Asia/Shanghai
    - RUN_CROND=true
    network_mode: bridge
    external_links:
    - gogs.postgresql
    container_name: gogs.core
    ```

    然后你保留文件权限压缩整个 gogs 文件夹就完事了。。。
    解压之后直接进目录 docker-compos up -d 就可以了。。。
    RookieZoe
        51
    RookieZoe  
       2020-03-19 00:18:37 +08:00
    @programV2

    v 站的 md 语法一直搞不明白。。。

    文件树更正一下:

    ├─gogs/
     ├─db-data/
     ├─site-data/
     ├─docker-compose.yml

    至于是只备份数据库还是全部看你项目构成以及你个人喜好吧。。。
    SuperAllen
        52
    SuperAllen  
       2020-03-19 01:20:51 +08:00 via Android
    既然是一起的,自动快照策略搞定,不仅数据库备份,文件和系统环境也备份了
    programV2
        53
    programV2  
       2020-03-19 02:42:38 +08:00
    @RookieZoe 那这么说假如直接 rsync 增量备份你的 gogs/ 文件夹, 以后在新的服务器上也可以 直接进目录 docker-compos up -d 就可以了? 我是担心到时 db-data 文件夹这个恢复不起来?
    lxfxf
        54
    lxfxf  
       2020-03-19 04:49:22 +08:00
    Teamcity 定期备份出来一个 dump 传到 Google cloud storage 上。
    geekvcn
        55
    geekvcn  
       2020-03-19 05:46:55 +08:00 via Android
    定时快照,每周归档
    Tink
        56
    Tink  
       2020-03-19 07:37:40 +08:00 via iPhone
    直接给虚拟机拍快照不行么
    RookieZoe
        57
    RookieZoe  
       2020-03-19 07:52:11 +08:00 via iPhone
    @programV2 我只在几台系统都是 debian 的机器上试过,是可以的,如果几台机器系统不一样不确定行不行,没实际操作过。。。
    u0mo5
        58
    u0mo5  
       2020-03-19 08:05:06 +08:00
    宝塔面板支持数据库备份脚本
    或者直接用一个定时脚本
    Chaidu
        59
    Chaidu  
       2020-03-19 08:17:06 +08:00   ❤️ 1
    只有我一个人用 git 私有仓库备份数据库吗?哈哈
    llussy
        60
    llussy  
       2020-03-19 08:48:38 +08:00
    xtrabackup/mysqldump --> rsync
    Itesting
        61
    Itesting  
       2020-03-19 08:54:52 +08:00 via iPhone
    mysql 的话 天为单位 xtrbackup 全量备份,小时为单位 binlog 备份
    zzzmh
        62
    zzzmh  
    OP
       2020-03-19 09:21:03 +08:00
    @Chaidu 天才哈哈哈
    raptor
        63
    raptor  
       2020-03-19 09:42:22 +08:00
    当然是 cron + xtrabackup + binlog backup + ssh/rsync 到异地服务器或本地电脑,要保密还可以加一层 gpg
    phxsuns
        64
    phxsuns  
       2020-03-19 09:46:21 +08:00
    每天自动全盘做个快照。
    如果有问题,就全盘恢复到昨天。
    zunceng
        65
    zunceng  
       2020-03-19 09:57:58 +08:00
    买 mysql 服务啊
    良心云 web 上有个按钮 定时冷备 (不是打广告 基本每个云厂商都有这个功能)
    imnpc
        66
    imnpc  
       2020-03-19 16:02:35 +08:00
    PHP 的话 用宝塔 可以定时自动备份到阿里云 OSS 备份到私有的即可
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   968 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:42 · PVG 05:42 · LAX 13:42 · JFK 16:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.