数据库的备份和恢复

备份

逻辑备份

主要是保留数据库中存储的逻辑结构与数据之间的关系

物理备份

备份有全备:全部备份

增量备份 :备份上一次备份到现在产生的新数据

差异备份:只备份跟完整备份不一样的,会在完整备份的基础上备份所有数据

直接自己复制或者tar 压缩保存到另一个服务器 

恢复的时候从保存的目录恢复数据

注意的是,在tar时得关闭数据库服务

如何获得一个崭新的数据库

rm -rf  /var/lib/mysql/*  删除数据库的数据

rm -rf /var/log/mysql.log  删除数据库的日志文件

然后在重新启动数据库,就可以得到一个全新的数据库

获取数据库的初始密码 cat /var/log/mysql.log | grep password

修改密码 mysql  -u root -p'密码' password '新密码'

-使用软件xtrabackup备份

是免费的开源的,支持数据的热备份

得安装软件 

在进行完整备份的时候得创建完备目录 

使用命令 innobackupex --user=root --password='密码' 完备目录

在恢复前得先验证一下innobackupex  --apply-log  完备目录下的全备份文件

恢复数据 innobackupex --copy-back 完备目录下的全备份文件

注意,在全备过来的文件的所属组和所有者都是root ,得修改成mysql 

chown  mysql.mysql /var/lib/mysql -R

重启数据库服务就好

增量备份

在完整备份的基础上 ,创建增量备份的目录 

进行增量备份 innobackupex --user=root --password='密码' --incremental 

增量备份目录  --incremental -basedir=全备文件的位置(第二次的时候是上一次增量备份的文件的)

先停止数据库 在依次回滚,就是先全备,在第一次增量备份,在第二次增量备份....想恢复到那个时间点,就回滚到哪里,会将或回滚都给全备

innobackupex --apply-log --redo-only 全备目录

innobackupex --apply -log --redo -only 全备目录 --incremental-dir=增量备份的文件

恢复数据

innobackupex --copy-back 全备目录文件

修改权限 重启数据库

差异备份 

创建差异备份目录

先全备在进行差异备份 

innobackupex --user=root --password='密码' --incremental 差异备份目录  --incremental-basedir=全备目录文件

数据回滚

innobackupex --apply-log --redo-only  全备目录文件

innobackupex --apply-log --redo-only 全备文件 --incremental -dir=差异备份文件

恢复数据

innobackupex --copy-back 全备目录文件

修改数据,重启数据库服务

使用mysqldump备份

备份表的话,前提是有库有表

备份表的话就是 mysqldump -u 用户名  -p 密码  库名 表名  > 保存的路径注意保存的文件是.sql

恢复表的话就是 mysql -u 用户名 -p 密码 表名  < 保存的文件.sql

注意要是想恢复的话就得将删除库新建回来,因为删除的话会将库和表一起删除,恢复只是里面的数据

备份库的话就是 mysqldump -u 用户名 -p密码 库名 > 保存的路径.sql 

备份多个库的话就是加参数 -B    备份所有表的话就是加参数-A 

为了保证数据的一致性,应该在和恢复数据前停止数据库对外的服务,停止binlog服务,因为使用binlog日志恢复数据也会产生binlog日志

恢复库的话就是 mysql -u 用户名 -p 密码 -D 库名 < 保存的路径.sql

使用binlog 日志恢复

原理就是用日志备份的方式去恢复数据

日志的默认存储位置是  /var/lib/mysql 

编译安装目录下的var下

编译安装

永久安装

在 vim  /etc/my.cnf

添加 log-bin=log 

server-id=1    这个id是唯一的,不能重复

进入数据库输入show binlog event ;

用时间和长度恢复

最好不使用时间去恢复,因为时间不方便

最好使用长度去恢复数据

在使用binlog恢复数据的时候最好是先暂停这个binlog 在恢复数据 ,就不会因为恢复数据的语句二影响后面的结果

mysql>  show binlog events;
+--------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name     | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
+--------------+-----+----------------+-----------+-------------+---------------------------------------+
| mylog.000001 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.39-log, Binlog ver: 4 |
| mylog.000001 | 123 | Previous_gtids |         1 |         154 |                                       |
| mylog.000001 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mylog.000001 | 219 | Query          |         1 |         307 | create database t1                    |
| mylog.000001 | 307 | Anonymous_Gtid |         1 |         372 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mylog.000001 | 372 | Query          |         1 |         453 | drop database t1                      |
| mylog.000001 | 453 | Anonymous_Gtid |         1 |         518 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mylog.000001 | 518 | Query          |         1 |         606 | create database t1                    |
| mylog.000001 | 606 | Anonymous_Gtid |         1 |         671 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mylog.000001 | 671 | Query          |         1 |         752 | drop database t1                      |
+--------------+-----+----------------+-----------+-------------+---------------------------------------+
[root@xingdian ~]# mysqlbinlog --start-position 219 --stop-position 307 /var/lib/mysql/mylog.000001 | mysql -u root -pQianFeng@123
 

[root@xingdian ~]# mysqlbinlog --start-position 219 --stop-position 307 /var/lib/mysql/mylog.000001 | mysql -u root -pQianFeng@123
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值