MyFlash——美团点评的开源MySQL闪回工具
由于运维、DBA的误操作或是业务bug,我们在操作中时不时会出现误删除数据情况。早期要想恢复数据,只能让业务人员根据线上操作日志,构造误删除的数据,或者DBA使用binlog和备份的方式恢复数据,不管那种,都非常费时费力,而且容易出错。直到彭立勋首次在MySQL社区为mysqlbinlog扩展了闪回功能。在美团点评,我们也遇到过研发人员误删主站的配置信息,从而导致主站长达2个小时不可用的情况。DBA同学当时使用了技术团队自研的binlog2sql完成了数据恢复,并多次挽救了线上误删数据导致的严重故障。不过,binlog2sql在恢复速度上不尽如人意,因此我们开发了一个新的工具——MyFlash,它很好地解决了上述痛点,能够方便并且高效地进行数据恢复。现在该工具正式开源,开源地址为:https://github.com/Meituan-Dianping/MyFlash。闪回工具现状先来看下目前市面上已有的恢复工具,我们从实现角度把它们划分成如下几类。①mysqlbinlog工具配合sed、awk。该方式先将binlog解析成类
replace into 与insert into on duplicate key update的区别
大多数熟悉mysql的用户来说,碰到表数据替换的需求一般会想到下面两种SQL来处理:1.replaceinto2.insertinto…onduplicatekeyupdate以上都不属于标准SQL,也就是mysql中的"方言"。那么用那种方式比较好呢?首先我们来分析下这两种语句的差异:1.replaceinto语句CREATETABLEdianwoba(dint(11)NOTNULLAUTOINCREMENT,wint(11)DEFAULTNULL,bvarchar(200)DEFAULTNULL,PRIMARYKEY(d))ENGINE=InnoDBAUTOINCREMENT=1DEFAULTCHARSET=utf8;select*fromdianwoba;mysql>replaceintodianwoba(d,w)values(5,6);QueryOK,2rowsaffected(0.04sec)
使用tshark在命令行进行网络抓包
使用wireshark的客户端进行抓包,或者tcpdump抓包再用wireshark分析,网上已经有很多资料了,这里就不再赘述了。不熟悉的可以看看网上的资料:http://www.jianshu.com/p/a62ed1bb5b20或者官方文档userguide:https://www.wireshark.org/docs/wsug_html_chunked/线上问题排查,有时候时间争分夺秒,或者一些私有云环境完全隔离,根本没法让你导出抓包的文件,这时候需要直接使用命令行进行抓包分析。今天我们就来学习下tshark的使用。PS:tshark基本上可以替代tcpdump,抓包的文件也可以直接用于wireshark来分析主要先通过yuminstallwireshark安装后才能使用tshark1.tshark选项说明一览这么多参数肯定懒得看,我们继续下一节,掌握最常用的一些参数的用法。TShark(Wireshark)2.5.0(v2.5.0rc0-1500-g78f9a07f)Dumpandan
使用tshark在命令行进行网络抓包
使用wireshark的客户端进行抓包,或者tcpdump抓包再用wireshark分析,网上已经有很多资料了,这里就不再赘述了。不熟悉的可以看看网上的资料:http://www.jianshu.com/p/a62ed1bb5b20或者官方文档userguide:https://www.wireshark.org/docs/wsug_html_chunked/线上问题排查,有时候时间争分夺秒,或者一些私有云环境完全隔离,根本没法让你导出抓包的文件,这时候需要直接使用命令行进行抓包分析。今天我们就来学习下tshark的使用。PS:tshark基本上可以替代tcpdump,抓包的文件也可以直接用于wireshark来分析主要先通过yuminstallwireshark安装后才能使用tshark1.tshark选项说明一览这么多参数肯定懒得看,我们继续下一节,掌握最常用的一些参数的用法。TShark(Wireshark)2.5.0(v2.5.0rc0-1500-g78f9a07f)Dumpandanalyze
MySQL Error Based SQL Injection (报错注入)总结
点击阅读全文MySQL报错注入利用数据库报错来显示数据的注入方式经常会在入侵中利用到,这种方法有一点局限性,需要页面有错误回显。数据类型转换报错是最常见的一种方法,在微软SQLServer上,利用的是convert()和cast()函数,MySQL的报错SQL注入方式更多。有很多函数都会导致MySQL报错并且显示出数据,它们分别是GemetryCollection()polygon(),GTID_SUBSET()multipoint()multinestring()multipolygon()LINESTRING()exp()MYSQL报错注入大体可以分为以下几类:BIGINT等数据类型溢出xpath语法错误concat+rand()+group_by()导致主键重复空间数据类型函数错误floor()注入语句select*fromadminwhereid=1and(select1from(selectcount(*),concat(user(),floor(rand(0)*2))xfrominf
MariaDB基金会迎微软,Azure预览版呼之欲出!
Connect开发者大会的第一天,微软宣布加入MariaDB基金会,负责监督MariaDB数据库的开发。Connect是微软的另一个年度开发者大会,微软Build开发者大会每年春天举行,涵盖从Windows到Azure,Office到HoloLens等微软相关开发的技术和产品。而如今的Connect大会则更侧重于开源,数据库和云,去年Connect大会,微软宣布加入Linux基金会,如果再往前追溯的话,微软曾在这个大会上宣布开源VisualStudioCode以及.Net。MariaDB是由许多原始的MySQL贡献者开发和维护的一个MySQL数据库分支。2008年,SunMicrosystems收购了开发和创建MySQL的MySQLAB公司。2009年,Oracle宣布计划收购Sun,这让社区开始担心MySQL在未来是否会成为一个成功的社区开发的开源项目。为了确保数据库能够继续开发,2008年MariaDB诞生。此后MySQL的开发也证实了上述的担忧都是有道理的,虽然Oracle仍然在开源MySQL,但是其开发本身已经是闭
MySQL 5.7 MGR 集群搭建
最近看了一下mysql5.7的MGR集群挺不错的,有单主和多主模式,于是乎搭建测试了一下效果还不错,我指的不错是搭建和维护方面都比较简单。网上绝大多数都是单主模式,当然我这里也是,为了加深印象,特意记录一下搭建过程,等以后再去尝试多主模式,相信大家现在数据库的瓶颈基本都是在写,读写分离虽然是一种可行的解决方案,但是如果数据量很大,写一样会有问题,虽然有些解决方案能部署多个主节点,能同时进行读写,但是脑裂又是一个严重的问题,所以这里MGR集群内置了自动化脑裂防护机制又得到了很多人的青睐,这里MGR简称MySQLGroupReplication是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。注意本文这里不再阐述原理性的东西。注意:我这里采用编译安装的方式,如果想简单直接yum安装mysql5.7也行,mysql编译安装需要的磁盘空间还是比较大的,一般在7G左右,所以要提前规划好,用三个节点比较接近生产环境,而且更直接清晰。详细部署信息如下:
mha_switch: 结合 proxysql 和 MHA 切换 MySQL 主从
mha_switch:结合proxysql和MHA切换MySQL主从在之前的文章proxysql介绍及测试使用中,详细介绍了proxysql的安装配置等,不过经过时间的推移,proxysql工具做了很多的改进,自动检测及状态切换等功能带给我们很大的便利,可以取代传统的haproxy代理,不过由于proxysql的检测和状态切换机制不是实时进行,只是间接性检测,所以会带来了另外的困扰,如何与已有的工具如MHA更好的结合以保证数据的一致性.功能介绍mha_switch通过在自定义的脚本中加入proxysql检测和切换的功能比较方便的实现了MHA和proxysql之间的配合使用.mha_switch主要实现以下功能:解析masterha-script.cnf的实例配置信息;切换vip信息(可选,如果实例通过vip对外服务);block/release数据库用户;prxoysql切换;配置说明自定义脚本读取masterh
MySQL数据库高性能之全面优化指南
MySQL虽然出了多个分支,但它仍然是世界上最受欢迎的关系数据库。但它最初的安装以及至部署到生产环境之时,可能不是最优化的状态。许多人就用它的默认值在跑,没有深入的进行研究。我在本文中,和你讨论这些MySQL的优化技巧,并将它们与后面MySQL的新特性结合在一起来讲解。配置优化首先,这一部分是最容易被人们忽略的。性能是每个MySQL最应该做的事。虽然MySQL5.7之后配置默认值比以前有更合理,但是即使如些还是有很多优化的空间。我们假设你正在一个linux主机,无论是阿里云,腾讯云还是AWS还是其它布拉布拉,MySQL安装后的配置文件都在/etc/mysql/my.cnf中。也有可能你的MySQL配置文件内容不多,可能还加载了其它配置文件,需要仔细观察一下。比如/etc/mysql/mysql.conf.d/mysqld等名称。配置文件你需要有一个熟悉的命令行工具,比如vi或emacs。如果你没有接触过它,那么也可以用其它方式。你可以在本地使用Vagrantbox来编辑,比如把原文件复制到安全的文件夹中编辑。比如:
【计算机本科补全计划】Mysql 学习小计(4)
【计算机本科补全计划】Mysql学习小计(4)發佈文章已保存正文之前昨天终于把我苦命的毕业设计审批表送出去了。结果暑假的生产实习开始对账,我这儿又开始忙活了,还要签字,我有时候都在想要不全班代签一遍算了。不然真的揪心啊!mmp,就学校这些东西破事多!!虽然合理,但是太忙活了!烦不胜烦,不管了,我还是安心学我的小习,偶尔写写文章寻寻乐子吧!今天写了一篇与众不同的文章(相对于我以往的文风,或者说我以往就没有这玩意?反正劳请看官老爷去看一眼?给个赞最棒?)成甲--《好好学习·个人知识管理精进指南》读书笔记正文MySQL序列使用Mysql教程里面的序列大概就是指能够自增的列吧,也就是说只要你添加了一个行记录,那么就算你没有给定这个行的相应列的值,它也会自动的给你添加相应的自增后的值进去。好比一个人员记录,没插入一个员工记录,员工编号就可以自动加1,而不需要你之前再去查看然后指定序号。想想我们新生入学的时候分配学号,如果还要一个个的去添加,增加了多少的工作量,而且如果还不能保证精确性,好比如果U201710655之后紧接着输入一个
用 Percona Toolkit 備份的 MySQL 可以直接還原到 Amazon RDS 上
AWS宣佈AmazonRDSforMySQL支援從PerconaToolkit備份出來的檔案還原了:「EasilyrestoreanAmazonRDSMySQLdatabasefromyourMySQLbackup」。StartingtodayyoucaneasilyrestoreanewAmazonRDSforMySQLdatabaseinstancefromabackupofyourexistingMySQLdatabase,includingMySQLdatabasesrunningonAmazonEC2oroutsideofAWS.ThisisdonebycreatingabackupusingthePerconaXtraBackuptoolanduploadingtheresultingfilestoanAmazonS3bucket.Youthencreatea
Python之mysql数据库更新表数据接口实现
1#-*-coding:utf-8-*-2importpymysql3importsettings45classmysql(object):6def__init__(self):7self.db=None89defconnect(self):1011self.db=pymysql.connect(host=settings.ip,port=settings.port,user=settings.mysql_user,passwd=settings.mysql_passwd,db=settings.database,)12#print("connectisok")13#return114defdisconnect(self):15self.db.close()16#return-11718defcreate_table(self,
MySQL 5.7下修改数据库名
今天接到需求说需要把MySQL5.7数据库的名字从A改为B,查了下A数据库下有不到200张表,也不是很大,要是用导入导出也可以,就是还是会慢,时间宝贵啊,用的时间越少越好。有个renametable命令,写个脚本主要用它来实现需求#!/bin/bash#先判断新数据库是否存在,要是不存在就创建。#列出老数据库下都有那些表,其中N和s参数起到的作用是格式化,有点类似于Oracle下sqlplus里的pagesize#用for循环来rename。mysql-uroot-pxxxxDB2017#-e'createdatabaseifnotexistscus_0042'list_table=$(mysql-uroot-pxxxxDB2017#-Nse
MySQL全量备份
当数据库跑了较长时间后,存储的数据将越来越多,这时候往往也意味着,一旦数据库服务器出现宕机等相关状况,将给我们的业务带来巨大的影响,甚至可能是具备一定的毁灭性的,因此,即使对数据库进行备份是极其重要的。接下来,我们一起来学习全量备份的实现方式。环境说明:数据库服务器:172.18.250.208备用服务器:172.18.251.4备份数据库服务器首先,我们先在数据库服务器上创建一个数据库,并写入一些数据[root@node1~]#yum-yinstallmariadb-server#安装数据库[root@node1~]#systemctlenablemariadb#设定为开机自启动[root@node1~]#systemctlstartmariadb#启动服务[root@node1~]#mysql_secure_installation#初始化数据库[root@node1~]#mysql-uroot-pguomaiMariaDB[(none)]>createdatabasemydb
SSM 配合 Mysql 数据库和代码数据源主从分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是不堪设想。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:redis,如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力。Ok切入今天微博主题,利用MySQL主从配置,实现读写分离,减轻数据库压力。这种方式,在如今很多网站里都有使用,也不是什么新鲜事情,今天总结一下,方便大家学习参考一下。原理:主服务器(master)负责写操作(包括增删改),有且仅有一台;从服务器(slave)负责读操作,可以配置n台,写入数据的时候,首先master会把数据写在本地BinaryLog文件中,然后通过I/O写入slave的relayLog日志文件中,之后才同步数据库中,实现主从同步在这里我使用的是两台CenterOS6.5的虚拟机进行配置,maste
MySQL事务未提交导致整个表锁死
问题及说明:当一个SQL事务执行完了,但未COMMIT,后面的SQL想要执行就是被锁,超时结束;报错信息如下:mysql>ERROR1205(HY000):Lockwaittimeoutexceeded;tryrestartingtransaction处理步骤:该问题发生环境为MySQL5.6,在MySQL5.5版本后,information_schema库中增加了三个关于锁的表,分别如下:innodb_trx:当前运行的所有事务innodb_locks:当前出现的锁innodb_lock_waits:锁等待的对应关系该问题可以直接从这个几张表入手,找到了一直没有提交的只读事务,然后killthreadid,最后确认只读事物是否被干掉了就OK了。解决步骤如下:mysql>select*frominformation_schema.innodb_trx;mysql>SHOWFULLPROCESSLIST;mysql>kill'threadid';mysql>se
微软和开源数据库Databricks, Cassandra, MariaDB 建立“连接”
在Connect2017期间,微软与Databricks,Cassandra和其他开源项目合作,希望成为企业开发人员云提供商的首选。细数微软对开源作出的贡献。在纽约举行的Connect2017会议上微软推出了新的VisualStudio工具,期待人工智能能提供给开发人员更多的发展机会。微软继续在Connect上发布大型开源通告,宣布将通过推出新版AzureDatabricks服务(一种基于ApacheSpark的大数据分析平台)的预览版来支持开源。Microsoft承诺开源.NETCore,并加入Linux基金会。微软计划实施AzureDatabricks,企业部执行副总裁ScottGuthrie在博客中说到:“AzureDatabricks结合了Databricks和Azure的优点,通过一键安装,精简的工作流程和交互式工作空间帮助客户加速创新”。“与AzureSQL数据仓库,Azure存储,AzureCosmosDB和PowerBI的本地化集成,简化了
谈谈个人网站的建立(六)—— 数据库同步
欢迎访问我的个人网站O(∩_∩)O哈哈~希望大佬们能给个star,个人网站网址:http://www.wenzhihuai.com,个人网站代码地址:https://github.com/Zephery/newblog。先来回顾一下上一篇的小集群架构,tomcat集群,nginx进行反向代理,服务器异地:由上一篇讲到,部署的时候,将war部署在不同的服务器里,通过spring-session实现了session共享,基本的分布式部署还算是完善了点,但是想了想数据库的访问会不会延迟太大,毕竟一个服务器在北京,一个在深圳,然后试着ping了一下:果然,36ms。。。看起来挺小的,但是对比一下sql执行语句的时间:大部分都能在10ms内完成,而最长的语句是insert语句,可见,由于异地导致的36ms延时还是比较大的,捣鼓了一下,最后还是选择换个架构,每个服务器读取自己的数据库,然后数据库底层做一下主主复制,让数据同步。最终架构如下:一、MySql的复制数据库复制的基本问题就是让一台服务器的数据与其他服务
详细讲解 MySQL 数据库中的——事务
温馨提示:在「事务(上)」中,我们已经了解了如何在MySQL中开启事务,以及事务的一些基本操作。在本文中,我们将进一步学习事务的知识,包括事务原理、自动事务、回滚点和事务特性等。事务原理事务原理:在事务开启之后,所有的操作都会被临时存储到事务日志,事务日志只有在收到commit命令之后,才会将操作同步到数据表,其他任何情况都会清空事务日志,例如突然断开连接、收到rollback命令等。接下来,我们简单分析一下MySQL的操作过程:Step1:客户端与服务端建立连接,同时开启一个临时的事务日志,此事务日志只作用于当前用户的当次连接;Step2:在客户端用SQL语句执行写操作,客户端收到SQL语句,执行,将结果直接写入到数据表,并将数据表同步到数据库;Step3:我们在客户端开启事务,则服务端原来的操作机制被改变,后续所有操作都会被先写入到临时日志文件;Step4:在客户端执行SQL语句(例如写操作),服务端收到SQL语句,执行,将结果写入到临时日志文件,并不将结果同步到数据库;Step
MySQL中经典的too many connection怎么破
作者介绍兰春,58安居客资深DBA,专注于MySQL领域的运维与运营。一、什么是toomanyconnection1、重要参数max_user_connections:ThemaximumnumberofsimultaneousconnectionspermittedtoanygivenMySQLuseraccount允许的每个用户最大链接数,如果超过这个数值,则会报:ERROR1203(42000):Userdbaalreadyhasmorethan'max_user_connections'activeconnections。一般这样的报错只会出现在业务机器上,并不会在DBserver层报错,这样的话DBA就无法真正感知到错误,MySQL也非常贴心的推出了一个status供DBA查看:Connection_errors_max_connections