Skip to main content

databasebackup-restore

1、gitlab数据库

备份

机器IP 192.168.1.203 1.1 宿主机数据库目录 /data/qt_gitlab_data/data/backups

1.2 定时备份命令(宿主机crontab) 00 21 * * * docker exec -i 9a7b5170b200 sh /root/gitlabbak.sh (切勿随意执行)

1.3 容器中备份的脚本:

[root@beijing-physicalsvr04 backup]# docker exec -i 9a7b5170b200  cat /root/gitlabbak.sh
gitlab-rake gitlab:backup:create

1.4 异地备份:

cd  /data/qt_gitlab_data/data/backups

备份最近的一天的数据包,比如备份像上面大的2023_06_14这天的tar包 说明: 由于备份文件比较大,需要使用xftp 工具备份即可

恢复

数据备份文件: 盘阵服务器192.168.1.205:/backup/devops_backup/gitlab_backup backups: 基于命令恢复的方式 {config,data,logs}: 基于备份文件恢复的方式-优先推荐此方式

基础镜像


192.168.1.207:51888/base/gitlab-ce:12.8.1-ce.0
192.168.1.203:51888/base/gitlab-ce:12.8.1-ce.0

创建文件夹

mkdir -p   /data/qt_gitlab_data/

移动备份文件

