首先我的mysql数据库是使用docker容器运行的,为了防止误操作或者容器挂掉导致的数据丢失,所以需要定时对mysql进行备份。
备份的一些基础知识:
冷备:就是停用mysql服务来备份,备份的同时不支持读写
热备:不需要停用服务,支持读写操作
温备:不停用服务,只支持读库
全量备份:相当于打一个镜像
增量备份:只针对时间段的数据进行备份
数据库的备份方式
- 通过mysqldump 命令
- 使用binlog
一:使用mysqldump备份
- 这里我们备份mall库
mall中一共有76张表
- 创建backup目录用于存放备份文件
- 备份命令
- mysqldump -uroot -p --databases mall > /backup/mall.sql
4.这里我们删除所有表,然后再尝试恢复
这里mall中表已经完全删除了
5.切换到需要导入的库中
- 恢复命令 source /backup/mall.sql
- 恢复成功
二:使用binlog的方式恢复【要恢复内容需要被binlog记录】
注:从mysql8开始默认会开启binlog,之前的版本需要手动开启
- 查看是否开启binlog
- 设置binlog的生成位置
- vim etc/mysql/my.cnf
- show variables like ‘log_bin’;
- 做一些正常操作,创建库test01,创建表 table01
- 现在做一次误操作删库
4.查看binlog日志
- show binary logs;
- 通常最近的操作会在最后一个日志,进入binlog目录,将binlog提取为 .sql文件
- 提取binlog命令 mysqlbinlog mysql-bin.000004 > /backup/reconver.sql
- 查看sql,找到创建库和误操作记录
- 根据两个操作编号恢复
- mysqlbinlog --start-position=232 --stop-position=1054 /var/lib/mysql/mysql-bin.000004 | mysql -u root -p
- 查看数据库,被删除的库恢复成功
3. 根据脚本定时备份
- 脚本如下
# mysql 为安装mysql的docker
#!/bin/bash
docker_name=mysql
data_dir="/backup/mysql/" #宿主机中备份的位置
docker exec $docker_name mysqldump -uroot -p123456 mall > "$data_dir/solo_`date +%Y%m%d%H%M%S`.sql"
# 删除7天以前的备份
find $data_dir -mtime +7 -name 'solo_*.sql' -exec rm -rf {} \;
使用linux自带的定时调度
- crontab -e
#每分钟一次
*/1 * * * * /bin/sh /mysqlBackup.sh
- 添加执行权限 chmod +x mysqlBackup.sh
- 查看备份文件