mysql数据备份

直接拷贝文件

myisam存储引擎

只要对应表的后缀为.frm .MYD .MYI,三个文件拷贝到对应的数据库文件夹就行

innodb存储引擎
  • 先通过SHOW CREATE TABLE table命令,查询出表的创建语句,然后在备份库中执行
  • 执行ALTER TABLE table DISCARD TABLESPACE,丢弃的表空间
  • 拷贝表的后缀为.ibd文件到对应的数据库文件夹,然后授权chown mysql:mysql table.ibd
  • 执行ALTER TABLE table IMPORT TABLESPACE,导入新的表空间

mysqldump + binlog

备份的策略:

完全备份+增量备份+二进制日志

备份前数据库加锁
mysql> flush tables with read lock; 施加锁,表示把位于内存上的表统统都同步到磁盘上去,然后施加读锁
mysql> unlock tables;释放读锁

但对于InnoDB存储引擎来讲,虽然你也能够请求道读锁,但是不代表它的所有数据都已经同步到磁盘上
因此当面对InnoDB的时候,我们要使用
mysql> show engine innodb status;
数据库做完全备份
mysqldump -uroot -p --single-transaction --master-data=2 --databases testdb > /opt/testdb_`date +%F`.sql

--single-transaction: 基于此选项能实现热备InnoDB表;因此,不需要同时使用--lock-all-tables;
--master-data=2  记录备份那一时刻的二进制日志的位置,并且注释掉,1是不注释的
--databases hellodb 指定备份的数据库然后回到mysql服务器端
--lock-all-tables 是对要备份的数据库的所有表施加读锁
--lock-table 仅对单张表施加读锁,即使是备份整个数据库
查看完全备份文件里边记录的位置
cat hellodb_2013-09-08.sql | less

-- CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000027', MASTER_LOG_POS=6032;

在这里插入图片描述

修改数据数据,进行增量备份

在这里插入图片描述

修改数据后,显示此时的二进制日志的位置,从备份文件里边记录的位置6032到我们此时的位置,即为增量的部分

 mysqlbinlog --start-position=6032 --stop-position=7071 /var/lib/mysql/master-bin.000027 > /opt/testdb_`date +%F_%H`.sql
删表,还原数据
mysql> set sql_log_bin=0;  关闭二进制日志
mysql> flush logs; 滚动下日志

删除数据,后还原

 mysql -uroot -p< /opt/testdb_2019-11-14.sql     //导入完全备份文件
 mysql -uroot -p< /opt/testdb_2019-11-14_19.sql   //导入增量备份文件

https://www.cnblogs.com/fengzhongzhuzu/p/9101782.html 其它方法参考

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值