前段时间使用MySQL作为数据存储做了一个小项目。项目上线运行了几十天之后,数据已经越来越多,达到了100多M。用mysqldump每天备份全量数据然后传输到另外一台机器上这种方式进行数据备份,久而久之越来越慢。于是开始研究如何利用mysql的主从同步功能实现自动备份。如果实现自动备份,主从服务器之间只需要在有数据更新时同步一点增量数据,不会在备份时占用大量的CPU和内网的网络带宽资源了。介绍主从同步之前,还是先从基础的mysqldump备份开始讲起。

mysqldump

mysqldump是mysql数据库提供的一个数据备份工具。顾名思义,mysqldump可以把mysql数据库导出成sql语句文件,并保存到磁盘上。mysqldump命令产生的.sql文件包含一系列SQL INSERT语句,可以用来进行数据恢复。

假定我们在星期日下午1点进行了备份,此时负荷较低。下面的命令可以完全备份所有数据库中的所有表:

1 shell> mysqldump --single-transaction --all-databases > backup_sunday_1_PM.sql

使用mysqldump进行数据备份,至少有两个问题:

1 mysqldump运行时,需要消耗一定的计算资源。而且数据库越大,消耗的计算资源也就越多,因此可能会造成系统在备份时运行效率低,容易造成用户卡死。

2 对mysqldump备份的数据进行恢复,会丢掉从备份点开始的更新数据。

为了解决第2点的问题, mysql文档中给出了一个解决办法。那就是利用mysqlbinlog二进制文件保存增量的数据。采用全量mysqldump+增量mysqlbinlog的方式进行数据恢复。

下面介绍mysqlbinlog

mysqlbinlog

mysqlbinlog就是mysql的二进制数据文件。在对mysql进行一些配置之后,mysql会把数据库的更新操作都记录在一个文件中。mysqlbinlog可以在mysqld的--bin-log选项或者在配置文件(my.cnf或者my.ini)中打开。

[mysqld]

log-bin=mysql-bin   //[必须]启用二进制日志

在启用了二进制日志以后,在mysql的数据目录下,会出现一些以数字为结尾的文件,例如:

-rw-rw---- 1 guilhem  guilhem   1277324 Nov 10 23:59 mysql-bin.000001
-rw-rw---- 1 guilhem  guilhem         4 Nov 10 23:59 mysql-bin.000002

这些文件就是二进制的日志文件。每次mysql启动都会增加一个文件。

下面回到上节提出的问题,如何采用全量mysqldump+增量mysqlbinlog的方式进行数据恢复?

方法其实很简单,在每次使用mysqldump进行全量数据备份时,用--flush-logs选项:

mysqldump --single-transaction --flush-logs --master-data=2 > backup.sql

在使用这样的语句进行备份之后,mysql就会关闭原来的二进制日志文件,开启一个新的二进制日志文件。比如,新开启的二进制日志文件为 mysql-bin.000003。 那么在进行数据恢复的时候,你可以利用backup.sql进行全量恢复+ mysql-bin.000003进行增量同步。

数据恢复的方法也很简单。

1 cat backup.sql | mysql -uroot -ppassword
2 mysqlbinlog mysql-bin.000003 | mysql -uroot -ppassword

mysqlbinlog是一个读取 mysql二进制日志输出sql语句的命令行工具。使用方法可以从http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/client-side-scripts.html#mysqlbinlog 查到。

还记得上文提出的mysqldump备份的两个问题吗,现在第二个问题解决了,第一个问题还没有解决

“ mysqldump运行时,需要消耗一定的计算资源。而且数据库越大,消耗的计算资源也就越多,因此可能会造成系统在备份时运行效率低,容易造成用户卡死。”

下文中我们利用mysql主从同步来解决这个问题。

主从同步

主从同步的含义非常简单。通过一定的设置,让两台或者多台mysql服务器的数据保持一致。设置的方法网上已经有很多方法了,推荐这篇帖子http://369369.blog.51cto.com/319630/790921

设置成主从同步之后,基本上就免去了每天全量备份之苦。而且一但主数据库出问题,可以马上切换到从数据库进行服务,大大减少了故障恢复的时间。

我讲一讲我在配置中遇到的2个问题:

1 在从服务器上 show slave status时,显示 Slave_SQL_Running: No. 错误的原因是 mysql 数据库的db表已经存在,不能再建立。

错误的原因是这样的, 我在每台数据上都运行了 mysql_install_db这个命令安装了 mysql test info_schema这3个数据库。当我主从同步开始时,主数据库要向从数据库同步建立mysql数据库的操作。而从数据库已经建立了mysql数据库。

我解决的方法是在配置文件里指明写二进制文件的数据库名称。只有真正需要同步的业务数据库才写二进制文件。

主数据库:

[mysqld]

binlog-do-db=exampledb

从数据库:

[mysqld]

replicate-do-db=exampledb

2 我的主数据库已经运行有一段时间了。在从服务器设置master_log_pos的时候设置成主服务器的当前日志位置。结果同步时也出现了Slave_SQL_Running: No. 错误的原因是: 执行Insert语句时数据表没有建立。

