作为《手撕MySQL》系列的第二篇文章,今天介绍一下MySQL的二进制日志(bin log),注意不要和MySQL的InnoDB存储引擎特有的重写日志(redo log)混淆,bin log是记录所有数据库表数据及表结构变更的二进制日志(不会记录查询操作),借助这个日志可以实现:数据恢复和 主从复制(不难理解,因为所有涉及变更的操作都记录了下来,可以追溯)。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
mysql> alter table skatetab add unique index(id, uid), drop primary key, add primary key(uid, id);
现在xtrabackup版本升级到了8.0,但是只对mysql8.0才有支持, 我们这还是使用2.4, 但是2.4相比之前的2.1有了比较大的变化:innobackupex 功能全部集成到 xtrabackup 里面,只有一个 binary,另外为了使用上的兼容考虑,innobackupex 作为 xtrabackup 的一个软链,即 xtrabackup 现在支持非Innodb表备份,并且 Innobackupex 在下一版本中移除(8.0已经移除了),建议通过xtrabackup替换innobackupex。还有其他的一些新特性,更多的说明可以看xtrabackup新版详细说明。
这个专栏前 4 节由无为完成,后四节由马听完成,文稿互相审核。总结了两位作者在这些年自己或者朋友遇到过的高频面试题,希望能和你一起讨论这些问题。
谁也不能保证计算机系统能够永远无故障的执行下去。网络波动、磁盘损坏等现网高频故障,机房掉电、服务器硬件失效等低频却又致命的故障,时刻考验着我们的系统。
作为《手撕MySQL》系列的第三篇文章,今天讲解使用 bin log实现主从复制的功能。主从复制也是MySQL集群实现高可用、数据库读写分离的基石。因为是系列文章,上一篇文章中(传送门)我们已经介绍了在MySQL中查看 bin log的相关状态以及文件信息,并且借助 bin log(二进制日志)实现数据恢复的案例。因此在这篇文章中如有涉及相关知识,将不再赘述。
官网下载:https://www.percona.com/downloads/XtraBackup/LATEST/
上一篇已经,针对XTRABACKUP 的在版本上的问题,导致在使用较新版本的MYSQL上,只能使用mysqlbakcup. 到底mysqlbakcup 是一个什么样的企业级别的工具。今天我们就看看他有什么样的功能。
我们在这里开启了 innodb_file_per_table,但这个参数并非本实验所必须,只是为了演示方便。
物理备份是指直接复制包含数据的文件夹和文件。这种类型的备份适用于大数据量且非常重要,遇到问题需要快速回复的数据库。
在InnoDB内部会维护一个redo日志文件,我们也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。
共享表空间,又称系统表空间,在数据目录中,存储多张表的索引和数据文件,以ibdata1,2,3的形式,可以跨多个数据库使用
数据库备份是DBA的典型任务,可以将数据从一个系统传输到另外一个系统,也可以基于生产系统的特定状态创建一个开发服务器。除此之外,备份还用于数据库恢复,可以将一个发生故障的系统恢复,也可以将系统恢复到发送用户错误之前的特定状态。利用备份的系统可以将其与生产系统分离,在不影响生产系统的性能的前提下,对数据进行审计和分析。
这个是Innodb最重要的参数,主要作用是缓存innodb表的索引,数据,插入数据时的缓冲,默认值为128M。
今天发现有一个备份的mysql数据文件夹异常变大,一查发现是多了三个文件:ibdata1 ib_logfile0 ib_logfile1,前者18m,后两个各5m,原来是迁移的时候从mysql5.0迁移到了5.5,而5.5关闭innodb启动不起来,于是我就开启了innodb,由于innodb会默认增加这几个数据文件和日志文件,导致变大。尝试设置数据文件的大小,结果告诉我最小10m,还是太大,于是探索关闭innodb的方法。 看日志发现说由于mysql程序升级了,需要运行mysql_upgrade升级一下mysql里面的数据库,这个比较简单,和mysql命令用法是一样的,运行一遍就ok了。然后发现还是无法关闭innodb,很奇怪,查了下发现原来mysql5.5默认使用innodb了,所以无法简单的关闭掉,还要设置一下默认使用的引擎为myisam才可以,在my.cnf里加上如下两句: 复制代码 代码如下: default-storage-engine=MYISAM innodb=OFF 重启mysql,然后删掉那三个讨厌的文件即可。 MySQL 5.6 禁用INNODB INNODB是MySQL被ORACLE收购后开发的,支持事务和行级锁等高级功能,但是并不是所有人都需要INNODB的,对大部分人来说,以前的MYISAM引擎就够了,一般会选择将默认引擎改为MYISAM,但是INNODB还是会耗费内存和硬盘,这时候,就需要把INNODB彻底禁用。 在以前的MySQL中,一般可以这么设置就行了: 复制代码 代码如下: default-storage-engine=MYISAM skip-innodb 但是在最新的MySQL5.6里,这么设置是没法启动的,需要再增加一句设置: 复制代码 代码如下: default-tmp-storage-engine=MYISAM 不仅如此,还需要添加以下配置,否则程序会很容易退出的: 复制代码 代码如下: loose-innodb-trx=0 loose-innodb-locks=0 loose-innodb-lock-waits=0 loose-innodb-cmp=0 loose-innodb-cmp-per-index=0 loose-innodb-cmp-per-index-reset=0 loose-innodb-cmp-reset=0 loose-innodb-cmpmem=0 loose-innodb-cmpmem-reset=0 loose-innodb-buffer-page=0 loose-innodb-buffer-page-lru=0 loose-innodb-buffer-pool-stats=0 loose-innodb-metrics=0 loose-innodb-ft-default-stopword=0 loose-innodb-ft-inserted=0 loose-innodb-ft-deleted=0 loose-innodb-ft-being-deleted=0 loose-innodb-ft-config=0 loose-innodb-ft-index-cache=0 loose-innodb-ft-index-table=0 loose-innodb-sys-tables=0 loose-innodb-sys-tablestats=0 loose-innodb-sys-indexes=0 loose-innodb-sys-columns=0 loose-innodb-sys-fields=0 loose-innodb-sys-foreign=0 loose-innodb-sys-foreign-cols=0 摘自http://docs.oracle.com/cd/E17952_01/refman-5.6-en/innodb-turning-off.html 另外MYSQL 5.6 比 5.5占用了更多的物理内存,虚拟内存跟5.5使用差不多(5.5也是一个虚拟内存消耗大户)。性能上比5.5提升了30%左右(根据官方文档,没作具体测试)。
普通索引: 即针对数据库表创建索引; 唯一索引: 与普通索引类似,不同的就是:MySQL数据库索引列的值必须唯一,但允许有空值; 主键索引: 它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引; 组合索引: 为了进一步榨取MySQL的效率,就要考虑建立组合索引。即将数据库表中的多个字段联合起来作为一个组合索引。
在工作中经常会碰到单独迁移、复制或者备份某一张表的需求,一般可以通过逻辑/物理备份来实现。但是在 5.6.6+ 的版本中我们还可以用到一种基于表空间迁移的快速方法,本节内容就来聊聊这一操作。
俗话说”常在河边走,哪有不湿鞋”。在DBA的实际运维过程中经常会遇到误删除、改错数据的情况。遇到这种情况我们除了跑路还能怎么办?我们又怎么能做到有备无患呢?我计划用三章的时间和大家聊聊数据库的备份和恢复工具xtrabackup、mysqldump以及闪回工具binlog2sql,今天先介绍下xtrabackup的原理以及使用方法。
XtraBackup是Percona发布的MySQL开源热备工具,可以在尽量不影响线上读写的情况下进行快速全备、增备。支持InnoDB, XtraDB, 和MyISAM引擎。 ---- 一.运行原理 1.权限 XtraBackup需要连接到数据库服务器,能够在服务器以及datadir目录下执行一些操作。 涉及两类用户,应该满足适当权限要求: a.RELOAD、LOCK TABLES,为了执行FLUSH TABLES WITH READ LOCK b.REPLICATION CLIENT,为了获取二进制日志的
利用二进制文件的复制操作,可以对InnoDB进行完整的物理备份,备份对全部的InnoDB表进行复制,并生成所有表空间文件的副本。
在日常管理服务器的MySQL备份时,比较常用的压缩备份命令,对于新手掌握命令后,可以快速实现使用tar备份打包数据库的文件操作。
本人使用的Ubuntu系统,当初划分/根目录下15G空间,目前mysql数据文件已达近3G,决定将其从原目录(/var/lib/mysql)转移到空间较大的home目录下,起初遇到一些问题,参考网上文章后操作成功,在此做下流程记录。
1、简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点: (1)备份过程快速、可靠; (2)备份过程不会打断正在执行的事务; (3)能够基于压缩等功能节约磁盘空间和流量; (4)自动实现备份检验; (5)还原速度快;
同MongoDB,Redis这样的NoSQL数据库的复制相比,MySQL复制显得相当复杂!
在上一章我们了解到,物理文件层在MySQL架构位于最底层,将数据库的数据存储在文件系统上,并完成与存储引擎的交互。存储数据包括日志文件,数据文件,配置文件等。本章将介绍linux环境下MySQL的各类文件。
连接者:不同语言的代码程序和mysql的交互(SQL交互) 1、连接池 管理、缓冲用户的连接,线程处理等需要缓存的需求 2、管理服务和工具组件 系统管理和控制工具,例如备份恢复、Mysql复制、集群等 3、sql接口 接受用户的SQL命令,并且返回用户需要查询的结果 4、查询解析器 SQL命令传递到解析器的时候会被解析器验证和解析(权限、语法结构) 5、查询优化器 SQL语句在查询之前会使用查询优化器对查询进行优化 select id,name from user where age = 40; a、这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行age过滤 b、这个select查询先根据id和name进行属性投影,而不是将属性全部取出以后再进行过滤 c、将这两个查询条件联接起来生成最终查询结果 6、缓存 如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据 7、插入式存储引擎 存储引擎说白了就是如何管理操作数据(存储数据、如何更新、查询数据等)的一种方法。因为在关系数据库 中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)
mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的 数据库而言,这个速度还是能接受的,但如果数据库非常大,那再使用mysqldump备份就不太适合了。 这时就 需要一种好用又高效的工具,xtrabackup就是其中一款,号称免费版的InnoDB HotBackup。 Xtrabackup实现是 物理备份,而且是物理热备 目前主流的有两个工具可以实现物理热备:ibbackup和xtrabackup;ibbackup是商 业软件,需要授权,非常昂贵。而xtrabackup功能比ibbackup还要强大,但却是开源的。因此我们这里就来介 绍xtrabackup的使用。 Xtrabackup提供了两种命令行工具: xtrabackup:专用于备份InnoDB和XtraDB引擎的 数据; innobackupex:这是一个perl脚本,在执行过程中会调用xtrabackup命令,这样用该命令即可以实现备 份InnoDB,也可以备份MyISAM引擎的对象。
王 悦,爱可生研发团队成员,负责数据库管理平台相关项目的开发和故障排查,好奇 MySQL 技术原理及各类数据库实现方案。
单独备份表的话需要表在独立的表空间里面,即配置了innodb_file_per_table参数
mysql数据库备份有多么重要已不需过多赘述了,废话不多说!以下总结了mysql数据库的几种备份方案: 一、binlog二进制日志通常作为备份的重要资源,所以再说备份方案之前先总结一下binlog日志~~ 1.binlog日志内容 1)引起mysql服务器改变的任何操作。 2)复制功能依赖于此日志。 3)slave服务器通过复制master服务器的二进制日志完成主从复制,在执行之前保存于中继日志(relay log)中。 4)slave服务器通常可以关闭二进制日志以提升性能。 2.binlog日志文件的文
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
MySQL用了很久,但是一直也是工作的使用,对于MySQL的知识点都比较零散碎片,一直也没有整体梳理过,趁着最近不忙,梳理一下相关的知识点。
备份InnoDB的表时,可以使用可移动表空间执行部分备份,可以备份单独的表,也可以备份具有相同业务功能的多个表。
昨天阿粉主要说的是关于 InnoDB 存储引擎的特点,以及关于 InnoDB 的硬盘结构,还有他的优点,今天阿粉来讲一下关于 MySQL 存储引擎剩下的一些相关的内容,大家只需要了解一下,知道有这么回事就行了。
port = 3306 # 端口号 socket = /var/lib/mysql/mysql.sock # 套接字文件(localhost登陆会自动生成)
数据开发过程中,为了确保生产数据库安全,一般将实时数据同步、备份到本地测试数据库完成开发工作,最后部署应用。
引用来自官网的图,MySQL Server架构从上到下依次为网络连接层(Connectors)、服务层(MySQL Server)、存储引擎层(Plugable Storage Engines)、系统文件层(File System)
写这篇文章我是非常不情愿的,我现在是在写这篇文章,但是同时我也在恢复我服务器数据库的数据,出这篇文章也是在我的意料之外,由于我正在这件事类,我就出一版这样的mysql.frm.ibd文件数据恢复教程,希望这次教程可以帮助到更多需要恢复的人,我现在是情绪暴涨。
前几天在部署k3s相关服务时,不小心把操作系统整坏了。导致无法启动,磁盘上还有我的一些重要数据。
我们都知道MySQL 的复制技术,通过主从同步可以实现读写分离,热备份,让服务器更加高可用。MySQL 的复制主要是通过 Binlog 来完成的,Binlog 记录了数据库更新的事件,从库 I/O 线程会向主库发送 Binlog 更新的请求,同时主库二进制转储线程会发送 Binlog 给从库作为中继日志进行保存,然后从库会通过中继日志重放,完成数据库的同步更新
1. 做灾难恢复:对损坏的数据进行恢复和还原 2. 需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用
很多使用php+mysql建站的站长朋友们,经常要用到phpMyAdmin数据库管理工具备份和恢复数据库,当站点运行很久的时候,MySQL数据库会非常大,当站点碰到问题时,需要使用phpMyAdmin恢复数据库,但是在导入大的SQL文件时候,由于PHP上传文件的限制和脚本的响应时间的限制,无法导入,会显示失败,但是我们要导入到MySQL数据库,要怎么操作呢?下面由我为大家来讲解一下吧,可以帮助到需要的站长朋友!
主要也是参考下面链接最终成功恢复。 这篇文章的步骤稍微有点多。有些是恢复不必要的,这里做一下自己的整理。
MySQL的服务实现通过后台多个线程、内存池、文件交互来实现对外服务的,不同线程实现不同的资源操作,各个线程相互协助,共同来完成数据库的服务。MySQL常用的后台线程概括如下,分为Master Thread,IO Thread,Purge Thread,Page Cleaner Thread
很多小伙伴工作很长时间了,对于MySQL的掌握程度却仅仅停留在表面的CRUD,对于MySQL深层次的原理和技术知识了解的少之又少,随着工作年限的不断增长,职场竞争力却是不断降低的。很多时候,出去面试时,被面试官吊打的现象成了家常便饭。
备份的本质就是将数据集另存一个副本,但是原数据会不停的发生变化,所以利用备份只能恢复到数据变化之前的数据。那变化之后的呢?所以制定一个好的备份策略很重要。
数据库服务器存在单点问题 数据库服务器资源无法满足增长的读写请求 高峰时数据库连接数经常超过上限
2、从库的IO线程在指定位置读取主库binlog内容存储到本地的中继日志(Relay Log)中
领取专属 10元无门槛券
手把手带您无忧上云