直接拷贝文件
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 其它方法参考