错误的原因也很简单,我在从数据库里面还没有建立对应的数据库,而同步的操作为插入数据。

解决的方法是通过mysqldump对主数据库进行一次全量数据备份,并且在从数据库中恢复这个备份之后才开始进行主从同步。

转载于:https://www.cnblogs.com/martinjinyu/articles/3750422.html

MySQL 数据备份与同步相关推荐

  1. MySQL数据备份、恢复

    文章目录 一.MySQL日志管理 1.1日志分类 1.2日志配置 1.3日志查询 二.MySQL数据备份 2.1物理备份 2.2逻辑备份 三.常用的备份方法 3.1物理冷备 3.2工具备份(温备) 3 ...

  2. mysql 数据备份(mysqldump)

    mysql 数据备份(mysqldump) ************************* mysqldump 使用 命令格式 root@7a72b2ffd688:/# mysqldump --h ...

  3. 7、 MySQL数据备份

    MySQL数据备份.恢复 引言:在生产环境中,数据的安全性至关重要,任何数据的丢失都可能产生严重的后果,那么对于数据的备份就将显的十分重要.对于MySQL而言,在其备份中,日志起到了很重要的作用 一. ...

  4. mysql备份psb文件怎么打开_Navicat for MySQL 数据备份教程

    原标题:Navicat for MySQL 数据备份教程 一个安全和可靠的服务器与定期运行备份有密切的关系,因为错误有可能随时发生,由攻击.硬件故障.人为错误.电力中断等都会照成数据丢失.备份功能为防 ...

  5. windows mysql主主配置_基于docker MySQL数据库主主同步配置(windows上)

    安装docker部分 坑点 docker拉镜像速度过慢 点击docker图标,点击邮件看到setting,setting界面上点击docker engine,配置如图所示 还有两个备用的镜像地址 &q ...

  6. Mysql数据库的简单备份与还原_史上最简单的MySQL数据备份与还原教程

    本文主要为大家详细介绍了史上最简单的MySQL数据备份与还原教程第一篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家. 数据备份与还原第一篇分享给大家,具体内容如下 基础概念: ...

  7. 简单实现MySQL数据实时增量同步到Kafka————Maxwell

    任务需求:将MySQL里的数据实时增量同步到Kafka 1.准备工作 1.1.MySQL方面:开启BinLog 1.1.1.修改my.cnf文件 vi /etc/my.cnf [mysqld] ser ...

  8. mysql 镜像备份_手动构建percona-xtrabackup Docker镜像,并实现mysql数据备份

    由于最近项目比较多,并且都需要自己部署运维Mysql,为了保证mysql数据的安全,那么数据备份就必不可少了.之前做mysql数据备份的时候,都是使用的xtrabackup,所以这次也不例外,由于需要 ...

  9. mysql 数据备份

    一:IDE工具介绍 生产环境还是推荐使用mysql命令行, 但为了方便我们测试 可以使用IDE 工具. 掌握 测试+链接数据库. 新建库 新建表,新增字段+类型+约束 设计表:外键 新增查询 备份库. ...

最新文章

  1. java 解释型和编译型
  2. 递归调用方法时栈内存是如何变化的?(使用内存图演示递归调用过程)
  3. jdk安装与调试笔记 20200202
  4. 第一次请领导喝酒,五百左右的白酒有哪些推荐?
  5. 自学python还是c4d_C4D到底需要学多久?要学到什么程度?
  6. 怎么设置php 中小窗口浮动,CSS_闭合浮动元素超级简单的方法,无意中看到的一个非常不错的 - phpStudy...
  7. C语言相反次序重新排序
  8. py文件编译成pyc文件
  9. 解密navicate保存的数据库连接密码
  10. C语言基础知识:do while用法理解
  11. 中标麒麟Neokylin7桌面版安装指南——基于VirtualBox虚拟机
  12. mac parallels desk 网络初始化失败
  13. 两轮差速机器人舵机转轴示意图_一种基于两轮差速机器人的运动控制方法与流程...
  14. input框只能输入非负数
  15. 『C++』endl、ends和flush的区别
  16. 旷视科技计算机视觉算法研究员年薪,旷视科技算法研究员面经(21个问答)
  17. include指令包含网站banner和版权信息栏
  18. 超融合详细对比:市面各主流超融合产品及厂商优劣势解密
  19. 基于AI的自然语言处理
  20. 进步与成就感——使用技巧

热门文章

  1. php模拟表格冻结,PHPExcel冻结(锁定)表头的简单实现方法
  2. WeakHashMap和四种引用总结:
  3. 数据集合 oracle,oracle集合
  4. java隐藏方式运行,Java 数据隐藏和封装
  5. 007_ServletConfig
  6. 029_jQuery Ajax简介
  7. Windows下Unity5x创建和打开游戏工程
  8. 如何在html中自动生成条形图,css如何创建3D立体的条形图?
  9. c语言随机抽奖小程序,小程序抽奖实现
  10. 创建了联合索引还用在单个字段上创建索引吗_数据库 索引并不是万能的