设为首页 收藏本站
查看: 736|回复: 0

[经验分享] mysql的备份和恢复

[复制链接]
发表于 2018-10-7 09:43:03 | 显示全部楼层 |阅读模式
  mysql的备份和恢复
  备份类型:
  完全备份指的是备份整个数据集( 即整个数据库 )
  部分备份指的是备份部分数据集(例如: 只备份一个表)
  增量备份指的是备份自上一次备份以来(增量或完全)以来变化的数据; 特点: 节约空间、还原麻烦
  差异备份指的是备份自上一次完全备份以来变化的数据 特点: 浪费空间、还原比增量备份简单
  备份策略:
  本文介绍第一种备份方法,使用系统自带的工具mysqldump,mysqldump只支持全量备份
  mysqldump:
  全量+binlog
  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:锁定表完成后,即进行日志刷新操作;
  1、首先我们创建一个数据库和属于这个数据库的某个表
MariaDB [(none)]> create database hidb;MariaDB [(none)]> use hidb;  
MariaDB [hidb]> create table students(id int unsigned auto_increment primary key,name char(30) not null,age tinyint unsigned,gender ENUM('F','M'),major varchar(200));
  
MariaDB [hidb]> desc students;查看表结构
DSC0000.png

  2、然后向表中插入一些数据
  创建一个数组,给hidb这个库中的students表中自动添加一些内容,要求姓名自动递增,年龄对80取模加上18,性别定义数组随机为F或M
[root@bixia ~]#GENDER=('F' 'M')  
[root@bixia ~]#echo ${GENDER[0]}
  
[root@bixia ~]#echo ${GENDER[1]}
  
[root@bixia ~]#for i in {1..1000}; do mysql -e "insert into hidb.students(id,name,age,gender) values('$i','stu$i','$[$RANDOM%80+18]','${GENDER[$RANDOM%2]}');";done
  
MariaDB [hidb]> select * from students;
  
.....
  
.....
  
.....
  
|  998 | stu998  |   38 | F      | NULL  |
  
|  999 | stu999  |   91 | F      | NULL  |
  
| 1000  | stu1000 |   80 | M      | NULL  |
  
+------+---------+------+--------+--------------+
  3、最后启动二进制日志
  创建一个目录存放数据和日志文件
[root@bixia ~]#mkdir -pv /mydata/{data,logs}  
mkdir: created directory ‘/mydata’
  
mkdir: created directory ‘/mydata/data’ 存放数据
  
mkdir: created directory ‘/mydata/logs’
  
[root@bixia ~]#chown -R mysql.mysql /mydata/* 将/mydata/目录下的所属者和所属组改为mysql
  
[root@bixia ~]#vim /etc/my.cnf.d/server.cnf 编辑配置文件指定二进制日志存放的路径
  
[server]
  
log_bin = /mydata/logs/master-log  不用加后缀
  
[root@bixia ~]#systemctl restart mariadb 重启服务让日志文件生效
  
[root@bixia ~]mysql
  
MariaDB [hidb]> set @@session.sql_log_bin=on; 启动二进制日志记录
  
MariaDB [hidb]> grant all on *.* to root@'172.18.77.%' identified by 'centos'; 授权用户可以通过远程登录连接
  4、上述所有的环境以经准备就绪了;接下来我们准备另外一台服务器以供备份数据
[root@bixia ~]#mysqldump -uroot -pcentos -h172.18.77.7 --single-transaction -R --triggers -E --databases hidb --master-data=2 --flush-logs  > /root/hidb-$(date +%F-%H-%M-%S).sql[root@bixia ~]#mysql < hidb-2017-11-14-11-38-09.sql 备份恢复  到这里就备份完成了,但是如何在备份从这里已经备份的之后的数据呢 ,这就是增量备份了,利用二进制日志进行备份
  5、我们来模拟一下,比如我们在原来的主的mysql服务器上分别删除一行数据个插入一行数据
MariaDB [hidb]>  delete from students where id=999;  
MariaDB [hidb]> insert into students (name,age,gender) values ('Huangshang','30','M');
  在另外一台主机上的备份数据库中是看不到这些删除和插入的数据的
[root@bixia ~]#less hidb-2017-11-14-11-38-09.sql 查看这二个文件可以看到从哪里开始增填新的内容,以供参考备份使用  匹配到是master-log.000006这个日志,从245字节开始
DSC0001.png

[root@bixia logs]#mysqlbinlog  -j 245 master-log.000006 > /tmp/binlog.sql  
[root@bixia logs]#scp /tmp/binlog.sql 172.18.77.77:/root/
[root@bixia ~]#mysql < binlog.sql 备份恢复  6、最后登录查看
  在主服务器上删除的999行数据和新插入的一行数据已经备份到最新的数据了
DSC0002.png

DSC0003.png

  注意:由于上述两台主机的主机名都是bixia,所以有可能区分不了哪台是主的mysql,哪个是用于备份的mysql主机,为了方便自己分的清楚建议修改主机名不一样,以防混淆。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-614199-1-1.html 上篇帖子: mysql root的密码忘了?linux下重置mysql的root用户密码。 下篇帖子: MySQL下的表分区简述
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表