MySQL(05)
备份策略: 完全+差异+binlog(时间点还原) 完全+增量+binlog 备份,多久一次? 数据变化量; 可用的备份存储空间; mysqldump: 逻辑备份、完全备份、部分备份; 二次封装工具: mydumper phpMyAdmin Usage: mysqldump [OPTIONS] database [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS] MyISAM存储引擎:支持温备,备份时要锁定表; -x, --lock-all-tables:锁定所有库的所有表,读锁; -l, --lock-tables:锁定指定库所有表; InnoDB存储引擎:支持温备和热备; --single-transaction:创建一个事务,基于此快照执行备份; 其它选项: -R, --routines:存储过程和存储函数; --triggers -E, --events --master-data[=#] 1:记录为CHANGE MASTER TO语句,此语句不被注释; 2:记录为CHANGE MASTER TO语句,此语句被注释; --flush-logs:锁定表完成后,即进行日志刷新操作; 作业:备份脚本
mysqldump备份恢复示例
从lftp上mget一个数据库脚本hellodb.sql,导入到数据库中,删除导入数据库的脚本,如何自己备份。
目前没有create databases语句,因为我们备份时直接指明了hellodb,这表式的意思是备份hellodb的所有表,而不是备份hellodb数据库的。
如果要备份数据库,要使用下面这条语句
less hellodb.sql.2 查看一下
这里就有create databases语句,说明整个数据库被备份下来了 –databses可以备份多个库,这里只指明了hellodb一个库
如果想备份所有库,则使用下面这条语句
注意:数据太大的不适用mysqldump来备份 如果我们只备份一个库,这个库里面的所有表都是InnoDB存储引擎的话,可以使用热备,–single-transaction。MyISAM存储引擎的话,只能支持温备了。
备份时,备份策略:完全+增量+binlog,假如现在做一次完全备份,下次还没增量数据库就挂了,所有只能用完全+binlog来恢复,完全备份那一个,数据恢复回来了,binlog从哪一刻开始放,binlog是各种写语句,应该从备份那一刻之后的内容,把备份开始之后所发生的所有修改语句从放一遍。 如何知道什么时候开始备份:自动备份那一刻必须要记录下来,binlog正在处在哪个文件哪个privi,
例如
这时候会报错,因为服务器上没启用bin-log,这时需要修改my.cnf配置文件,启动二进制方式
这时候就能成功备份了。
注意:将来备份不要去覆盖上一次备份,备份文件例如helldb。sql-20140101
这时候备份文件就多了一条语句
意思是二进制文件处在master-log.0000001,位置是245,所以下次重放时就基于这个位置进行重放。
如何记录备份那一刻,二进制文件记录位置
备份文件要异地另存,可以写脚本进行自动化进行。备份文件要保留时间戳。
先连入mysql服务器,做一些修改操作
这种修改结果通过刚才的备份恢复不行,假如数据库删除,通过备份恢复不过来。这时候需要借助二进制文件进行。
现在恢复
第一准备好备份,第二准备好二进制日志。
二进制文件都在/var/log/mysql下
这里上次备份就只有一个二进制文件,从第一个位置开始的
使用mysqlbinlog命令
这里会有一个问题,最后一个drop database hellodb,刚放上来,又删除掉了,不要读这个语句。
从这里开始定义
这时,drop database hellodb这台语句就不会出现了。
把截取后的二进制文件内容保存在一个脚本中
[root@ zhoushuang2 ~]# mysqlbinlog –stop-position=785 /var/lib/mysql/master-log.000001 > /tmp/mylog.sql
注意:这些都是脚本,通过读进行装载
第二个:hellodb.sql.2这个文件,先放到tmp下
[root@ zhoushuang2 ~]# cp hellodb.sql.2 /tmp/hellodb.sql
基于lvm2的备份: 前提:数据目录位于逻辑卷,包含了数据文件和事务日志; (1) 请求锁定所有表; mysql> FLUSH TABLES WITH READ LOCK; (2) 记录二进制文件事件位置; mysql> FLUSH LOGS; mysql> SHOW MASTER STATUS; mysql -e 'SHOW MASTER STATUS;' >> /PATH/TO/SOME_POS_FILE (3) 创建快照卷 lvcreate -L # -s -p r - SNAM-NAME /dev/VG-NAME/LV-NAME (4) 释放锁 mysql> UNLOCK TABLES (5) 挂载快照卷,并执行备份,备份完成后删除快照卷; (6) 周期性备份二进制日志;
接下来连接到mysql上开始恢复
1、先把二进制功能给关掉
2、进行恢复
这时恢复的是初始数据,后面改的没有
再次执行操作
再次执行发现数据都恢复了
再把二进制功能开启
这就是完整的备份和恢复过程
每次备份完,给自己发一封邮件
原创文章,作者:15152188070,如若转载,请注明出处:http://www.178linux.com/60155