数据库MySQL(三) 备份数据库,保留7天
使用场景:Linux下实现MySQL数据库定时备份,仅保留7天的数据
操作系统:CentOS 7
数据库:Mysql 5.7
工具:crontab (CentOS 7 系统自带)
1、创建备份目录
# 本文这里放在目录local下
cd /usr/local/mysql
# 创建备份目录
mkdir backupdata
2、修改MySQL配置文件my.cnf
# 编辑 /etc/my.cnf 文件地址可能与本文不同,自行切换即可
vim /etc/my.cnf
#添加 mysqldump 配置
[mysqldump]
user = root # mysql用户名
password = xxxx # mysql密码
# 开启 binlog
[mysqld]
server_id = 18 # ip最后两位
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 30
3、重启MySQL数据库
# 重启数据库
systemctl restart mysql.service
# 查看数据库状态
systemctl status mysql.service
# 查看 binlog 日志是否正常开启
show variables like 'log_%'
4、新建 shell 脚本
# 在 mysql目录下创建备份脚本
vim DBbackup.sh
#脚本内容如下
#!/bin/bash
/usr/local/mysql/bin/mysqldump Database_name | gzip > /usr/local/mysql/backupdata/Database_name_$(date +%Y%m%d).sql.gz
# 删除7天前的备份数据
find /usr/local/mysql/backupdata -name "Database_name_*.sql.gz" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1
5、DBbackup.sh 添加可执行权限
# 修改文件权限
chmod u+x DBbackup.sh
# 执行脚本看是否有错
./DBbackup.sh
6、使用crontab添加定时计划任务
# 首先检查是否安装了crontab
rpm -qa | grep crontab
# 安装 crontab
yum install crontab
# 已安装,则执行下方命令,类似vi/vim命令
crontab -e
# 输入定时语句内容并保存,每天23:59备份数据
# crontab格式: 分 时 日 月 星期 要执行的文件路径
59 23 * * * /usr/local/mysql/DBbackup.sh
# 查看当前定时任务
crontab -l
7、数据恢复 (恢复定时备份的数据)
# 解压 gz 文件
gzip -d database_name_20230111.sql.gz
# 导入数据库
mysql -uroot -p database_name < database_name_20230111.sql
# 然后输入数据库的密码即可
# 此时已经恢复定时备份的数据,再打开binlog日志。恢复定时备份期间至数据丢失的数据即可
8、打开binlog日志,恢复定时备份期间数据丢失时的数据
# 登录MySQL
mysql -uroot -p
# 查看binlog
show master logs;
# 根据相应的log文件,以及需要恢复的行号执行即可
# 查看二进制日志内容
mysqlbinlog /filename.number
# 使用二进制日志还原数据库
mysqlbinlog mysql-bin.00001 | mysql -uroot -p
9、使用mysqlbinlog命令可能遇到的问题
# 使用mysqlbinlog命令时,可能会报错 -bash: mysqlbinlog: command not found
# 原因:由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,就会找不到这个命令爆出提示
# 要想解决此问题,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件,类似给mysqlbinlog添加一个环境变量一样
# 首先我们可以用which命令查看是不是这个原因(which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置)
which mysqlbinlog
# 搜索到命令所在路径之后,进入到需要映射该命令的路径下,这里进入
cd /usr/local/bin
# 接着,把mysqlbinlog安装目录/usr/local/mysql/bin/mysqlbinlog 映射到/usr/local/bin目录下,/usr/local/mysql/bin/mysqlbinlog 这个路径一定要是你自己的mysqlbinlog安装路径哦,不要直接复制