原因:天灾人祸,误操作,安全机制
online versus offline backup
热备份:online -- mysql在运行情况下去备份
冷备:offline --mysql服务需要停止,然后去拷贝数据
备份的时间需要注意:一般选择在服务器不忙的时候
3点--》写脚本去备份
恢复:mysql
物理: 备份数据库文件或者磁盘 文件系统上 物理备份比逻辑备份速度快
逻辑:备份数据库,需要进入数据库内部
同类数据库;mysql
不同类的数据库:mysql oracle 专门的工具,例如:navicat mysqlutility 工具集等
生产环境 :公司里对外使用的(营业)
mysql的数据目录在哪里?
/var/lib/mysql
/data/mysql
每个数据库对应一个目录
备份方法:
注意:上图来自于网络,侵删
1.完全备份full back:将所有东西全部备份
优点:恢复时间快
缺点:备份消耗空间大时间长
2.增量备份:
上一次备份后新产生的数据
3.差异备份:
每周一次全备份,本周其余每天备份与全备份的差异部分
备份方案:
1.每天全备 --最省事
2.全备+增量 --最节约存储空间的
3. 全备+差异
考虑:数据量不大,建议每天全备
4. 本地备份
5.异地备份
需要网络良好
10G 数据-->另一台机器 需要多长时间?
带宽10M -->1000s
使用第三方工具实现备份还原
mysql> grant all on *.* to 'yang'@'%' identified by 'yang123';
#新建一个用户并授权所有
进入Sanchuang123库中有student表
表中插入数据
[root@localhost ~]# mysqldump -h127.0.0.1 -uyang -P3306 -p'yang123' Sanchuang123 > /opt/Sanchuang123.sql
#备份Sanchuang123库中所有数据到 /opt/Sanchuang123.sql
mysql> drop database Sanchuang123; # 删除这个库,此时发现所有库中已经没有Sanchuang123了
# 这时候需要新建一个同名库才能将备份数据还原 mysql>create database Sanchuang123
还原数据
[root@localhost ~]# mysql -uyang -p"yang123" Sanchuang123 < /opt/Sanchuang123.sql mysql: [Warning] Using a password on the command line interface can be insecure. #将之前备份数据所在的目录还原到Sanchung123库中去。
查看二进制日志是否开启,这里显示的是没有被开启
cd /etc/my.cnf #进入mysql配置文件
mysql>flush logs;
#刷新二进制日志文件,会产生新的文件在 /data/mysql下
[root@localhost mysql]# mysqlbinlog -vv localhost-bin.000003 #查看日志文件内容,找到文件数据删除前后时间
[root@localhost mysql]# mysqlbinlog --start-datetime="2020-08-13 15:22:24" --stop-datetime="2020-08-13 15:47:23" localhost-bin.000001|mysql -uyang -p'yang123'
# 使用新建授权的用户还原数据,时间是在二进制日志文件中找到的
在linux下进行sql操作
-e 显示数据
[root@localhost mysql]# mysql -uyang -p'yang123' -e 'show databases'
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| Sc123 |
| hwww |
| mysql |
| performance_schema |
| sys |
| tennis |
+--------------------+
插入数据
[root@localhost mysql]# mysql -uyang -p'yang123' < insert into Sc123.student(id,name) values(9,'cail')
> EOF
编写脚本:
1.每天晚上3:30开始备份sc123这个库
2.备份文件存放到/backup目录下,要求备份的文件名里包含当天的日期(精确到天)
3.保留最近15天的备份文件
4.本地备份完成后,将备份文件上传到另外一台linux服务器的/backup_mysql目录下
首先需要先建立 scp+免密通道
[root@localhost lianxi]# cat backup.sh
#!/bin/bash
ctime =$(date +%Y%m%d)
mkdir -p /backup
# 备份文件到/backup下 首先需要建立/backup这个文件夹
mysqldump -uyang -p'yang123' Sc123>/backup/Sc123_${ctime}.sql
# 上传备份文件到远程服务器 首先需要建立/backup这个文件夹
scp /backup sanchuang123_${ctime}.sql [email protected]:/backup
# 保留最近15天数据,本机上保留到最近15天
find /backup -mtime +15 -type f -name "Sc123.sql" -exec rm -rf {} \;
# 日志功能
now_time = $(date +%Y%m%d%H%M%S)
echo "${now_time} Sc23${ctime}.sql cuccess" >>/var/log/backup_db.log
# 编写计划任务
[root@localhost backup]# crontab -e
30 3 * * * bash /lianxi/backup.sh
# 查看任务日志 每天晚上3:30开始执行这个脚本
# 查看所有计划任务
[root@localhost backup]# crontab -l
30 3 * * * bash /lianxi/backup.sh