MySQL-Binlog

MySQL GTID (三)

本小妞迷上赌 提交于 2020-10-28 12:48:18
###五.如何跳过一个GTID 环境见系列一 5.1 创建表,模拟数据 #主机上 create table t_test (id int primary key ,name varchar(10)); insert into t_test values(1,'aa'),(2,'bb'),(3,'cc'); #备机上插入一条,模拟冲突 insert into t_test values(4,'dd'); 5.2 模拟冲突 #主机上 insert into t_test values(4,'dd'); #备机上查看复制状态 show slave status \G; 5.3 通过上图,可以定位到冲突的位置,mysqlbinlog查看具体的语句 #主库上mysqlbinlog 查看相关语句 mysqlbinlog --start-position=930 --stop-position=1193 -d test --base64-output=DECODE-ROWS -v /MySQL/my3306/log/binlog/binlog.000018 5.4 基于GTID模式的复制,跳过一个事务,需要利用一个空事务。 stop slave; set GTID_NEXT='9760cb92-693e-11e8-85bf-000c29b55cf0:11'; #开启一个空事务 begin

连延迟从库都用不上了,MySQL备份还能恢复吗?

為{幸葍}努か 提交于 2020-10-18 02:39:30
​背景 首先交代一下背景,由于某些因素的限制,我们公司目前的备份策略采用的是隔天全备的方案,增量备份则使用的是binlog server的方式,那么如何快速恢复就成为了我们需要思考的问题。 正文 恢复需求 根据我以往的一些经验来说,通常需要从备份恢复数据的场景有如下几种: 被误删库了; 被误删表了,类型为TRUNCATE或者DROP; 被误删列了,类型为ALTER ... DROP COLUMN; 被误删数据了,类型为DELETE或者UPDATE或者REPLACE; 表空间损坏或出现坏块了。 根据场景来说,我们可以大致分为两类: 第一类为不可逆恢复,也就是通常的DDL,比如上述的1、2、3、5等场景; 第二类为可逆的恢复,通常可以利用binlog进行回滚(要求binlog格式为ROW,binlog_image为FULL),也就是对应上述的场景4。 对于第二类的恢复需求一般来说都比较容易处理,可以利用binlog回滚工具,例如业界比较著名的有binlog2sql以及MyFlash等,这里暂不赘述,我们重点来讨论第一类需求。 为了达到快速恢复的目的,业界DBA经常会采用的方式就是部署一个延迟从库来解决,我们公司目前所有的核心DB都部署了延迟从库。但是即便有了延迟从库,假设我们错过了延迟的时间,或者在后续利用延迟从库恢复的时候指定错了位点,导致了误删DDL同样应用到了从库

MHA报错:mysqlbinlog: unknown variable ‘default-character-set=utf8mb4’

痞子三分冷 提交于 2020-10-15 09:11:56
问题说明 进行mha的repl检测时报错: [ root@mysql02 ~ ] # masterha_check_repl --conf = / etc / masterha / app1 . cnf Tue Jun 11 11 : 32 : 42 2019 - [ warning ] Global configuration file / etc / masterha_default . cnf not found . Skipping . Tue Jun 11 11 : 32 : 42 2019 - [ info ] Reading application default configuration from / etc / masterha / app1 . cnf . . Tue Jun 11 11 : 32 : 42 2019 - [ info ] Reading server configuration from / etc / masterha / app1 . cnf . . Tue Jun 11 11 : 32 : 42 2019 - [ info ] MHA::MasterMonitor version 0.56 . Tue Jun 11 11 : 32 : 43 2019 - [ info ] GTID failover mode = 0 Tue Jun

Mysql的binlog和relay-log到底长啥样?

 ̄綄美尐妖づ 提交于 2020-10-14 16:44:09
上一篇mysql面试的文章之后收到不少朋友的意见,希望深入讲讲复制、日志的格式这些,今天,我们就来深挖一下mysql的复制机制到底有哪一些,以及binlog和relay-log的结构到底是什么样子的。 binlog作用 binlog的主要作用是记录数据库中表的更改,它只记录改变数据的sql,不改变数据的sql不会写入,比如select语句一般不会被记录,因为他们不会对数据产生任何改动。 用一个实际的场景看下binlog产生的过程,准备sql: create table test(text varchar(20)); insert into test values ('test_text'); select * from test; flush logs; 查看binlog show binlog events in 'binlog.000029'; 显示的结果如下: binlog 另外,也可以使用mysqlbinlog工具来查看binlog的内容: show variables like 'log_%'; #查看日志目录 mysqlbinlog --short-form --force-if-open --base64-output=never /usr/local/var/mysql/binlog.000029 从日志我们可以看到执行了创建表的语句以及一个Format

mysql索引原理

戏子无情 提交于 2020-10-07 05:26:00
阅读目录   初识索引   索引的原理   索引的数据结构   聚集索引与辅助索引   MySQL索引管理   测试索引   正确使用索引   联合索引   查询优化神器-explain   慢查询优化的基本步骤   慢日志管理 返回顶部 一 初识索引 为什么要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到索引了。 什么是索引? 索引在MySQL中也叫是一种“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能 非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。 索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。 索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。 你是否对索引存在误解? 索引是应用程序设计和开发的一个重要方面。若索引太多,应用程序的性能可能会受到影响。而索引太少,对查询性能又会产生影响,要找到一个平衡点,这对应用程序的性能至关重要。一些开发人员总是在事后才想起添加索引----我一直认为,这源于一种错误的开发模式。如果知道数据的使用,从一开始就应该在需要处添加索引

