用到的命令
-
定时任务: 设置:crontab -e 查看 crontab -l 删除全部:crontab -r(警惕)
-
脚本检测 bash -n xxx.sh || sh -n xxx.sh
-
脚本跟踪调试 bash -vx xxx.sh || sh -vx xxx.sh
-
脚本执行 bash xxx.sh || sh xxx.sh
-
执行sql脚本
1、 进入命令行
mysql –u用户名 –p密码 –D数据库< sql脚本路径
示例:mysql –uroot –p123456 -Ddbname < /home/data/mysqldump.sql
注意:
如果在sql脚本文件中使用了use 数据库,则-D数据库选项可以忽略2、进入mysql的控制台后,使用source命令执行
mysql>source sql脚本路径 或 mysql>. sql脚本路径
示例:source /home/data/mysqldump.sql
配置scp无密码
1、A: ssh-keygen -t rsa 生成id_rsa 和 id_rsa.pub
2、cp复制:id_rsa.pub ==》id_rsa.pub.A
3、 B: ssh-keygen -t rsa 生成id_rsa 和 id_rsa.pub,再看是否有authorized_keys文件,若没有则新增
4、A: scp ./id_rsa.pub.A 用户名@B.ip:/root/.ssh(步骤3生成的地方 目录)
5、 追加id_rsa.pub.A至 authorized_keys 文件中:cat id_rsa.pub.A >> authorized_keys
–ignore-table=dbname.tablename : 备份时忽略某张表
-
例如:mysqldump --skip-opt -q -uroot -P3306 -p123456 --default-character-set=utf8mb4 库名 --ignore-table=库名.表名1 --ignore-table=库名.表名2 > /opt/community-platformdate -d now +%Y%m%d
.sql
正式环境脚本
#备份数据
#!/bin/bash
#mysql容器名称
MYSQL_CONTAINER="" #docker容器名称
backUpDir='/opt/' #保存路径
logpath='/home/date/log/' #日志备份路径
backtime=`date +%Y%m%d%H%M%S` #备份时间
#查看日志目录
if [ ! -d "$logpath" ]; then
mkdir -p "$logpath"
fi
#查看备份目录
if [ ! -d "$backUpDir" ]; then
mkdir -p "$backUpDir"
fi
#日志记录头部
echo ‘”备份时间为${backtime},备份数据库${dbname} 开始” >> ${logpath}/dump.log
#正式备份数据库
docker exec -i ${MYSQL_CONTAINER} bash<<'EOF'
PORT="3306" #端口
USERNAME="" #用户名
PASSWORD="" #密码
dbname="" #数据库名称
#备份数据库
mysqldump --skip-opt -q -u${USERNAME} -p${PASSWORD} --default-character-set=utf8mb4 community-platform > /opt/community-platform`date -d now +%Y%m%d`.sql
#docker删除备份文件
rm -rf /opt/community-platform`date -d -1day +%Y%m%d`.sql
exit
EOF
echo “数据库 ${dbname} 备份成功!!” >> ${logpath}/dump.log
docker cp ${MYSQL_CONTAINER}:/opt/community-platform`date -d now +%Y%m%d`.sql /home/data/
#复制数据(7天前)
scp -r /home/data/community-platform`date -d -7day +%Y%m%d`.sql root@接收服务器ip:/home/data
#当天的
#scp -r /home/data/community-platform`date -d now +%Y%m%d`.sql root@ip:/home/data
#删除7天前的数据 备份的sql
rm -f /home/data/community-platform`date -d -7day +%Y%m%d`.sql
预发布服务器脚本
#恢复数据
#!/bin/bash
MYSQL_CONTAINER="" #mysql容器
#DATE=`date -d -7day +%Y%m%d`
DATE=`date -d now +%Y%m%d`
#复制文件至docker容器里
docker cp /home/data/community-platform${DATE}.sql ${MYSQL_CONTAINER}:/opt/community-platform${DATE}.sql
#执行恢复命令
docker exec -i ${MYSQL_CONTAINER} bash<<'EOF'
PORT="3306" #端口
USERNAME="" #用户名
PASSWORD="" #密码
DBNAME="" #数据库名称
DATE2=`date -d -7day +%Y%m%d`
#DATE2=`date -d now +%Y%m%d`
#先删除前一天的数据库
#mysql -u${USERNAME} -p${PASSWORD} -e "drop database `community-platform-uat`;"(反引号引起的执行失败问题 暂未解决)
#在docker里面写sql,docker cp 复制到docker 直接调用 drop database ``;
mysql -u${USERNAME} -p${PASSWORD} < /opt/dropdatabase.sql
#创建新的数据库
#mysql -u${USERNAME} -p${PASSWORD} -e "create database `community-platform-uat` character set utf8mb4;"
#create database `` character set utf8mb4; 注意字符集 (中文乱码)
mysql -u${USERNAME} -p${PASSWORD} < /opt/createdatabase.sql
#mysql -u${USERNAME} -p${PASSWORD}
#drop database `community-platform-uat`;
#create database `community-platform-uat` character set utf8mb4;
#use community-platform-uat
#source /opt/community-platform${DATE2}.sql
#exit
(直接exit退出了。。。)
mysql -u${USERNAME} -p${PASSWORD} --default-character-set=utf8mb4 community-platform-uat < /opt/community-platform${DATE2}.sql
#docker删除备份文件
rm -rf /opt/community-platform`date -d -7day +%Y%m%d`.sql
exit
EOF
#删除sql脚本
rm -f /home/data/community-platform`date -d -8day +%Y%m%d`.sql
exit
mysql没在docker中版本
#恢复数据
#!/bin/bash
HOSTNAME="" #数据库信息
PORT=""
USERNAME=""
PASSWORD=""
DBNAME="" #数据库名称
#先删除前一天的数据库 ( 存在数据库名反引号问题)
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} -e "drop database $DBNAME;"
#创建新的数据库 (存在数据库名反引号问题)
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} -e "create database $DBNAME character set utf8mb4;"
#DATE=`date -d -6day +%Y%m%d`
DATE=`date -d now +%Y%m%d`
#执行恢复命令
mysql -u${USERNAME} -p${PASSWORD} community-platform <<EOF
source /home/backup/mysql/scp/community-platform${DATE}.sql;
EOF
#删除sql脚本
#rm -f /home/backup/mysql/scp/community${DATE}.sql
exit;