mysql备份与恢复

mysql备份与恢复

  • 逻辑备份:通过特定的工具从数据库中导出sql语句
  • 物理备份:直接将底层物理文件备份

一、逻辑备份

1、备份

mysqldump

常用备份选项:
-A	备份所有库
-B	备份多个数据库
-R            备份存储过程及函数
--triggers  备份触发器
-E             备份事件
--triggers: 这表示备份触发器

--master-data=1  备份文件中 change master语句是没有注释的,默认为1,用于已经制作好了主从,现在想扩展一个从库的时候使用
如此备份,扩展添加从库时导入备份文件后便不需要再加mater_pos了
	change matser to
	master_host='10.0.0.111'
	master_user='rep'
	master_password=123
	master_log_pos=120
	master_log_file='master-bin.000001'
而--master-data=2  备份文件中 change master语句是被注释的 

--single-transaction: 快照备份 (搭配--master-data可以做到热备)
保证各个表具有数据一致性快照。
指定 --single-transaction 参数,那么导出过程中只能保证每个表的数据一致性(利用多版本特性实现,目前只能针对InnoDB事务表)。
比如有一个大表,mysqldump对该表的导出需要1分钟,那么在这1分钟的过程中,该表时可以被正常访问的。
(正常访问包括增删改查,但是alter table等对表结构发生更改的语句要被挂起。)
mysqldump能够保证从开始对该表进行导出,一直到对该表的导出结束,该表的数据都是开始的一致性数据快照状态。
所以该参数明显不能保证各个表之间的数据一致性(特别是外键约束的父表和子表之间)。
但是该参数能够让数据库处于可使用(就是应用感觉数据库可用)状态,相当于联机备份,所以被经常使用。
该参数默认off

注意:默认会锁表

例子

mysqldump -uroot -p123 -A  -R  -E --triggers --single-transaction --master-data=2  | gzip > full_$(date +%F-%T).sql.gz

2、恢复

(1) mysql 命令导入

mysql -u用户名    -p密码    <  要导入的数据库数据

例子

# mysql -uroot -p123456 < runoob.sql

(2) source 命令导入

source 命令导入数据库需要先登录到数库终端:

mysql> create database abc;      # 创建数据库
mysql> use abc;                  # 使用已创建的数据库 
mysql> set names utf8;           # 设置编码
mysql> source /home/abc/abc.sql  # 导入备份数据库

二、物理备份(tar)

1、备份

(1)停止数据库

(2)tar备份数据

# tar -zcvf /backup/`date +%F`-mysql-all.tar ./*

2、恢复

(1)停止数据库

(2)清理环境 (谨慎操作)

# rm -rf /var/lib/mysql/* 

(3)导入备份数据

# tar -xvf /backup/2019-08-20-mysql-all.tar -C /var/lib/mysql

三、binlog日志备份

1、备份

(1)启动binlog日志

vim /etc/my.cnf
[mysqld]
log-bin=mylog
server-id=1 //做AB复制的时候使用

重启服务

2、恢复

(1)查看binlog日志

mysqlbinlog /var/lib/mysql/mylog.000001 -v --base64-output=decode-rows

时间点 : 141126 14:04:49
位置点 : at 106

刷新bin-log日志
mysqladmin flush-logs -u root -p''

(2)根据binlog恢复数据

​ a. 根据时间点恢复数据

mysqlbinlog --start-datetime='2019-07-30 15:45:39' --stop-datetime='2019-07-30 15:59:10' wing-bin.000001 | mysql -u root -p1

​ b. 根据位置点恢复数据

mysqlbinlog --start-position 106 --stop-position 527 wing-bin.000001 | mysql -u root -p1

刷新bin-log日志

mysqladmin flush-logs -u root -p

具体binlog备份恢复可以参考这两篇文章,写得很好
https://blog.csdn.net/CN_TangZheng/article/details/103884575
https://blog.csdn.net/kimowinter/article/details/108205838

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值