mysql备份还原 脚本编写

为什么要进行数据备份?

原因:天灾人祸,误操作,安全机制

online versus offline backup

热备份:online -- mysql在运行情况下去备份

冷备:offline --mysql服务需要停止,然后去拷贝数据

备份的时间需要注意:一般选择在服务器不忙的时候

3点--》写脚本去备份

恢复:mysql

物理逻辑备份

物理: 备份数据库文件或者磁盘 文件系统上 物理备份比逻辑备份速度快

逻辑:备份数据库,需要进入数据库内部

 

数据库的迁移

同类数据库;mysql

不同类的数据库:mysql oracle 专门的工具,例如:navicat mysqlutility 工具集等

生产环境 :公司里对外使用的(营业)

 

mysql的数据目录在哪里?

mysql备份还原 脚本编写_第1张图片

/var/lib/mysql

/data/mysql

每个数据库对应一个目录

 

备份方法:

mysql备份还原 脚本编写_第2张图片

 注意:上图来自于网络,侵删

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库中去。

 

使用二进制日志还原:

查看二进制日志是否开启,这里显示的是没有被开启

mysql备份还原 脚本编写_第3张图片

cd /etc/my.cnf #进入mysql配置文件

mysql备份还原 脚本编写_第4张图片

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' 
# 使用新建授权的用户还原数据,时间是在二进制日志文件中找到的

脚本执行sql操作

  在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

你可能感兴趣的:(mysql备份还原 脚本编写)