mv  /backup/devops_backup/gitlab_backup/*   /data/qt_gitlab_data/

部署服务

docker service create \
--hostname git.zlqit.com \
--network devops \
--mount type=bind,src=/data/qt_gitlab_data/config,dst=/etc/gitlab \
--mount type=bind,src=/data/qt_gitlab_data/logs,dst=/var/log/gitlab \
--mount type=bind,src=/data/qt_gitlab_data/data,dst=/var/opt/gitlab \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://git.zlqit.com:22280'; gitlab_rails['lfs_enabled'] = true;" \
--name qtgit \
--constraint 'node.labels.role == entry' \
--label traefik.enable=true \
--label traefik.http.routers.gitlab.rule="Host(\`git.zlqit.com\`)" \
--label traefik.http.services.gitlab-service.loadbalancer.server.port=22280 \
192.168.1.207:51888/base/gitlab-ce:12.8.1-ce.0

基于源码安装的恢复

修改服务器的ssh端口为2023

创建文件目录

mkdir -p /data/web/conf.d
mkdir -p /data/web/html
mkdir -p /data/web/cert
mkdir -p /data/gitlab/redis
mkdir -p /data/gitlab/postgresql
mkdir -p /data/gitlab/data

挂载数据盘到/data

执行启动

docker-compose up

拷贝备份文件到容器

root@new-gitlab:/data# docker cp 1701552136_2023_12_02_11.11.3_gitlab_backup.tar  gitlab:/home/git/data/backups/

进入容器执行

root@new-gitlab:/data# docker exec -it gitlab bash
cd /home/git/gitlab/vendor
sudo -u git -H bundle exec rake gitlab:backup:restore BACKUP=/home/git/data/backups/1701552136_2023_12_02_11.11.3 RAILS_ENV=production

image-20231210234638640

恢复遇到的一些错误

image-20231210234024392

sudo -u git -H bundle install --path vendor/bundle

2.达梦数据库备份

备份

2.1 宿主机数据库目录 /data/dm8_data/backup

2.2定时备份命令(宿主机crontab)

宿主机定时命令:  00 20 * * * docker exec -i 66e3e7c87a32  sh /root/dm_crontab_bak.sh  (切勿随意执行) 

2.3 容器中备份的脚本:

[root@beijing-physicalsvr04 backup]# docker exec -i 66e3e7c87a32  cat  /root/dm_crontab_bak.sh
#!/bin/bash
cd /opt/dmdbms/bin/
backup_date=`date +%Y%m%d`
./dexp xxxaaaa/xxxaaaa@localhost:5236 FILE=iteshelldev$backup_date.dmp LOG=iteshelldev$backup_date.log DIRECTORY=/opt/dmdbms/data/backup/ >/dev/null 2>&1
./dexp xxxaaaa/xxxaaaa@localhost:5236 FILE=ilync$backup_date.dmp LOG=ilync$backup_date.log DIRECTORY=/opt/dmdbms/data/backup/ >/dev/null 2>&1
./dexp xxxaaaa/xxxaaaa@localhost:5236 FILE=shdb$backup_date.dmp LOG=shdb$backup_date.log DIRECTORY=/opt/dmdbms/data/backup/ >/dev/null 2>&1
./dexp xxxaaaa/xxxaaaa@localhost:5236 FILE=iteshelltest$backup_date.dmp LOG=iteshelltest$backup_date.log DIRECTORY=/opt/dmdbms/data/backup/ >/dev/null 2>&1
./dexp xxxaaaaxxxaaaa@localhost:5236 FILE=jbjbjb$backup_date.dmp LOG=jbjbjb$backup_date.log DIRECTORY=/opt/dmdbms/data/backup/ >/dev/null 2>&1
./dexp xxxaaaa/xxxaaaa@localhost:5236 FILE=alerac$backup_date.dmp LOG=alerac$backup_date.log DIRECTORY=/opt/dmdbms/data/backup/ >/dev/null 2>&1

2.4 异地备份:

1.导出最近一次数据备份文件
cd /data/dm8_data/backup
ls -lrt | grep -E "iteshellde|ilync|shdb|iteshelltest|jbjbjb|alerac" | awk '{print $NF}' | tail -n 14 > td.txt

2.创建临目录(第一次需要,后续可以省略) mkdir tmp

  1. 移动备份文件到临时目录
for i in `cat td.txt `; do mv $i ./tmp/ ; done
  1. 打开ftp备份下面目录的数据
/data/pg_data/data/backup/tmp

5.把临时备份数据还原到原来的数据目录

mv ./tmp/*  .

恢复

2.1 容器恢复验证方式 镜像 dm8_single:v8.1.2.128_ent_x86_64_ctm_pack4 192.168.1.203:51888/base/dm8_single:v8.1.2.128_ent_x86_64_ctm_pack4 192.168.1.207:51888/base/dm8_single:v8.1.2.128_ent_x86_64_ctm_pack4

创建方式-研发环境部署方式 将备份的数据放到对应的目录 服务器: 192.168.1.205:/backup/db_backup/dm8_backup/backup/daily

6.1.1 在需要恢复的服务器创建文件夹

mkdir -p  /data/dm8_data

6.1.2 复制备份文件到对应的数据目录,假如 alerac20230709.dmp 是最近一次的备份 上传xxx.dmp文件到 /root/

6.1.3 使用docker部署服务 #初始化

docker run -d -p 5236:5236  --name dm8  -e CASE_SENSITIVE=0 -v /data/dm8_data/:/opt/dmdbms/data/  192.168.1.203:51888/base/dm8_single:v8.1.2.128_ent_x86_64_ctm_pack4
#CASE_SENSITIVE不区分大小写

6.1.4 导入数据-取最近一次最新的备份数据 服务器 数据所在文件夹 备份文件-类似以下文件 192.168.1.205 /backup/db_backup/dm8_backup/backup/daily

6.1.5 拷贝文件到容器

docker cp iteshelldev20230719.dmp    dm8:/dm8/dexp/
docker cp iteshelltest20230719.dmp dm8:/dm8/dexp/
docker cp jbjbjb20230719.dmp dm8:/dm8/dexp/
docker cp ilync20230719.dmp dm8:/dm8/dexp/
docker cp alerac20230719.dmp dm8:/dm8/dexp/

6.1.6 配置变量

docker exec -it dm8 bash
vi /etc/profile

DM_HOME=/opt/dmdbms/
export PATH=$PATH:$DM_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
source /etc/profile

6.1.7 通过dm客户端连接数据,然创建相关用户

create user iteshelldev  identified by test2023;
grant dba to iteshelldev;

create user iteshelltest identified by iteshelltest2023;
grant dba to iteshelltest;

create user jbjbjb identified by jbjbjb2023;
grant dba to jbjbjb;

create user ilync identified by ilync2023;
grant dba to ilync;

create user alerac identified by alerac2023;
grant dba to alerac;

6.1.8 然后在容器中导入数据即可

dimp  iteshelldev/iteshelldev2023  directory=/dm8/dexp   file=iteshelldev20230719.dmp      full=y  log=iteshelldev.log 
dimp iteshelltest/iteshelltest2023 directory=/dm8/dexp file=iteshelltest20230719.dmp full=y log=iteshelltest.log
dimp jbjbjb/jbjbjb2023 directory=/dm8/dexp file=jbjbjb20230719.dmp full=y log=jbjbjb.log
dimp ilync/ilync2023 directory=/dm8/dexp file=ilync20230719.dmp full=y log=ilync.log
dimp alerac/alerac2023 directory=/dm8/dexp file=alerac20230719.dmp full=y log=alerac.log

3、pgsql数据库

备份

3.1 宿主机备份目录 /data/pg_data/data/backup

3.2 定时备份命令(宿主机crontab):

宿主机定时命令:   
10 2 * * * docker exec -i 31fdb4cbe63f sh /root/pgsql_crontab_bak_day.sh
00 2 * * 7 docker exec -i 31fdb4cbe63f sh /root/pgsql_crontab_bak_week.sh
50 2 30 * * docker exec -i 31fdb4cbe63f sh /root/pgsql_crontab_bak_month.sh
(切勿随意执行)

3.3 容器中备份的脚本:

root@31fdb4cbe63f:~# cat pgsql_crontab_bak_day.sh 
#!/bin/bash
#cd /opt/dmdbms/bin/
backup_date=`date +%Y%m%d`
pg_dump -U postgres -c crhc_iteshell -f /var/lib/postgresql/data/backup/daily/crhc_iteshell$backup_date.sql
pg_dump -U postgres -c maomei -f /var/lib/postgresql/data/backup/daily/maomei$backup_date.sql
root@31fdb4cbe63f:~# cat pgsql_crontab_bak_week.sh
#!/bin/bash
#cd /opt/dmdbms/bin/
backup_date=`date +%Y%m%d`
pg_dump -U postgres -c dev_heabei_gasu -f /var/lib/postgresql/data/backup/weekly/dev_hebei_gasu$backup_date.sql
pg_dump -U postgres -c dome_gyjftgasu -f /var/lib/postgresql/data/backup/weekly/dome_gyjtgasu$backup_date.sql
pg_dump -U postgres -c test_itesshellgh -f /var/lib/postgresql/data/backup/weekly/test_iteshellgh$backup_date.sql
pg_dump -U postgres -c test_hbsfz -f /var/lib/postgresql/data/backup/weekly/test_hbfz$backup_date.sql
pg_dump -U postgres -c test_hednan_gasu -f /var/lib/postgresql/data/backup/weekly/test_henan_gasu$backup_date.sql
pg_dump -U postgres -c test_hldjgasudb -f /var/lib/postgresql/data/backup/weekly/test_hljgasudb$backup_date.sql
pg_dump -U postgres -c test_hnssdb -f /var/lib/postgresql/data/backup/weekly/test_hndb$backup_date.sql
pg_dump -U postgres -c fanruanfReport -f /var/lib/postgresql/data/backup/weekly/fanruanReport$backup_date.sql
root@31fdb4cbe63f:~# cat pgsql_fcrontab_bak_month.sh
#!/bin/bash
#cd /opt/dmdbms/bin/
backup_date=`date +%Y%m%d`
pg_dump -U postgres -c test_hebei_gasu -f /var/lib/postgresql/data/backup/monthly/test_hebei_gasu$backup_date.sql
pg_dump -U postgres -c test_hlj_tz -f /var/lib/postgresql/data/backup/monthly/test_hlj_tz$backup_date.sql
pg_dump -U postgres -c test_lngasu_gasu -f /var/lib/postgresql/data/backup/monthly/test_lngasu_gasu$backup_date.sql

3.4 异地备份:

  1. 导出最近一次数据备份文件
cd /data/pg_data/data/backup
ls -lrt | grep -E "aa|dev_hebeia_gasu|dev_hlj_tz|dev_hndb|dome_gyjtgasu|test_iteshellgh|test_hbfz|test_hebei_gasu|test_henan_gasu|test_hlj_tz|test_hljgasudb|test_hndb|maomei|fanruanReport" | awk '{print $NF}' | tail -n 14 > db.txt

2.创建临目录(第一次需要,后续可以省略)

mkdir tmp
  1. 移动备份文件到临时目录
for i in `cat td.txt `; do mv $i ./tmp/ ; done
  1. 打开ftp备份下面目录的数据
/data/pg_data/data/backup/tmp

5.把临时备份数据还原到原来的数据目录

mv ./tmp/*  .

恢复

3.5 容器恢复验证及数据恢复验证 /backup/db_backup/pgsql_backup/此目录为数据持久化目录及数据备份目录

3.5.1、拉取postgresql的镜像及服务启动 docker pull 192.168.1.203:51888/git/postgres:13.2

#将数据持久化目录/backup/db_backup/pgsql_backup/往服务器上cp一份然后用于数据持久化目录进行启动容器

docker run -dit -p 5432:5432 --restart=always -v /data/pgsql_data/data/:/var/lib/postgresql/data/ --name pgsql 192.168.1.203:51888/git/postgres:13.2

3.5.2、数据集恢复命令如下

1)、创建数据库实例

create database test_henan_gasu;
create database test_hljgasudb;
create database dev_hebei_gasu;
create database test_hebei_gasu;
create database test_hlj_tz;
create database test_iteshellgh;
create database dome_gyjtgasu;
create database test_hndb;
create database test_hbfz;
create database test_lngasu_gasu;
create database crhc_iteshell;
create database fanruanReport;
create database maomei;

2)、数据导入

psql  -d  test_henan_gasu -f  /var/lib/postgresql/backup/weekly/test_henan_gasu20230729.sql postgres
psql -d test_hljgasudb -f /var/lib/postgresql/backup/weekly/test_hljgasudb20230729.sql postgres
psql -d dev_hebei_gasu -f /var/lib/postgresql/backup/weekly/dev_hebei_gasu20230729.sql postgres
psql -d test_hebei_gasu -f /var/lib/postgresql/backup/monthly/test_hebei_gasu20230729.sql postgres
psql -d test_hlj_tz -f /var/lib/postgresql/backup/monthly/test_hlj_tz20230729.sql postgres
psql -d test_iteshellgh -f /var/lib/postgresql/backup/weekly/test_iteshellgh20230729.sql postgres
psql -d dome_gyjtgasu -f /var/lib/postgresql/backup/weekly/dome_gyjtgasu20230729.sql postgres
psql -d test_hndb -f /var/lib/postgresql/backup/weekly/test_hndb20230729.sql postgres
psql -d test_hbfz -f /var/lib/postgresql/backup/weekly/test_hhbfz20230729.sql postgres
psql -d test_lngasu_gasu -f /var/lib/postgresql/backup/monthly/test_lngasu_gasu20230729.sql postgres
psql -d crhc_iteshell -f /var/lib/postgresql/backup/daily/crhc_iteshell20230729.sql postgres
psql -d fanruanReport -f /var/lib/postgresql/backup/weekly/fanruanReport20230729.sql postgres
psql -d maomei -f /var/lib/postgresql/backup/daily/maomei20230729.sql postgres

使用navicat登录上之后检查各数据库服务的数据是否正常即可;

4、金仓数据库

备份

4.1 宿主机备份目录 /data/kingbase_data/backup

4.2 定时备份命令(宿主机crontab): 宿主机定时命令:

30 20 * * * docker exec -i 238b7890f4ec  sh /root/kingbase_crontab_bak.sh   (切勿随意执行) 

4.3 容器中备份的脚本:

[root@beijing-physicalsvr04 backup]# docker exec -i 238b7890f4ec  cat /root/kingbase_crontab_bak.sh
#!/bin/bash
cd /home/test/KingbaseES/bin/
backup_date=`date +%Y%m%d`
./sys_dump -h 127.0.0.1 -p 54321 -U iteshelldev -W iteshelldev2023 -F c -f /home/kingbase/ES/V8/data/backup/iteshelldev$backup_date.dmp iteshelldev
./sys_dump -h 127.0.0.1 -p 54321 -U iteshelltest -W iteshelltest2023 -F c -f /home/kingbase/ES/V8/data/backup/iteshelltest$backup_date.dmp iteshelltest
./sys_dump -h 127.0.0.1 -p 54321 -U jsiteshell -W jsiteshell2023 -F c -f /home/kingbase/ES/V8/data/backup/jsiteshell$backup_date.dmp jsgasuxt

4.4 异地备份: 1.导出最近一次数据备份文件

cd /data/kingbase_data/backup
ls -lrt | grep -E "iteshelldev2023|iteshelltest2023|jsiteshell2023" | awk '{print $NF}' | tail -n 3 >td.txt

2.创建临目录(第一次需要,后续可以省略)

mkdir tmp

3.移动备份文件到临时目录

for i in `cat td.txt `; do mv $i ./tmp/ ; done

4.打开ftp备份数据

5.把临时备份数据还原到原来的数据目录

mv ./tmp/*  .

恢复

容器恢复验证方式

老镜像-不推荐使用 kdb_case_sensitive_centos7.5_x86_64_v8r3c02b0370:v1 192.168.1.203:51888/base/kdb_case_sensitive_centos7.5_x86_64_v8r3c02b0370:v1 192.168.1.207:51888/base/kdb_case_sensitive_centos7.5_x86_64_v8r3c02b0370:v1

新创建的镜像-使用此镜像 192.168.1.203:51888/base/kdb_case_sensitive_centos7.5_x86_64_v8r3c02b0370:v2 192.168.1.207:51888/base/kdb_case_sensitive_centos7.5_x86_64_v8r3c02b0370:v2

创建方式-研发环境部署方式 将备份的数据放到对应的目录 服务器: 192.168.1.205:/backup/db_backup/kingbase_backup/backup/daily

4.1.1 在需要恢复的服务器创建文件夹 mkdir -p /data/kingbase_data 4.1.2 复制备份文件到对应的数据目录,假如 alerac20230709.dmp 是最近一次的备份 上传xxx.dmp文件到 /data/kingbase_data

4.1.3 创建容器,但不需要挂载 #初始化 docker run -p 54321:54321 --name kingbasev8r3
192.168.1.203:51888/base/kdb_case_sensitive_centos7.5_x86_64_v8r3c02b0370:v2 #CASE_SENSITIVE不区分大小写

4.1.4 导入数据-取最近一次最新的备份数据 服务器 数据所在文件夹 备份文件-类似以下文件 192.168.1.205 涉及到数据库: iteshelldev,iteshelltest /backup/db_backup/kingbase_backup/backup/daily

4.1.5 拷贝数据库文件系统到宿主机

cd   /data/kingbase_data
docker cp kingbasev8r3:/home/test/data .
chmod -R 700 /data/kingbase_data/data
docker rm -f kingbasev8r3

docker run -d -p 54321:54321 --name kingbasev8r3 \
-v /data/kingbase_data/data:/home/test/data/ \
192.168.1.203:51888/base/kdb_case_sensitive_centos7.5_x86_64_v8r3c02b0370:v2

4.1.6 查询是否不区分大小写

docker exec -it kingbasev8r3 bash
cd /home/test/KingbaseES/bin
./ksql -d TEST -U SYSTEM -W 123456
TEST=# show case_sensitive;
case_sensitive
----------------
off
(1 row)

4.1.7 登录数据库-恢复数据

默认用户/密码:SYSTEM/123456
cd /home/test/KingbaseES/bin
./ksql -d TEST -U SYSTEM -W 123456

-- 创建iteshelldev用户
CREATE USER iteshelldev PASSWORD 'iteshelldev2023';
-- 创建iteshelldev库
CREATE DATABASE iteshelldev WITH OWNER = "iteshelldev" ENCODING UTF8;
-- 创建schema
create schema %s

-- 创建iteshelltest用户
CREATE USER iteshelltest PASSWORD 'iteshelltest2023';
-- 创建iteshelltest库
CREATE DATABASE iteshelltest WITH OWNER = "iteshelltest" ENCODING UTF8;
-- 创建schema
create schema %s

4.1.8 将逻辑备份文件导入容器中,指定目录为/root

docker cp iteshelldev20230719.dmp kingbasev8r3:/root/
docker cp iteshelltest20230719.dmp kingbasev8r3:/root

4.1.9 进行数据恢复

docker exec -it kingbasev8r3 bash
cd /home/test/KingbaseES/bin
导入数据,输入system用户名密码
[root@2a866ef87f59 bin]# ./sys_restore -Fc /root/iteshelldev20230719.dmp -Usystem -diteshelldev
Password:
[root@2a866ef87f59 bin]# ./sys_restore -Fc /root/iteshelltest20230719.dmp -Usystem -diteshelltest
Password:

登录验证, 使用客户端登录验证即可

5、Oracle

备份

5.1 宿主机备份目录 192.168.1.203:/data/oracle11g_data/helowin/backup

5.2 定时备份命令(宿主机crontab): 宿主机定时命令:

45 20 * * * docker exec -i 320df33197e2  sh /home/oracle/oracle11g_crontab_bak.sh  (切勿随意执行) 

5.3 容器中备份的脚本:

[root@beijing-physicalsvr04 backup]# docker exec -i 320df33197e2  cat /home/oracle/oracle11g_crontab_bak.sh
#!/bin/bash
source /etc/profile
backup_date=`date +%Y%m%d`
expdp test_yx/test_yx_gasu2023_#@127.0.0.1:1521/helowin directory=datapump_bak dumpfile=yxgasu$backup_date.dmp
expdp test_salt/test_salt_tz2023_#@127.0.0.1:1521/helowin directory=datapump_bak dumpfile=salt$backup_date.dmp
expdp test_cnacg_iteshell/test_cnacg_iteshell_2023_#@127.0.0.1:1521/helowin directory=datapump_bak dumpfile=cnacg$backup_date.dmp

5.4 异地备份: 1.导出最近一次数据备份文件

cd /data/oracle11g_data/helowin/backup
ls -lrt | grep -E "yxgasu|salt|cnacg" | awk '{print $NF}' | tail -n 3 > td.txt

2.创建临目录(第一次需要,后续可以省略) mkdir tmp

  1. 移动备份文件到临时目录
for i in `cat td.txt `; do mv $i ./tmp/ ; done

4.打开ftp备份数据

5.把临时备份数据还原到原来的数据目录

mv ./tmp/*  .

备份镜像地址:
192.168.1.203:18188/base/oracle_11g:latest 192.168.1.207:18188/base/oracle_11g:latest

恢复

6、禅道备份

备份

6.1 宿主机备份目录 创建容器绑定目录:

数据库备份:

6.2 定时备份命令(宿主机crontab): 宿主机定时命令:
30 6 * * * docker exec -i a9e91a450b1d sh /root/zentao_db_bak.sh 40 6 * * * docker exec -i a9e91a450b1d sh /root/clean_sql.sh 41 6 * * * docker exec -i a9e91a450b1d sh /root/clean_upload.sh

6.3 容器中备份的脚本zentao_db_bak.sh

[root@beijing-physicalsvr04 data]# docker exec -i 7f71ec8126dc   cat /root/zentao_db_bak.sh
#!/bin/bash
source /etc/profile
backup_date=`date +%Y%m%d`
BACK_DIR="/opt/zbox/data/backup"
/opt/zbox/run/mysql/mysqldump -uroot -h127.0.0.1 -p$PASS --databases zentao > ${BACK_DIR}/zentao_db_bak_${backup_date}.sql
/opt/zbox/run/mysql/mysqldump -uroot -h127.0.0.1 -p$PASS --databases zentaoep > ${BACK_DIR}/zentaoep_db_bak_${backup_date}.sql
/opt/zbox/run/mysql/mysqldump -uroot -h127.0.0.1 -p$PASS --databases zentaopro > ${BACK_DIR}/zentaopro_db_bak_${backup_date}.sql

###upload backup
backup_date=`date +%Y%m%d%M`
upload_dir="/opt/zbox/app/zentao/www/data/upload"
cd ${upload_dir}
tar -zcf ./backup/upload_bak_${backup_date}.tar.gz --exclude="backup" ./*

数据库备份历史版本和附件保留脚本样例: back_dir="/opt/zbox/data/backup/" sql备份目录 back_dir="/opt/zbox/app/zentao/www/data/upload/backup" upload备份目录

[root@a9e91a450b1d ~]# cat clean_backup.sh  
#!/bin/bash
#此脚本用来定时备份jenkins_home数据 备份数据存放在/usr/local/jenkins_backup/下
FILE_NAME="zentao_backup"
COLOR='echo -e \E[01;32m'
END='\E[0m'
back_dir="/opt/zbox/data/backup/"
id_num="9" ###定义当前保留的版本
cd $data_dir
ls -lt $back_dir/ | grep -v total | awk '{print $9}' | head -n 4


all_file_num=`ls -lt $back_dir/ | grep -v total | awk '{print $9}' | wc | awk '{print $1}'`
rm_list(){
if [ $all_file_num -gt ${id_num} ]; then
a=0
b=0
c=0
t=0
flag=0
declare -a file_prune_list

for list in `ls -lt $back_dir/ | grep -v total | awk '{print $9}'` ; do
all_file_list[$a]=$list
a=$[a+1]
done


#需要保存的历史版本
for list in `ls -lt $back_dir/ | grep -v total | awk '{print $9}' | head -n ${id_num}`; do
save_file_list[$b]=$list
b=$[b+1]
done

#将两组文件存入到数组
arry_list1=${all_file_list[@]}
arry_list2=${save_file_list[@]}

for list1_num in "${all_file_list[@]}"
do
for list2_num in "${save_file_list[@]}"
do
if [[ "${list1_num}" == "${list2_num}" ]]; then
flag=1
break
fi
done
if [[ $flag -eq 0 ]]; then
file_prune_list[t]=$list1_num
t=$((t+1))
else
flag=0
fi
done



else
echo "################### 当前文件 ${FILE_NAME} 历史版本小于${id_num}个 #####################"
exit

fi

for i in "${file_prune_list[@]}"; do
rm -f $back_dir/$i
echo "################## 删除文件 ${FILE_NAME} 历史版本 $i #####################"
done
}
rm_list

6.4 异地备份-手动: 导出附件 1.导出最近一次数据备份文件

cd  /data/zentao_data/upload/backup
ls -lrt | grep -E "upload_bak" | awk '{print $NF}' | tail -n 1 > td.txt

2.创建临目录(第一次需要,后续可以省略) mkdir tmp

3.移动备份文件到临时目录

for i in `cat td.txt `; do mv $i ./tmp/ ; done

4.打开ftp备份数据

5.把临时备份数据还原到原来的数据目录 mv ./tmp/* .

导出数据库 1.导出最近一次数据备份文件

cd  /data/zentao_data/data/backup
ls -lrt | grep -E "zentao_db_bak" | awk '{print $NF}' | tail -n 1 > td.txt

2.创建临目录(第一次需要,后续可以省略) mkdir tmp

3.移动备份文件到临时目录

for i in `cat td.txt `; do mv $i ./tmp/ ; done

4.打开ftp备份数据

5.把临时备份数据还原到原来的数据目录 mv ./tmp/* .

6.5 数据同步-rsync同步 主机 原数据目录 目标目录 192.168.1.203 /data/zentao_data/ 192.168.1.205 /backup/devops_backup/zentao_backup/

恢复

6.1 容器恢复验证 镜像 registry.qt.atme.top:8200/zentao/zentao:v1.0 192.168.1.203:18188/base/zentao:v1.0 192.168.1.207:18188/base/zentao:v1.0

创建方式-研发环境部署方式 将备份的数据放到对应的目录 服务器: 192.168.1.205:/backup/devops_backup/zentao_backup

6.1.1 创建文件夹

mkdir -p  /data/zentao_data/data
mkdir -p /data/zentao_data/upload

6.1.2 复制备份文件到对应的数据目录,upload_bak_2023062530.tar.gz是最近一次的备份

tar xf  upload_bak_2023062530.tar.gz -C /data/zentao_data/upload
tar xf mysql.tar /data/zentao_data/data ##后面进行增量数据导入

6.1.3 使用service部署服务

docker service create --name zentao \
--network devops \
--constraint 'node.labels.role == entry' \
--mount type=bind,src=/etc/localtime,dst=/etc/localtime \
--mount type=bind,src=/data/zentao_data/data,dst=/opt/zbox/data \
--mount type=bind,src=/data/zentao_data/upload,dst=/opt/zbox/app/zentao/www/data/upload \
registry.www.zlqit.com:8200/zentao/zentao:v1.0

6.1.4 导入数据

docker exec -it  xxxxx bash
/opt/zbox/run/mysql/mysql -h127.0.0.1 -p123456
MariaDB [zentao]> source /root/zentao_db_bak_20230718.sql

容器方式 参考以上6.1.1-6.1.2, 6.1.4

docker run  -p 1080:80 --name zentao \
--mount type=bind,src=/etc/localtime,dst=/etc/localtime \
--mount type=bind,src=/data/zentao_data/data,dst=/opt/zbox/data \
--mount type=bind,src=/data/zentao_data/upload,dst=/opt/zbox/app/zentao/www/data/upload \
192.168.1.203:51888/base/zentao:v1.0
[root@demo112 data]# docker exec -it zentao bash

7、jenkins数据备份

备份

说明: 由于数据比较大,大约40G左右,目前只保留两个历史版本,数据备份为2天备份一次 备份日期为: 周一,周三,周五,周日。凌晨00:05 服务器地址: 192.168.1.204 [root@beijing-virtualsvr01 script]# crontab -l 5 00 * * 1,3,5,7 bash /opt/script/jenkins_home_backup.sh

备份脚本

[root@beijing-virtualsvr01 script]# cat /opt/script/jenkins_home_backup.sh 
#!/usr/bin/bash
#此脚本用来定时备份jenkins_home数据 备份数据存放在/data/jenkins/jenkins_backup下
FILE_NAME="jenkins_home_databack"
datetime=`date '+%Y%m%d%H%M%S'`
data_dir="/data/jenkins/.jenkins"
back_dir="/data/jenkins/jenkins_backup"
log_dir="/var/log"
COLOR='echo -e \E[01;32m'
END='\E[0m'
$COLOR"########此脚本用来定时备份jenkins_home数据 备份数据存放在${back_dir}下########" $END
echo "[INFO] ###############`date +%Y-%m-%d_%H:%M:%S`###############" >> ${log_dir}/logout.log
echo "[INFO] `date +%Y-%m-%d_%H:%M:%S` 备份数据存放在${back_dir}" >> ${log_dir}/logout.log
$COLOR"请稍后......" $END
echo "[INFO] `date +%Y-%m-%d_%H:%M:%S` 正在备份数据" >> ${log_dir}/logout.log
cd $data_dir
tar cf $back_dir/${datetime}_jenkins_data.tar.gz ./*
echo "[INFO] `date +%Y-%m-%d_%H:%M:%S` 备份完成,备份文件为--> $back_dir/${datetime}_jenkins_data.tar.gz" >> ${log_dir}/logout.log
echo "[INFO] `date +%Y-%m-%d_%H:%M:%S` 开始清理备份旧数据" >> ${log_dir}/logout.log
ls -lt $back_dir/ | grep -v total | awk '{print $9}' | head -n 4


###对历史版本进行删除
all_file_num=`ls -lt $back_dir/ | grep -v total | awk '{print $9}' | wc | awk '{print $1}'`
rm_list(){
if [ $all_file_num -gt 3 ]; then
a=0
b=0
c=0
t=0
flag=0
declare -a file_prune_list

#所有的历史备份文件
for list in `ls -lt $back_dir/ | grep -v total | awk '{print $9}'` ; do
all_file_list[$a]=$list
a=$[a+1]
done


#需要保存的历史版本
for list in `ls -lt $back_dir/ | grep -v total | awk '{print $9}' | head -n 3`; do
save_file_list[$b]=$list
b=$[b+1]
done

#将两组文件存入到数组
arry_list1=${all_file_list[@]}
arry_list2=${save_file_list[@]}

for list1_num in "${all_file_list[@]}"
do
for list2_num in "${save_file_list[@]}"
do
if [[ "${list1_num}" == "${list2_num}" ]]; then
flag=1
break
fi
done
if [[ $flag -eq 0 ]]; then
file_prune_list[t]=$list1_num
t=$((t+1))
else
flag=0
fi
done



else
echo "################### 当前文件 ${FILE_NAME} 历史版本小于3个 #####################"
echo "[INFO] `date +%Y-%m-%d_%H:%M:%S` 当前文件 ${FILE_NAME} 历史版本小于3个 " >> ${log_dir}/logout.log
exit
echo "[INFO] `date +%Y-%m-%d_%H:%M:%S` 当前任务已结束" >> ${log_dir}/logout.log
fi

for i in "${file_prune_list[@]}"; do
echo [INFO]正在删除文件 $back_dir/$i
echo "[INFO] `date +%Y-%m-%d_%H:%M:%S` 正在删除文件 $back_dir/$i " >>${log_dir}/logout.log
rm -f $back_dir/$i
echo "################## 删除文件 ${FILE_NAME} 历史版本 $i #####################"
echo "[INFO] `date +%Y-%m-%d_%H:%M:%S` 当前任务已结束" >> ${log_dir}/logout.log
done
}
rm_list

8、Kvm备份

30 2 * * 1-5 sh /data/script/kvm_snapshot.sh

####快照命令

[root@beijing-physicalsvr04 ~]# cat /data/script/kvm_snapshot.sh 
virsh snapshot-create-as QTCICD --name QTCICD_`date +%Y-%m-%d-%H-%M` --description "QTCICD snapshot"

9、yapi

备份

yapi备份 机器: 192.168.1.203 mongodb数据库备份创建文件

[root@beijing-physicalsvr04 mongodb]# pwd
/data/yapi_data/mongodb
[root@beijing-physicalsvr04 mongodb]# cat day.sh
datedir=`date '+%Y%m%d%H'`
mkdir -p /data/db/backup/day/${datedir} -p || true
mongodump -h 127.0.0.1 -u yapi -p yapi1819 --port 27017 --authenticationDatabase admin -d yapi -o /data/db/backup/day/${datedir}

备份策略: 每隔1天备份一次, 23:10开始备份 #yapi备份

10 23 * * * docker exec -i mongodb-yapi  sh /root/day.sh && sleep 20 && mv /data/yapi_data/mongodb/data/backup/day/*   /backup/devops_backup/yapi_backup/day/

数据库创建方式 目录: /data/yapi_data/mongodb

[root@beijing-physicalsvr04 mongodb]# cat start.sh 
#!/bin/bash
MONGODB_DIR=/data/yapi_data/mongodb
docker stop mongodb-yapi
docker rm mongodb-yapi
docker run -d \
--name mongodb-yapi \
--restart always \
--privileged \
-p 27717:27117 \
-v ${MONGODB_DIR}/data:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=aaaaaaaaaa \
192.168.1.203:51888/base/mongo:6.0.6 mongod --auth

恢复

10.1 容器恢复验证 镜像 192.168.1.203:18188/base/mongo:6.0.6 192.168.1.207:1818/base/mongo:6.0.6

创建方式-研发环境部署方式 将备份的数据放到对应的目录 服务器: 192.168.1.205:/backup/devops_backup/yapi_backup/day

6.1.1 创建文件夹 mkdir -p /data/yapi_data/mongodb

6.1.2 复制备份数据上传打到恢复的服务器,需要打包整个文件夹 #在以下服务器取数据

192.168.1.205:/backup/devops_backup/yapi_backup/day
tar zcvf 20230731.tar.gz ./20230732xx

#传到需要恢复的机器 scp 20230731.tar.gz root@xxxxxx:/tmp

##说明: 20230731.tar.gz 是举个例子 6.1.3 使用docker部署服务

[root@beijing-physicalsvr04 mongodb]# cat start.sh 
#!/bin/bash
MONGODB_DIR=/data/yapi_data/mongodb
docker stop mongodb-yapi
docker rm mongodb-yapi
docker run -d \
--name mongodb-yapi \
--restart always \
--privileged \
-p 27017:27017 \
-v ${MONGODB_DIR}/data:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=yapi1819 \
192.168.1.203:18188/base/mongo:6.0.6 mongod --auth

6.1.4 导入数据

cd  /tmp
tar xf 20230731.tar.gz
docker cp 20230731 mongodb-yapi:/root/
docker exec -it mongodb-yapi bash
mongorestore -u yapi -p yapi1819 --port 27017 --drop --authenticationDatabase admin -d yapi /root/20230731/yapi

相关操作

查看数据库 show collections

导出指定字段的数据 导出字段"excetion": "预警异常" 所有的数据

mongoexport  --host 127.0.0.1  --port 27017 --db sensorcmd --collection new_alarm --query '{"excetion": "预警异常"}' --out mongod-new-well-structured-data20231222.json  --type json

导入数据

mongoimport --host localhost --port 27017 --db demo --collection col --file mongod-new-well-structured-data20231222.json

查看集合中总的行数

use your_database_name
db.your_collection_name.count()

导出指定条件的数据 如果需要导出满足特定条件的数据,可以使用--query参数。以下示例将只导出年龄大于30的用户数据:

mongoexport --host localhost --port 27017 --db mydb --collection users --out users.json --jsonArray --query '{ age: { $gt: 30 } }'

mongo删除指定的列

db.your_collection.updateMany({}, { $unset: { "target_field": 1 } });

mongo删除多个列

db.your_collection.updateMany({}, { $unset: { "push_desc": 1, "push_person": 1, "push_phone": 1 , "push_time": 1, "record": 1 , "chuzhi_person": 1, "chuzhi_phone": 1, "chuzhi_ts": 1 , "deal_info": 1, "deal_desc": 1, "deal_person": 1, "deal_phone": 1} });