根据mysql数据库日志恢复删除数据

旧时模样 提交于 2020-10-03 20:46:36
BINLOG就是一个记录SQL语句的过程,和普通的LOG一样。不过只是她是二进制存储,普通的是十进制存储罢了。 1、配置文件里要写的东西: [mysqld] log-bin= mysql-bin(名字可以改成自己的,如果不改名字的话,默认是以主机名字命名) 重新启动MSYQL服务。 二进制文件里面的东西显示的就是执行所有语句的详细记录,当然一些语句不被记录在内,要了解详细的,见手册页。 2、查看自己的BINLOG的名字是什么。 show binlog events; query result(1 records) Log_name Pos Event_type Server_id End_log_pos Info yueliangdao_binglog.000001 4 Format_desc 1 106 Server ver: 5.1.22-rc-community-log, Binlog ver: 4 3、我做了几次操作后,她就记录了下来。 又一次 show binlog events 的结果。 query result(4 records) Log_name Pos Event_type Server_id End_log_pos Info yueliangdao_binglog.000001 4 Format_desc 1 106 Server ver: 5.1.22-rc

如何远程备份MySQL binlog

和自甴很熟 提交于 2020-08-18 20:56:28
以前备份binlog时,都是先在本地进行备份压缩,然后发送到远程服务器中。但是这其中还是有一定风险的,因为日志的备份都是周期性的,如果在某个周期中,服务器宕机了,硬盘损坏了,就可能导致这段时间的binlog就丢失了。 而且,以前用脚本对远程服务器进行备份的方式,有个缺点:无法对MySQL服务器当前正在写的二进制日志文件进行备份。所以,只能等到MySQL服务器全部写完才能进行备份。而写完一个binlog的时间并不固定,这就导致备份周期的不确定。 从MySQL5.6开始,mysqlbinlog支持将远程服务器上的binlog实时复制到本地服务器上。 mysqlbinlog的实时二进制复制功能并非简单的将远程服务器的日志复制过来,它是通过MySQL 5.6公布的Replication API实时获取二进制事件。本质上,就相当于MySQL的从服务器。与普通服务器类似,主服务器发生事件后,一般都会在0.5~1秒内进行备份。 备份命令 mysqlbinlog --read- from -remote-server --raw --host= 192.168 . 244.145 --port= 3306 --user=repl --password=repl --stop-never mysql-bin. 000001 解释如下: --read-from-remote-server

mysql常见问题解决

五迷三道 提交于 2020-08-17 03:32:09
日常使用mysql数据库遇到的一些问题,做下记录,会持续更新。 一、MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法 环境: linux,mysql5.6 错误: Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 原因:   同一个ip在短时间内产生太多(超过mysql数据库max_connect_errors的最大值)中断的数据库连接而导致的阻塞;默认max_connect_errors是10 解决方法: 1、提高允许的max_connection_errors数量(治标不治本):   ① 进入Mysql数据库查看max_connect_errors: show variables like '%max_connection_errors%';   ② 修改max_connection_errors的数量为1000: set global max_connect_errors = 1000;   ③ 查看是否修改成功: show variables like '%max_connection_errors%

MySQL 自带工具使用介绍

此生再无相见时 提交于 2020-08-17 02:43:53
在MySQL中,自带了许多功能比较强大的工具,如mysql、mysqladmin、mysqldump等。 1、mysql命令 Mysql命令是用的最多的一个命令工具了,为用户提供一个命令行接口来操作管理MySQL 服务器。可以通过mysql --help来查看其详细使用方法。 1)-e、-u、-p、-h、-P、 等选项的使用语法 [root@mysql ~]# mysql -uroot -p123 -h 192.168.171.135 -P3306 mysql -e "show tables;"; # 上述命令的含义如下: # -uroot:使用root用户 # -p123.com:密码是123.com # -h:登录的主机地址是192.168.20.2 # -P:登录的端口是3306 # mysql:登录到库名为mysql的库中 # -e:后面是SQL语句 # 总结:使用密码为123.com的root用户,通过3306端口连接192.168.20.2的mysql库,查询mysql库中有哪些表。 返回结果如下: 2)--prompt使用方法 [root@mysql ~]# mysql -uroot -p123.com --prompt="\\u@\\h: \\d \\r:\\m:\\s> " #上述参数解:\u 表示用户名, \h 表示主机名, \d 表示当前数据库

MySQL 5.7 update误操作后数据恢复详解

我的未来我决定 提交于 2020-08-16 03:24:59
墨墨导读: 本文详述MySQL 5.7 模拟update误操作后进行数据恢复 的全过程,希望对大家有帮助。 背景介绍 MySQL目前还没有像Oracle数据库那样强大有闪回的功能,MySQL只能通过挖去binlog日志的方法来获取数据,但是有个前提就是binlog_format必须设置成row。下面通过一个案例来演示。 注意: 严禁在生产环境测试 表结构 测试的表结构如下: CREATE TABLE `update_test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_id` varchar(20) NOT NULL DEFAULT '', `vote_num` int(10) unsigned NOT NULL DEFAULT '0', `group_id` int(10) unsigned NOT NULL DEFAULT '0', `status` tinyint(2) unsigned NOT NULL DEFAULT '1', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' , PRIMARY KEY (`id`), KEY `index_user_id` (`user_id`) USING HASH )