随笔分类 -  MySQL

摘要:背景: 目前MySQL依然只支持一个Slave从一个Master复制数据,虽然也可以做到一主多备(M->S),双主复制(M<->M)等架构,但是局限性依然很大。由于项目的要求,需要各个主库的表整合到一个地方进行统计和分析,要是每次连不同的实例操作,是一件非常耗体力的操作。所以继续一种类似多主一从的实 阅读全文
posted @ 2014-11-17 15:29 jyzhou 阅读(5735) 评论(5) 推荐(3) 编辑
摘要:一 简介: Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)。XtraBackup支 阅读全文
posted @ 2014-11-11 22:49 jyzhou 阅读(25319) 评论(0) 推荐(2) 编辑
摘要:一:背景介绍 MHA(Master HA)是一款开源的MySQL的高可用工具,能在MySQL主从复制的基础上,实现自动化主服务器故障转移。虽然MHA试图从宕机的主服务器上保存二进制日志,但并不是总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失 阅读全文
posted @ 2014-10-15 18:20 jyzhou 阅读(10990) 评论(0) 推荐(0) 编辑
摘要:背景:今天遇到一个主键范围查找的情况:select ... from tb left join tb1 on ... where tb.id between 0 and 10000id是主键,每次取10000。上面的这个查询id范围越往后面消耗的时间越久。通过id自增主键去查找数据应该不会出现这个现... 阅读全文
posted @ 2014-06-19 18:27 jyzhou 阅读(4641) 评论(0) 推荐(0) 编辑
摘要:背景: 当用Explain查看SQL的执行计划时,里面有列显示了 key_len 的值,根据这个值可以判断索引的长度,在组合索引里面可以更清楚的了解到了哪部分字段使用到了索引。 环境: 插入数据: 创建索引: 测试: 从上面的执行计划可知,索引的长度是33。比预想的30(10*3(utf8))要高出 阅读全文
posted @ 2014-06-12 18:14 jyzhou 阅读(15139) 评论(7) 推荐(3) 编辑
摘要:摘要: mysqladmin是 MySQL一个重要的客户端,最常见的是使用它来关闭数据库,除此,该命令还可以了解MySQL运行状态、进程信息、进程杀死等。本文介绍一下如何使用 mysqladmin extended-status(因为没有"歧义",所以可以使用ext代替)了解MySQL的运行状态。1. 使用-r/-i参数 使用mysqladmin extended-status命令可以获得所有MySQL性能指标,即show global status的输出,不过,因为多数这些指标都是累计值,如果想了解当前的状态,则需要进行一次差值计算,这就是mysqladmin exten 阅读全文
posted @ 2014-03-20 11:44 jyzhou 阅读(1281) 评论(0) 推荐(0) 编辑
摘要:背景: MySQL的架构中,Master-Slave是目前最受欢迎的,用的也最多,但是对于主从的延迟一般都是按照他自己的状态【Seconds_Behind_Master】来查看的,最近看了【不要用该值来衡量主备延迟】,发现用该状态值去判断主从延迟也不太靠谱。文章中也介绍了pt-heartbeat 来监控能更好的了解主从延迟时间。本文就介绍下该工具的使用方法。工作原理:1,在主上创建一张heartbeat表,按照一定的时间频率更新该表的字段(把时间更新进去)。2,连接到从上检查复制的时间记录,和从库的当前系统时间进行比较,得出时间的差异。使用方法:pt-heartbeat [OPTIONS] [ 阅读全文
posted @ 2013-12-30 16:00 jyzhou 阅读(3818) 评论(0) 推荐(1) 编辑
摘要:背景: MySQL 大字段的DDL操作:加减字段、索引、修改字段属性等,在5.1之前都是非常耗时耗力的,特别是会对MySQL服务产生影响。在5.1之后随着Plugin Innodb的出现在线加索引的提高了很多,但是还会影响(时间缩短了),主要是出现了MDL锁。不过5.6可以避免上面的情况,但目前大部分在用的版本都是5.6之前的,所以DDL操作一直是运维人员“头疼"的事。那如何在不锁表的情况下安全快速地更新表结构?现在来说明下percona-toolkit 的 pt-online-schema-change 的使用说明,可以很好的解决上述的问题。工作原理: 模仿MySQL的alter, 阅读全文
posted @ 2013-12-26 16:15 jyzhou 阅读(9457) 评论(2) 推荐(4) 编辑
摘要:本文来自:http://www.mysqlsupport.cn/linux-performance-tuning-tips-mysql/因为很多MySQL的生产环境都在Linux下,我决定指出一些Linux下跑MySQL的很重要的优化点。这些是大家都知道的,也没什么新东西,但我想在这一个blog里收集整理一下Linux相关的配置优化经验。文件系统:ext4(or xfs) mount时使用notime选项文件系统调度策略: 使用deadline or noop# echo deadline > /sys/block/sda/queue/scheduleradd "elevato 阅读全文
posted @ 2013-12-18 10:22 jyzhou 阅读(1267) 评论(0) 推荐(0) 编辑
摘要:背景: 对于MySQL的binlog的查看都是用其自带的工具mysqlbinlog进行操作的,其实还有另一个方法来操作binlog,就是Replication中的SQL线程去操作binlog,其实binlog和relaylog的格式是一样的。下面开始介绍如何用该方法进行对binlog的操作。测试1:---初始化:root@192.168.200.25 : aaa 03:51:38>reset master;Query OK, 0 rows affected (0.12 sec)root@192.168.200.25 : aaa 03:51:55>reset slave;Query 阅读全文
posted @ 2013-12-05 18:19 jyzhou 阅读(2740) 评论(2) 推荐(1) 编辑
摘要:很早之前写的文章,重新回顾和学习下,也可以看这篇文章说明。 按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ)。MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔离级别。你可以在命令行用--transaction-isolation选项,或 阅读全文
posted @ 2013-11-22 14:40 jyzhou 阅读(133265) 评论(15) 推荐(21) 编辑
摘要:数据库使用锁是为了支持更好的并发,提供数据的完整性和一致性。InnoDB是一个支持行锁的存储引擎,锁的类型有:共享锁(S)、排他锁(X)、意向共享(IS)、意向排他(IX)。为了提供更好的并发,InnoDB提供了非锁定读:不需要等待访问行上的锁释放,读取行的一个快照。该方法是通过InnoDB的一个特 阅读全文
posted @ 2013-11-21 17:55 jyzhou 阅读(86590) 评论(26) 推荐(29) 编辑
摘要:背景: 自增长是一个很常见的数据属性,在MySQL中大家都很愿意让自增长属性的字段当一个主键。特别是InnoDB,因为InnoDB的聚集索引的特性,使用自增长属性的字段当主键性能更好,这里要说明下自增主键需要注意的几个事项。问题一:表锁 在MySQL5.1.22之前,InnoDB自增值是通过其本身的自增长计数器来获取值,该实现方式是通过表锁机制来完成的(AUTO-INC LOCKING)。锁不是在每次事务完成后释放,而是在完成对自增长值插入的SQL语句后释放,要等待其释放才能进行后续操作。比如说当表里有一个auto_increment字段的时候,innoDB会在内存里保存一个计数器用来记录au 阅读全文
posted @ 2013-11-20 17:38 jyzhou 阅读(12516) 评论(4) 推荐(1) 编辑
摘要:本文来自:http://dinglin.iteye.com/blog/1976026#comments背景 客户报告了一个count(distinct)语句返回结果错误,实际结果存在值,但是用count(distinct)统计后返回的是0。将问题简化后复现如下,影响已知的所有版本。这里的 set tmp_table_size=1024; 一定是在插入前设置,这样下面的操作就是按照这个大小进行的,最终出现错误的结果,解决办法:1,开始前设置足够大的tmp_table_size(推荐);2,设置成1024,在不修改tmp_table_size 的前提下,设置 set sql_big_tables= 阅读全文
posted @ 2013-11-18 13:38 jyzhou 阅读(2055) 评论(0) 推荐(0) 编辑
摘要:MySQL在备份方面包含了自身的mysqldump工具,但其只支持单线程工作,这就使得它无法迅速的备份数据。而mydumper作为一个实用工具,能够良好支持多线程工作,这使得它在处理速度方面十倍于传统的mysqldump。其特征之一是在处理过程中需要对列表加以锁定,因此如果我们需要在工作时段执行备份 阅读全文
posted @ 2013-11-15 13:36 jyzhou 阅读(12487) 评论(4) 推荐(3) 编辑
摘要:从MySQL的Innodb特性中我们知道,Inndob的表空间有共享和独享的特点,如果是共享的。则默认会把表空间存放在一个文件中(ibdata1),当开启独享表空间参数Innodb_file_per_table时,会为每个Innodb表创建一个.ibd的文件。文章讨论在独享表空间卸载、装载、迁移Innodb表的情况。条件:2台服务器:A和B,需要A服务器上的表迁移到B服务器。Innodb表:sysUser,记录数:351781。以下测试在MySQL 5.5.34中进行。开始处理:1:在B服务器上建立sysUser表,并且执行:zjy@B : db_test 09:50:30>alter 阅读全文
posted @ 2013-11-12 14:46 jyzhou 阅读(5093) 评论(0) 推荐(0) 编辑
摘要:看完 David Jiang 大神写的 <Innodb 技术内幕 第2版> 的第2章,对Innodb有了进一步的认识,大致的总结下知识点,方便自己查阅。 第一部分:线程 Innodb是一个多线程的,各个线程负责不同的任务。主要的线程有:Master Thread、IO Thread、Purge Th 阅读全文
posted @ 2013-11-06 13:16 jyzhou 阅读(2092) 评论(2) 推荐(3) 编辑
摘要:本文来自网址: http://www.penglixun.com/tech/database/having_without_groupby_in_mysql.html 今天有同学给我反应,有一张表,id是主键,这样的写法可以返回一条记录:“SELECT * FROM t HAVING id=MIN(id);”但是只是把MIN换成MAX,这样返回就是空了:“SELECT * FROM t HAVING id=MAX(id);”这是为什么呢?我们先来做个试验,验证这种情况。这是表结构,初始化两条记录,然后试验:root@localhost : plx 10:25:10> show creat 阅读全文
posted @ 2013-10-30 11:00 jyzhou 阅读(1713) 评论(0) 推荐(0) 编辑
摘要:摘要: 死锁:是指两个或则多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,而导致恶性循环的现象;当产生死锁的时候,MySQL会回滚一个小事务的SQL,确保另一个完成。上面是死锁的概念,而在MySQL中innodb会出现死锁的情况,但是查看死锁却很不“智能”。只能通过 show engine... 阅读全文
posted @ 2013-10-28 17:18 jyzhou 阅读(3396) 评论(3) 推荐(1) 编辑
摘要:摘要:通过下面的这些命令在接触到新的数据库服务器的时候能更好更快的了解服务器和数据库的状况。1:pt-summary:查看系统摘要报告执行:pt-summary 打印出来的信息包括:CPU、内存、硬盘、网卡等信息,还包括文件系统、磁盘调度和队列大小、LVM、RAID、网络链接信息、netstat 的统计,以及前10的负载占用信息和vmstat信息。# Percona Toolkit System Summary Report ###################### Date | 2013-10-23 09:06:37 UTC (local TZ: CST +0800) ... 阅读全文
posted @ 2013-10-23 17:52 jyzhou 阅读(2424) 评论(0) 推荐(0) 编辑