线上环境服务器定时备份数据库

线上环境服务器定时备份数据库

这是我参与更文挑战的第10天,活动详情查看: 更文挑战

环境说明

数据库:mysql(mariaD)

系统:CentOs 7

解决方案一

备份所有数据库命令

不包括Database|information_schema|performance_schema|mysql|test这几个数据库

mysql -e "show databases;" -h127.0.0.1 -u(用户名) -p(密码) 
| grep -Ev "Database|information_schema|performance_schema|mysql|test" 
| xargs mysqldump -h127.0.0.1 -u(用户名) -p(密码) 
--skip-lock-tables --databases > db.sql
复制代码
报错:
mysqldump: Got error: 1044: Access denied for user '数据库'@'%' to database '数据库' when using LOCK TABLES
报错原因:
普通账号权限相关
解决方法:
添加--skip-lock-tables参数
复制代码

注释

-all-databases 全部数据库

-lock-tables=0 不锁表

date “+%Y-%m-%d-%H-%M-%S” 时间戳

注意

数据库密码带有!@,需要加单引号进行转义

解决方案二

备份指定数据库,执行以下命令

mysqldump -h127.0.0.1 --port=3306 -u (用户名)  -p (密码) 
--lock-tables=0  --skip-lock-tables --databases (数据库) > 
/data/databaseBackup/db.sql
复制代码
执行以上命令出现报错
mysqldump: Got error: 1044: "Access denied for user '数据库'@'%' to database '密码"
 when selecting the database
复制代码

原因:

-p与数据库密码之间不能存在空格

解决方法:

 mysqldump -h127.0.0.1 --port=3306 -u (用户名)  -p(数据库) 
--lock-tables=0  --skip-lock-tables --databases (数据库) > 
/data/databaseBackup/db.sql
复制代码

还原所有数据库

前提:test这个数据库要先创建,存在指定数据库,系统会自动其他数据库和导入数据 mysql -h127.0.0.1 -uroot -proot test < db-xx.sql

定时备份数据库shell脚本,在/data/databaseBackup目录下back-up-db.sh文件,脚本内容如下:

#!/bin/bash

bckupdir=/data/databaseBackup
DB_USER="用户名"
DB_PASS="密码"

#备份文件后缀时间
time=_`date +%Y_%m_%d_%H_%M_%S`


mysql -e "show databases;" -h127.0.0.1 -u(数据库) -p(密码) | grep -Ev "Database|information_schema|performance_schema|mysql|test" | xargs mysqldump -h127.0.0.1 -u(用户名) -p(密码) --skip-lock-tables --databases > /data/databaseBackup/db${time}.sql

#删除7天之前的备份文件
find $backupdir -name "db*.sql" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1

echo ${time}" ok"
复制代码

保存成功后设置shell脚本赋予可执行权限

chmod +x back-up-db.sh              
复制代码

linux服务器设置定时器

[root@mariadb databaseBackup]#crontab -e    
复制代码

进入定时器配置文件

#每天3点半执行该定时任务,将定时任务日志重定向
30 3 * * * /bin/bash -x /data/databaseBackup/back-up-db.sh >>/data/databaseBackup/backupLog.log 2>&1
复制代码

注释

-x:添加参数-x来获取更加详细执行过程
2>&1:表示将错误的日志(文件描述符为2)重定向到标准输出(文件描述符为1)中>>/data/databaseBackup/backupLog.log:表示将标准输出(文件描述符为1)的
日志重定向文件/data/databaseBackup/backupLog.log,相当于1>>/data/databaseBackup/backupLog.log

查看crontab定时任务日志

tail -f /var/log/cron              
复制代码

查看crontab执行日志记录

tail -f /var/spool/mail/root            
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享