1.1 mysql备份脚本

#!/bin/bash
CONNECT="-udba -pxxx -h127.0.0.1 -P3306"
BACKUPDIR='/data/mysqlback'
BACKUPDATE=$(date +%Y%m%d_%H%M)
DATABASE=数据库名称

/opt/mysql_3316/bin/mysqldump $CONNECT --single-transaction --opt --master-data=2 --hex-blob --triggers --routines --events --single-transaction --force $DATABASE | gzip > ${BACKUPDIR}/stock_${BACKUPDATE}.sql.gz
```

| 参数名称  |参数详解   |
| ------------ | ------------ |
| --single-transaction  | 该参数通过在一个事务中导出所有表从而创建一个一致性的快照,当前版本的MySQL只可以对innodb 引擎保证一致性,导出过程中不会锁表其他引擎  |
| --opt   | INSERT 内容(1,2,3)跟--skip-opt INSERT 内容(1)/INSERT内容(2)相反  |
| --master-data=2  |参数在建立slave数据库的时候会经常用到,因为这是一个比较好用的参数,默认值为1,默认情况下,会包含change master to,这个语句包含file和position的记录始位置   |
| --hex-blob  | 即以16进制导出blob字段数据,同版本下不加此参数一般不会有什么问题,但在不同MySQL版本间最好加此参数。可能会到导致特殊字符乱码  |
| --skip-triggers  | 使用了触发器,但又要只导出数据  |
| --routines  | 导出存储过程和自定义函数  |
| --events  | 导出事件  |
| --single-transaction  |  会加上事务,不会锁表 |
| --force  | 即使我们在一个表导出期间得到一个SQL错误,继续  |


### 2添加执行权限
```yaml
chmod +x /root/script/mysqlback.sh
```

- 详解:
- 数据库名称 test
- 备份所有数据库  --all-databases

### 3查看crond服务是否运行:
```yaml
pgrep crond
```
如没有则安装
```yaml
yum install vixie-cron
yum install crontabs
```

### 4 编辑定时任务每天凌晨1点执行
```yaml
crontab -e
0 1 * * * /root/script/mysqlback.sh

1.2 docker-mysql备份

mkdir /root/script/
mkdir /data/mysql/dump
cat << EOF > /root/script/mysqlbackup.sh
#!/bin/bash 
BACKUPDIR='/data/mysql/dump'
BACKUPDATE=$(date +%Y%m%d_%H%M)

/usr/bin/docker   exec -it mysql5 mysqldump  -uroot -p密码  -P3306--opt --master-data=2 --hex-blob --triggers --routines --events --single-transaction --force 数据库名| gzip > ${BACKUPDIR}/数据库名_${BACKUPDATE}.sql.gz

cd /data/mysql/dump
find ./ -ctime +30 -name "*.gz" |xargs rm -rf
EOF
chmod +x /root/script/mysqlbackup.sh

1.3 redis备份币种

#!/bin/bash

# 2019-09-03
# 从redis里导出各个币种

# echo "GET BTC_USDT:klinedata:TransactionOrder_BTC_USDT_10080" | /data/deploy/redis/bin/redis-cli -h 172.31.27.135 -a Credit2016Admin -p 6379 -n 0 > msg.json
# shell命令作用及各部分的含义:
# 1.作用:将redis第三个数据库中键名为BTC_USDT:klinedata:TransactionOrder_BTC_USDT_10080的值导出到msg.json文件中
# 2.参数含义:
# echo:表示输出
# get BTC_USDT:klinedata:TransactionOrder_BTC_USDT_10080:获取redis数据库中键名称为BTC_USDT:klinedata:TransactionOrder_BTC_USDT_10080对应的值
# /data/deploy/redis/bin/redis-cli -h 172.31.27.135 -a Credit2016Admin -p 6379 -n 0: 
# -h 主机IP;-p 端口;-a 指定redis数据库的连接密码;-n:指定使用的数据库,这里为第3个数据库
# msg.json:将获取的数据内容写入文件msg.json

KEY_ARRAY=(BTC_USDT CR_USDT ELF_USDT ETH_USDT LINK_USDT LTC_USDT MANA_USDT OMG_USDT SNT_USDT STORJ_USDT)
TIME_ARRAY=(15 30 60 1440 10080)
COMMAND="/data/deploy/redis/bin/redis-cli"
HOST="172.31.27.135"
PASSROWD="Credit2016Admin"
PORT="6379"
DATABASE="0"


