线上环境服务器定时备份数据库
这是我参与更文挑战的第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