MySQL备份恢复
MySQL备份方式简单概述
首先强调一下MySQL备份方式分为物理备份和逻辑备份
物理备份:
物理备份是对整个数据库进行压缩打包的暴力压缩办法,大致方式如下:
#备份
server1 ~]# systemctl stop mysqld
server1 ~]# cp -r /var/lib/mysql /tmp/mysql
server1 ~]# tar -zxvf /root/mysql.tar.gz /var/lib/mysql
#恢复
server2 ~]# systemctl stop mysqld
server2 ~]# rm -rf /var/lib/mysql
server2 ~]# tar -xvf /root/mysql.tar.gz -c /
方式过于暴力,不推荐,但也确实是一个备份恢复的办法
逻辑备份
逻辑备份分为完全备份,增量备份,差异备份,分别对以下操作逐一解释
一、完全备份
完全备份是针对单个库,单个表,或者所有库,做全部的备份,和物理备份不同,物理备份是针对所有的文件,包括配置文件压缩备份,而逻辑备份是针对的库或表做备份,说回完全备份,完全备份是备份标志是有.sql文件的,实际备份恢复操作如下
#备份 mysqldump -uroot -p密码 库名 > 存放目录
server1 ~]# mysqldum -uroot -pbanqiao -A > /root_demo1.sql #对server1中的所有(-A)数据库做完全备份
server1 ~]# mysqldum -uroot -pbanqiao database1 > /root_demo2.sql #对server1中database1中的数据做完全备份
server1 ~]# mysqldum -uroot -pbanqiao database1.user > /root_demo3.sql #对server1中的database库下的user表做完全备份
server1 ~]# mysqldum -uroot -pbanqiao -B database2 database3 > /root_demo4.sql #对server1这种的database2和database3做完全备份
#恢复 mysql -uroot -p密码 库名 < 存放目录
库名用法如上,如果是对某个库重命名,就备份原先的库,然后在恢复操作时,库名写新的名称即可
二、增量备份
增量备份是借助上一个备份的偏移量继续做备份,那么什么事偏移量呢,偏移量是日志文件记录每一个对数据库操作的标记,比如你做了插入数据的操作,那么日志文件就是记录你的这一步操作。偏移量对差异恢复非常关键。
在做增量备份的时候我们先要对配置文件做一个调整
#备份
server1 ~]# mysqldump -uroot -pbanqiao database1 > /root_demo4.sql
]# vim /etc/my.cnf
[mysqld]
``` #此为省略
log_bin #打开日志文件可以重命名,修改日志位置 /存储路径/文件名
server_id =1
binlog_format="mixed" #有3种模式 ROW行模式//statement报表模式//mixed混合模式
max_bin_log_size=1024m #当日志文件有1G大小时就生成新的日志文件
```
]# systemctl restart mysqld
]# ls /var/lib/mysql #查看是否生成以 主机名_bin.index的日志索引文件
]# mysql -uroot -pbanqiao -e 'insert into database1.user(name,age) values ("yasuo","8")' #插入一条数据
]# mysql -uroot -pbanqiao -e 'flush logs' #刷行日志
#恢复
server2 ~]# mysql -uroot -pbanqiao testdb1 < root_demo4.sql
]# mysqlbinlog /root/server1_log.000001 | mysql -uroot -pbanqiao
这句话的意思是吧日志中执行过的命令都全部执行一遍
三、差异备份
差异备份就是在日志的基础上找到对应的偏移量进行回复,一般用于误操作上
先完全回复之前备份好的版本
Mysql> show binlog events in "server1_log.000001"
找到误操作之前的偏移量
]# mysqlbinlog --stop-position=650 server1_bin.000001
日常生产环境遵循每日一增备,每周一完备