目录
- 1. SH文件
- 1.1 SH文件示例
- 1.2 文件解释
- 1.3 .sh文件执行
- 2. 备份线上数据库的.sh文件
- 2.1 文件命令解析
- 3. 命令执行
- 4. 线下dump文件的恢复与备份
环境: | linux |
容器: | docker |
1. SH文件
SH文件通常指的是 Shell 脚本文件,文件后缀名为.sh,其中包含一系列要由操作系统的命令解释器执行的命令。
也就是说,我们可以使用shell命令一次性执行.sh文件里面的所有命令(方便、避免重复做事)
1.1 SH文件示例
在 Shell 脚本文件中,可以通过直接编写命令来执行特定的操作。
#!/bin/bash# 这是一个简单的 Shell脚本 ;echo命令通常是用来打印的
echo "Hello, World!"# 使用变量
name="John"
echo "Welcome, $name!"
执行这个.sh脚本,控制台(终端)就会输出
Hello, World!
Welcome,John!
1.2 文件解释
#!/bin/bash:指定了用于执行脚本的解释器,这里是 Bash。
echo "Hello, World!":打印 “Hello, World!” 到终端。
name="John":定义了一个变量 name,并赋值为 “John”。
echo "Welcome, $name!":使用变量输出 “Welcome, John!”。
1.3 .sh文件执行
假如我们把上面编辑好的.sh文件进行保存,命名为test.sh
执行命令一般基本上都使用:
bash test.sh
# 或者
sh test.sh
2. 备份线上数据库的.sh文件
#!/bin/bash
#开始进行数据库备份
echo "开始进行数据库备份!"#备份数据库1
echo "备份数据库1"
docker exec -i postgres14_1 /bin/bash -c
'pg_dump -h 127.0.0.1 -p 5432 -U postgres -Fc -f /var/lib/postgresql/pgdumpFile/xxx_`date +%Y%m%d%H%M%S`.dump test1'#备份数据库2
echo "备份数据库2"
docker exec -i postgres14_2 /bin/bash -c
'pg_dump -h 127.0.0.1 -p 5432 -U postgres -Fc -f /var/lib/postgresql/pgdumpFile/xxx_`date +%Y%m%d%H%M%S`.dump test2'
echo "备份数据库成功!"
2.1 文件命令解析
docker exec -i postgres14_1 /bin/bash -c
'pg_dump -h 127.0.0.1 -p 5432 -U postgres -Fc -f /var/lib/postgresql/pgdumpFile/xxx_`date +%Y%m%d%H%M%S`.dump test1'
-
echo
命令用来打印 -
docker exec
命令,用于在正在运行的 Docker 容器中执行一个命令(若当前doker容器未在运行,须使用其他命令使其处于运行状态)- 运行容器:
docker run -d --name mycontainer image_name
- 这里,
mycontainer
是你给容器起的名字,image_name
是你要使用的Docker镜像的名字。
- 运行容器:
-
-i
: 交互模式选项,允许你与在容器内部运行的命令进行交互。尽管在这个 pg_dump 命令的上下文中可能不是必需的,因为 pg_dump 通常不需要交互输入,但它可能是为了确保任何需要的输入(尽管在这个场景中不太可能)都能正确传递。 -
postgres14_1
: 这是你想要执行命令的容器的名称,也就是当前数据库所在数据库服务的容器名。 -
/bin/bash -c
: 使用 Bash shell 来执行后面的命令字符串。-c
选项允许你传递一个字符串给Bash
作为要执行的命令。
'pg_dump -h 127.0.0.1 -p 5432 -U postgres -Fc -f /var/lib/postgresql/pgdumpFile/xxx_`date +%Y%m%d%H%M%S`.dump test1'
- 这是实际要在容器内部执行的 pg_dump 命令。
pg_dump
: PostgreSQL 的备份工具。h 127.0.0.1
: 指定 PostgreSQL 数据库服务器的地址,这里指向容器内部的本地地址。p 5432
: 指定 PostgreSQL 数据库服务器的端口号。U postgres
: 使用 postgres 用户来连接数据库。Fc
: 创建一个自包含格式的备份。f /var/lib/postgresql/pgdumpFile/xxx_
date +%Y%m%d%H%M%S.dump
: 指定备份文件的输出路径和名称。- 这里使用了命令替换(反引号中的 date +%Y%m%d%H%M%S),它会执行 date 命令并获取当前的日期和时间(格式为年月日时分秒),然后将这个日期和时间字符串插入到文件名中,从而生成一个带有时间戳的备份文件名。
- 其中
/var/lib/postgresql/pgdumpFile是映射路径
.sh要在docker-compose.yml
文件里面当前映射路径对应的实际路径中,否则则会报错:找不到当前路径
test1
: 这是你想要备份的数据库的名称。(一个数据库服务下可能有多个数据库,所以要写具体备份的数据库)
综上所述,这个命令的作用是:在 postgres14_1
容器中,使用 pg_dump 工具备份名为 test1
的 PostgreSQL 数据库,并将备份文件保存在 /var/lib/postgresql/pgdumpFile路径映射的绝对路径中,
数据库备份名为xxx_YYYYMMDDHHMMSS.dump
,其中 YYYYMMDDHHMMSS
是当前日期和时间的字符串表示。这样做的好处是每次备份都会生成一个具有唯一时间戳的文件名,从而避免文件名冲突,并使得可以轻易识别备份的创建时间。
3. 命令执行
假如我们保存该shell脚本为pgsqldump.sh
的文件
我们使用cd命令进入该SH文件所在的绝对目录下使用命令:
bash pgsqldump.sh
输出以下结果:
开始进行数据库备份!
备份数据库1
备份数据库2
备份数据库成功
然后再去保存dump文件的地方去看是否有备份文件已存在:如下
4. 线下dump文件的恢复与备份
【PostgreSql】本地备份为dump文件与恢复数据库(单表or整个数据库)