# 备份币环币种
function backup_coinring_currency(){
	# 循环输出文件
	for i in ${KEY_ARRAY[@]}; do
		for j in ${TIME_ARRAY[@]}; do
			# 建立每个币种的目录
			[ ! -d /tmp/currency/${i} ] && mkdir -p /tmp/currency/${i}
			# 输出币种文件
			echo "GET ${i}:klinedata:TransactionOrder_${i}_${j}" | ${COMMAND} -h ${HOST} -p ${PORT} -a ${PASSROWD} -n ${DATABASE} > /tmp/currency/${i}/${i}_${j}.json
		done
	done

	# 压缩
	if [[ $(type zip 2 > /dev/null) ]]; then
		zip -r /tmp/currency_$(date +%F) /tmp/currency/*
	else
		yum isntall -y zip
		zip -r /tmp/currency_$(date +%F) /tmp/currency/*
	fi
}

backup_coinring_currency

1.4 gitlab按照备份脚本

#!/bin/bash

# 2019-09-27
# Gitlab安装备份恢复
# 参考:https://packages.gitlab.com/gitlab/gitlab-ce
# https://www.cnblogs.com/kevingrace/p/7821529.html

# 安装
function gitlab_install(){
	# 下载包
#	wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/6/gitlab-ce-9.3.6-ce.0.el6.x86_64.rpm/download.rpm
    wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-12.9.2-ce.0.el7.x86_64.rpm
	# 安装
	sudo yum install -y gitlab-ce-12.9.2-ce.0.el7.x86_64.rpm
	# 启动
	gitlab-ctl reconfigure
	gitlab-ctl start
	gitlab-ctl status
	# 配置文件
	# /etc/gitlab/gitlab.rb
	# 修改访问链接
	# external_url 'http://izwz9cpabak89hfiysawv3z'
	# gitlab_rails['manage_backup_path'] = true
	# gitlab备份目录
	# gitlab_rails['backup_path'] = "/data/gitlab/backups"
	# 生成的备份文件权限
	# gitlab_rails['backup_archive_permissions'] = 0644
	# 备份保留天数为3个月
	# gitlab_rails['backup_keep_time'] = 7776000

	# 修改完配置文件,需要重载gitlab配置文件
	# gitlab-ctl reconfigure
}

# 备份
function gitlab_backups(){
	# 手动备份命令
	gitlab-rake gitlab:backup:create
	# 备份文件的目录
	# /var/opt/gitlab/backups
cat > /root/script/gitlab_backups.sh << EOF
#!/bin/bash
/usr/bin/gitlab-rake gitlab:backup:create  CRON=1
# 环境变量CRON=1的作用是如果没有任何错误发生时,抑制备份脚本的所有进度输出
EOF

# crontab -l
# 每天每隔6小时备份一次gitlab
# 0 0,6,12,18 * * * /bin/bash -x /data/gitlab/backups/gitlab_backup.sh > /dev/null 2>&1
}

# 恢复
function gitlab_restore(){
	# Gitlab只能还原到与备份文件相同的gitlab版本。
	# 将备份文件拷贝到/var/opt/gitlab/backups
	# 停止相关数据连接服务
	gitlab-ctl status
	gitlab-ctl stop unicorn
	gitlab-ctl stop sidekiq
	gitlab-ctl status
	# 现在通过之前的备份文件进行恢复(必须要备份文件放到备份路径下,默认的是/var/opt/gitlab/backups)
	# 1566921708_2019_08_28_9.3.6_gitlab_backup.tar
	# BACKUP=1566921708_2019_08_28_9.3.6备份出来的包,后面的_gitlab_backup.tar不要
	gitlab-rake gitlab:backup:restore BACKUP=1566921708_2019_08_28_9.3.6
	# 期间会要求输入两次yes
	# 再次启动gitlab
	gitlab-ctl start
	gitlab-ctl status
	# 恢复命令完成后,可以check检查一下恢复情况
	gitlab-rake gitlab:check SANITIZE=true
}

function main(){
	gitlab_install
	gitlab_backups
	gitlab_restore
}

main