共计 2415 个字符,预计需要花费 7 分钟才能阅读完成。
这篇文章给大家介绍 MySQL 中怎么实现备份与恢复,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
1、利用 mysqldump 实现从逻辑角度完全备份 mysql, 配合二进制日志备份实现增量备份
2、利用 lvs 快照从物理角度实现几乎热备的完全备份, 配合二进制日志备份实现增量备份
3、利用 percona 公司的 xrabackup 实现完全热备份与增量热备份
实验环境:RHEL5.8,SElinux 关闭,MySQL 是 tar 包初始化安装版本 5.5.28
一、测试环境准备
1.1 mysql 的安装就不说了,
1.2 编缉 /etc/my.cnf 把二进制日志存放目录改到其它非数据目录,innodb 每表一文件
建立一目录用于存放二进制日志
1.mkdir /mybinlog
2.chown mysql:mysql /mybinlog
修改 my.cnf
1.vim /etc/my.cnf
2.log-bin=/mybinlog/mysql-bin ## 二进制日志目录及文件名前缀
3.innodb_file_per_table = 1 ## 启用 InnoDB 表每表一文件, 默认所有库使用一个表空间
启动 mysqld
service mysqld start
1.3 创建一个测试库与测试表
1.mysql create database laoguang;
2.mysql use laoguang;
3.mysql create table linux (id tinyint auto_increment primary key,name char(10));
4.mysql insert into linux (name) values (apache),(nginx),(php
1.4 创建用于存放备份的目录
1.mkdir /myback
2.chown -R mysql:mysql /myback
二、用 mysqldump 实现备份
2.1 mysqldump 用来温备, 所以我们得为所有库加读锁, 并且滚动一下二进制日志, 并记录当前二进制文件位置
1.mysqldump –all-databases –lock-all-tables –routines –triggers –master-data=2 \
2.–flush-logs /myback/2012-12-3.19-23.full.sql
3.
4.–all-databases 备份所有库
5.–lock-all-tables 为所有表加读锁
6.–routines 存储过程与函数
7.–triggers 触发器
8.–master-data=2 在备份文件中记录当前二进制日志的位置, 并且为注释的,1 是不注释掉在主从复制中才有意义
9.–flush-logs 日志滚动一次
查看有没有备份成功, 有没有启用新二进制的日志, 查看备份的文件中有没有记录完整备份后二进制的位置
备份二进制日志
cp /mybinlog/mysql-bin.000001 /myback/2012-12-3.19-23.full.00001
2.2 模拟数据库意外损坏, 测试完整恢复
1.rm -rf /data/mydata/*
2.rm -rf
3./mybinlog/*
初始化 mysql 并启动 mysql
1.cd /usr/local/mysql
2../scripts/mysql_install_db –user=mysql –datadir=/data/mydata
3.rm -rf /mybinlog/* ## 因为我们不是全新初始化的, 可能会有报错的二进制日志, 我们不需要
4.service mysqld start ## 启动时会重新生成新的二进制日志的
恢复到备份状态, 备份前先关闭对恢复过程的二进制日志记录, 因为记录恢复语句是毫无意义的
1.mysql set global sql_log_bin=0;
2.mysql /myback/2012-12-3.19-23.full.sql ## 如果有账号密码记的 -u - h 哦
3. 打开记录并查看恢复状况
4.mysql set global sql_log_bin=1;
5.mysql show databases;
打开二进制记录并查看恢复状况
1.mysql set global sql_log_bin=1;
2.mysql show databases;
2.3 模拟一种场景, 我往 linux 表中新添加了数据, 然后不小心将这个表删了, 我们要恢复到删除之前的状态, 并且新加的数据还存在.
2.3.1 新增数据
1.mysql use laoguang;
2.mysql insert into linux (name) values (haddop), (mysql
3.mysql drop table linux;
4.mysql show master status; ## 查看当前所在二进制日志中的位置
5.+——————+———-+————–+——————+
6.| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
7.+——————+———-+————–+——————+
8.| mysql-bin.000001 | 9005 | | |
9.+——————+———-+————–+——————+
我们先恢复完整数据, 再恢复完整备份后到删除之前的数据, 对应二进制日志就是完整备份后的二进制日志位置到删除表之前的位置
关于 MySQL 中怎么实现备份与恢复就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。