一,逻辑备份
- 工具:mysqldump,mydumper,PHPMyAdmin
- Schema和数据存储在一起,巨大的sql语句,单个巨大的备份文件
(1).mysqldump
Schema和数据存储一起、巨大的SQL语句、单个巨大的备份文件
mysqldump: 客户端,通过mysql协议连接至mysqld;
-A, --all-databases
MyISAM, InnoDB: 温备
-x, --lock-all-tables:锁定所有库的所有表 备份全部时建议使用
-l, --lock-tables:锁定备份的表 部分备份时建议使用
InnoDB 热备:
--single-transaction:启动一个大的单一事务实现备份
-B, --databases db_name1 db_name2 ...:备份指定的数据库
-C, --compress:压缩传输;
命令的语法格式:
mysqldump [OPTIONS] database [tables]:备份单个库,或库指定的一个或多个表
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]:备份一个或多个库
mysqldump [OPTIONS] --all-databases [OPTIONS]:备份所有库
其它选项:
-E, --events:备份指定库的事件调度器;
-R, --routines:备份存储过程和存储函数;
--triggers:备份触发器
--master-data[=#]:
1:记录CHANGE MASTER TO语句;此语句未被注释;
2:记录为注释语句;
--flush-logs, -F:锁定表之后执行flush logs命令;从而做日志滚动
注意:二进制日志文件与数据文件不应该放置于同一磁盘;为什么? 应该用riad10
(2).实战
#mysqldump + 二进制日志
mysqldump -uroot -all-databases --lock-all-tables --master-data=2 > /root/all.sql
#less查看二进制文件的位置
mysqlbinlog --start-position=245 /var/lib/mysql/mysql-bin.000001 > instart.sql
导入all.sql后再导入instart.sql既可
还原操作,应该先关闭二进制日志,没有必要再写一次日志,临时关闭可以使shell环境变量
二,基于lvm2的备份
- 请求锁定所有表 flush tables with read lock;
- 记录二进制日志文件及事件位置 flush logs;mysql -e 'show master status' > /root/pos.
date +%F
- 为逻辑卷创建快照, lvcreate -L 500 -n mydata-snap -p r -s /dev/myvg/mydata
- 释放锁,unlock tables;
- 挂载快照卷
- 备份数据文件从快照卷
- 备份二进制文件,先滚动一下,在原卷备份 cp时使用-a 选项
网友评论