关于 Linux中数据备份的一些总结(物理、逻辑、远程差异备份)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:   一般需求增量上线的时候,会备份应用和应用数据,保证升级失败也可以回退回去,今天和小伙伴聊聊数据备份的事。日常备份可以通过定时任务进行备份,也可以手动执行备份这里和小伙分享一些备份的脚本Demo,写的很粗。博文内容包括:日志备份,数据库备份(mysql)。备份方式分为:物理备份、逻辑备份、远程差异备份。  等长大就明白了。”小时候总是被人这么说。但那是不折不扣的谎言。我对任何事都只能越来越不明白。……这的确令人不安。但在另一方面,正是因为这样,自己才没有失去对生的好奇这也是事实。 ——中岛敦《山月记》  日志备份这里很简单,这里我们写一个shell脚本,通过脚本的方式进行,当然,如果

  一般需求增量上线的时候,会备份应用和应用数据,保证升级失败也可以回退回去,今天和小伙伴聊聊数据备份的事。日常备份可以通过定时任务进行备份,也可以手动执行备份这里和小伙分享一些备份的脚本Demo,写的很粗。博文内容包括:日志备份,数据库备份(mysql)。备份方式分为:物理备份、逻辑备份、远程差异备份。

  等长大就明白了。”小时候总是被人这么说。但那是不折不扣的谎言。我对任何事都只能越来越不明白。……这的确令人不安。但在另一方面,正是因为这样,自己才没有失去对生的好奇这也是事实。 ——中岛敦《山月记》

  日志备份这里很简单,这里我们写一个shell脚本,通过脚本的方式进行,当然,如果需要,这个脚本可以配置到定时任务里。

  ┌──[root@liruilongs.github.io]-[~]

  └─$ pwd

  /root

  ┌──[root@liruilongs.github.io]-[~]

  └─$ mkdir bak_shell

  ┌──[root@liruilongs.github.io]-[~]

  └─$ cd bak_shell/

  ┌──[root@liruilongs.github.io]-[~/bak_shell]

  └─$ vim bak_log.sh

  ┌──[root@liruilongs.github.io]-[~/bak_shell]

  └─$ sh bak_log.sh

  ┌──[root@liruilongs.github.io]-[~/bak_shell]

  └─$ cat bak_log.sh

  #!/bin/bash

  ###此脚本运用日期定义备份的文件名,方便与每天进行备份不重复

  date=date +"%Y%m%d%H%M%S"

  if [ ! -f /tmp/log-$date.tar.gz ];then

  tar -zcPf /tmp/log-$date.tar.gz /var/log

  fi

  ┌──[root@liruilongs.github.io]-[/tmp]

  └─$ cd /tmp/;ll -h | grep log-*

  -rw-r--r-- 1 root root 4.4M 11月 15 10:51 log-20211115110510.tar.gz

  ┌──[root@liruilongs.github.io]-[/tmp]

  └─$

  关系数据库备份,这里我们用物理机直接操作,用容器也是一样的。

  ###安装mariadb数据库,重启服务

  ┌──[root@liruilongs.github.io]-[/tmp]

  └─$ yum -y install mariadb mariadb-server

  ┌──[root@liruilongs.github.io]-[/tmp]

  └─$ systemctl restart mariadb

  ####查看数据库服务的进程信息

  ┌──[root@liruilongs.github.io]-[/tmp]

  └─$ ss -ntulpa | grep mysql

  tcp LISTEN 0 50 :3306 :* users:(("mysqld",pid=52010,fd=14))

  ┌──[root@liruilongs.github.io]-[/tmp]

  └─$ # 登录测试下

  ┌──[root@liruilongs.github.io]-[/var/lib/mysql]

  └─$ mysql -uroot

  Welcome to the MariaDB monitor. Commands end with ; or \g.

  Your MariaDB connection id is 2

  Server version: 5.5.68-MariaDB MariaDB Server

  Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  MariaDB [(none)]> show databases

  -> ;

  +--------------------+

  | Database |

  +--------------------+

  | information_schema |

  | mysql |

  | performance_schema |

  | test |

  +--------------------+

  4 rows in set (0.00 sec)

  MariaDB [(none)]> use test

  Database changed

  MariaDB [test]> show tables

  -> ;

  Empty set (0.00 sec)

  MariaDB [test]>

  mysqldump可以对mysql数据库中的库进行备份,一般的数据库都会提供相应的减肥备份工具,比如MongoDB的mongodump

  ##mysqldump可以对数据库中的库进行备份

  ##格式: mysqldump -u"用户名" --password="" 数据库名 > 备份名.sql

  ┌──[root@liruilongs.github.io]-[/]

  └─$ mysqldump mysql > mysql.sql

  ┌──[root@liruilongs.github.io]-[/]

  └─$ ll | grep mysql*

  -rw-r--r-- 1 root root 514667 11月 15 15:52 mysql.sql

  脚本编写

  ┌──[root@liruilongs.github.io]-[/]

  └─$ mkdir mysql;cd mysql

  ┌──[root@liruilongs.github.io]-[/mysql]

  └─$ vim mysqldump.sh

  ┌──[root@liruilongs.github.io]-[/mysql]

  └─$ sh mysqldump.sh

  ┌──[root@liruilongs.github.io]-[/tmp]

  └─$ cd /tmp/;ls -h | grep *.sql

  mysql-20211115160404.sql

  ┌──[root@liruilongs.github.io]-[/tmp]

  └─$ cat /mysql/mysqldump.sh

  #!/bin/bash

  ###date 指定备份数据名;iuser 指定登录数据库的用户

  ###ipass 指定登录密码,默认为空;db 指定要备份的数据库

  date=$(date +"%Y%m%d%H%M%S")

  iuser=root

  ipass=db=mysql

  ###文件在/tmp 下不存在时才会进行备份

  if [ ! -f /tmp/$db-$date.sql ];then

  mysqldump -u$iuser --password="$ipass" $db > /tmp/$db-$date.sql

  fi

  ┌──[root@liruilongs.github.io]-[/tmp]

  └─$

  物理备份即直接备份相关文件,mysql默认地表数据相关文件在/var/lib/mysql中

  ┌──[root@liruilongs.github.io]-[/tmp]

  └─$ cd /mysql

  ┌──[root@liruilongs.github.io]-[/mysql]

  └─$ ls

  mysqldump.sh

  ┌──[root@liruilongs.github.io]-[/mysql]

  └─$ vim bak_mysql.sh

  ┌──[root@liruilongs.github.io]-[/mysql]

  └─$ sh bak_mysql.sh

  tar: 从成员名中删除开头的“/”

  tar: 从成员名中删除开头的“/”

  tar: 从成员名中删除开头的“/”

  。。。。。

  ┌──[root@liruilongs.github.io]-[/tmp]

  └─$ cd mysql/

  ┌──[root@liruilongs.github.io]-[/tmp/mysql]

  └─$ ls

  columns_priv.frm-20211115160950.tar.gz proc.frm-20211115160950.tar.gz

  columns_priv.MYD-20211115160950.tar.gz proc.MYD-20211115160950.tar.gz

  。。。。。。

  ┌──[root@liruilongs.github.io]-[/mysql]

  └─$ cat bak_mysql.sh

  #!/bin/bash

  ###对数据库中的mysql库下每一个表都进行打包备份;备份文件存放在/tmp/mysql目录下

  date=$(date +"%Y%m%d%H%M%S")

  db_dir="/var/lib/mysql"

  db=mysql

  [ ! -d /tmp/$db ] && mkdir /tmp/$db

  for i in $(ls $db_dir/$db)

  do

  tar -zcf /tmp/$db/$i-$date.tar.gz $db_dir/$db/$i

  done

  ┌──[root@liruilongs.github.io]-[/mysql]

  └─$

  这个时候tar报错加了个 P参数就不报了,但是没必要,可以正常打包

  所谓差异备份,即通过inotify 来监听文件变化,通rsync来增量同步数据。

  这里我们本机模拟一下,一般是备份到远程机器上的,备份前一定做ssh免密 ssh-copy-id root@192.168.26.55

  ┌──[root@liruilongs.github.io]-[/var/www/html]

  └─$ yum -y install rsync

  ┌──[root@liruilongs.github.io]-[/mysql]

  └─$ yum search inotify-tools

  已加载插件:fastestmirror

  Loading mirror speeds from cached hostfile==============================================N/S matched: inotify-tools===============================================inotify-tools.x86_64 : Command line utilities for inotify

  inotify-tools-devel.x86_64 : Headers and libraries for building apps that use libinotifytools

  名称和简介匹配 only,使用“search all”试试。

  ┌──[root@liruilongs.github.io]-[/mysql]

  └─$ yum -y install inotify-tools

  ┌──[root@liruilongs.github.io]-[/mysql]

  └─$ rpm -qal inotify-tools

  /usr/bin/inotifywait

  /usr/bin/inotifywatch

  /usr/lib64/libinotifytools.so.0

  /usr/lib64/libinotifytools.so.0.4.1

  /usr/share/doc/inotify-tools-3.14

  /usr/share/doc/inotify-tools-3.14/AUTHORS

  /usr/share/doc/inotify-tools-3.14/COPYING

  /usr/share/doc/inotify-tools-3.14/ChangeLog

  /usr/share/doc/inotify-tools-3.14/NEWS

  /usr/share/doc/inotify-tools-3.14/README

  /usr/share/man/man1/inotifywait.1.gz

  /usr/share/man/man1/inotifywatch.1.gz

  进行模拟差异备份

  ┌──[root@liruilongs.github.io]-[~]

  └─$ mkdir rsync;cd rsync

  ┌──[root@liruilongs.github.io]-[~/rsync]

  └─$ vim isync.sh

  ┌──[root@liruilongs.github.io]-[~/rsync]

  └─$ mkdir /root/liruilong

  ┌──[root@liruilongs.github.io]-[~/rsync]

  └─$ sh isync.sh &

  [1] 17575

  ┌──[root@liruilongs.github.io]-[~/rsync]

  └─$ cd /root/liruilong/

  ┌──[root@liruilongs.github.io]-[~/liruilong]

  └─$ ls

  ┌──[root@liruilongs.github.io]-[~/liruilong]

  └─$ cd /var/www/html/

  ┌──[root@liruilongs.github.io]-[/var/www/html]

  └─$ echo "123456" > liruilong.txt

  ┌──[root@liruilongs.github.io]-[/var/www/html]

  └─$ cat liruilong.txt

  123456

  ┌──[root@liruilongs.github.io]-[/var/www/html]

  └─$ cd /root/liruilong/

  ┌──[root@liruilongs.github.io]-[~/liruilong]

  └─$ ls

  liruilong.txt

  ┌──[root@liruilongs.github.io]-[~/liruilong]

  └─$ cat liruilong.txt

  123456

  ┌──[root@liruilongs.github.io]-[~/liruilong]

  └─$ jobs

  [1]+ 运行中 sh isync.sh &(工作目录:~/rsync)

  ┌──[root@liruilongs.github.io]-[~/liruilong]

  └─$

  备份脚本

  ┌──[root@liruilongs.github.io]-[~/rsync]

  └─$ ls

  isync.sh

  ┌──[root@liruilongs.github.io]-[~/rsync]

  └─$ cat isync.sh

  #!/bin/bash

  ##from_dir 为要被同步的目录

  from_dir="/var/www/html/"

  ##将$from_dir下的内容,同步到本机的/root/liruilong/目录下

  rsync_cmd="rsync -az --delete $from_dir root@192.168.26.55:/root/liruilong"

  ##inotifywait监听 $from_dir 目录,目录下发生文件的变化时,执行同步操作,脚本后台运行

  while inotifywait -rqq -e modify,move,create,delete,attrib $from_dir

  do

  $rsync_cmd

  done

  ┌──[root@liruilongs.github.io]-[~/rsync]

  └─$

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
缓存 监控 Linux
在Linux中,如何看当前系统有几颗物理CPU和每颗CPU的核数?
在Linux中,如何看当前系统有几颗物理CPU和每颗CPU的核数?
|
2月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
138 3
|
2月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
59 3
|
3月前
|
安全 Linux Go
Linux数据备份与恢复
Linux数据备份与恢复
51 5
|
5月前
|
存储 Linux 数据库
在Linux中,什么是快照备份?
在Linux中,什么是快照备份?
|
5月前
|
存储 Linux 数据安全/隐私保护
在Linux中,如何创建文件系统的备份?
在Linux中,如何创建文件系统的备份?
|
5月前
|
Linux 数据库
在Linux中,什么是冷备份和热备份?
在Linux中,什么是冷备份和热备份?
|
5月前
|
Unix Linux 测试技术
在Linux中,如何恢复备份的文件?
在Linux中,如何恢复备份的文件?
|
5月前
|
SQL 关系型数据库 MySQL
在Linux中,mysql 数据备份工具有哪些?
在Linux中,mysql 数据备份工具有哪些?
|
5月前
|
存储 监控 安全
在Linux中,如何进行系统备份?
在Linux中,如何进行系统备份?