Mysql备份和还原
Mysql备份和还原
热备份:读写不受影响
温备份:仅可以执行读操作
冷备份:离线备份,读写操作均为终止
物理备份:复制数据文件
逻辑备份:将数据导出至文本文件中
完全备份:备份全部数据
增量备份:仅备份上次完全备份或增量备份以后变化的数据
差异备份:仅备份上次完全备份以后的变化数据 (是相对完全备份来备份的,容易还原,但是费空间)
Mysql备份工具:
mysqldump:逻辑备份工具
(1)--master-data={0|1|2}
0:不记录二进制日志文件及路径位置
1:以change master to的方式记录位置,可以用于恢复后直接启动从服务器
2:以change master to的方式记录位置,但默认为被注释
(2)--lock-all-tables:锁定所有表 ,如果指定库中的表的类型均为innodb 可以使用--single-transaction启动热备
(3)--flush-logs:执行日志flush
(4)--all-databases:备份所有库
(5)--databases DB_NAME,DB_NAME,...:备份指定库
(6)--single-transaction 启动一个大事务隔离级别为repatable-read,针对innodb做热备
实例备份策略:每周一完全备份+每日一增量备份
1.针对所有库完全备份
mysqldump -uroot -p --master-data=2 --flush-logs --all-databases --lock-all-tables > /root/alldatabases.sql
2.针对周一的增量做备份,也就是将二进制日志文件用mysqlbinlog的访问打开并重定向到指定的文件中
mysql> flush logs;
mysqlbinlog mysql-bin.000011 > /root/monday-increment.sql
3.还原完全备份
mysql> set sql_log_bin=0; 还原时不记录日志
mysql -uroot -p < alldatabases.sql; 或者,mysql> source /root/alldatabases.sql
4.还原增量备份
mysql -uroot -p < /root/monday-increment.sql;
以下是mysqldump不带参数的操作情况
1.flush表并锁定表为只读
mysql> flush tables with read lock;
mysql> flush logs; 滚动二进制日志
2.备份库或者单张表(还原的时候要手动创建库)
mysqldump -uroot -p jiaowu > /root/jiaowu.sql
3.解锁表
mysql> unlock tables;
4.备份二进制日志,从哪一起点才是备份
select into outfile:逻辑备份工具 通常用做单张表的备份
1.查看用select into outfile来备份存放的路径
show global variables like '%secure%';
| secure_file_priv | /var/lib/mysql-files/
2.备份语句,备份的是文本格式
select * into outfile '/var/lib/mysql-files/student.txt' from student;
3.还原语句
create table students like student; 事先要仿照原表来创建一张空表
load data infile '/var/lib/mysql-files/student.txt' into table students;
LVM的快照卷进行数据库备份
1.查看事务隔离级别默认情况要是为REPEATABLE-READ
show global variables like '%iso%';
| tx_isolation | REPEATABLE-READ |
2.开启事务
start transaction
3.flush表并锁定表为只读
mysql> flush tables with read lock;
mysql> flush logs; 滚动二进制日志
4.备份二进制文件的信息
mysql -e 'show master status\G' > /root/master-`date +%F`.info
5.创建lvm快照