随笔分类 - MySQL
摘要:MySQL类型关键字后面的括号内指定整数值的显示宽度(例如,INT(11))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。所以INT(1)和INT(11)默认是没有任何区别的!!!mysql> desc t1;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+--
阅读全文
摘要:一. varchar存储规则:4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节二. ...
阅读全文
摘要:收到nagios报警,提示mysql备份失败,线上使用的是逻辑备份,也就是使用mysqldump,由于数据比较小,也就没在乎速度神马的问题。好吧,那就查查是什么原因导致备份失败,由于备份是写成脚本定时执行的,我就抽取里面mysqldump命令执行,看是否会抛什么错误,果不其然,报错如下:又想到去看看错误日志,是否有异常[root@localhost data]# tail -n 10 localhost.localdomain.err140320 140320 9:00:00 [ERROR] /usr/local/mysql-5.1.66/libexec/mysqld: Sort abor..
阅读全文
摘要:innodb_adaptive_flushing={ON|OFF}设定是否允许MySQL服务器根据工作负载动态调整刷写InnoDB buffer pool中的脏页的速率。动态调整刷写速率的目的在于避免出现IO活动尖峰。默认值为ON。作用范围为全局级别,可用于选项文件,属动态变量。innodb_adaptive_hash_index={ON|OFF}设定是否启用InnoDB的自适应hash索引。基准测试结果显示,自适应hash索引并非对所有工作负载都有益,因此需要根据实际应用场景的测试结果选择更合适的值。此特性默认已启用,可以通过命令行选项--skip-innodb_adaptive_hash_
阅读全文
摘要:autocommit={0|1}设定MySQL事务是否自动提交,1表示立即提交,0表示需要显式提交。作用范围为全局或会话,可用于配置文件中(但在5.5.8之前的版本中不可用于配置文件),属于动态变量。automatic_sp_privileges={0|1}设定MySQL服务器是否为存储例程的创建赋予其创建存储例程上的EXECUTE和ALTER ROUTINE权限,默认为1(赋予此两个权限给其创建者)。作用范围为全局。back_log=#当MySQL的主线程在短时间内收到大量连接请求时,其会花些时间检测已经有线程并为新请求启动新线程,back_log参数的值即为短时间内到达的请求中有多少可以被
阅读全文
摘要:当使用 insert...select...进行记录的插入时,如果select的表是innodb类型的,不论insert的表是什么类型的表,都会对select的表的纪录进行锁定。对于那些从oracle迁移过来的应用,需要特别的注意,因为oracle并不存在类似的问题,所以在oracle的应用中insert...select...操作非常的常见。例如:有时候会对比较多的纪录进行统计分析,然后将统计的中间结果插入到另外一个表,这样的操作因为进行的非常少,所以可能并没有设置相应的索引。如果迁移到mysql数据库后不进行相应的调整,那么在进行这个操作期间,对需要select的表实际上是进行的全表扫..
阅读全文
摘要:1.对于 MyISAM 类型的表,可以通过以下方式快速的导入大量的数据。ALTER TABLE tblname DISABLE KEYS;LOAD DATA LOCAL INFILE '/usr/share/dict/words' INTO TABLE source_words(word);ALTER TABLE tblname ENABLE KEYS;这两个命令用来打开或者关闭 Myisam 表非唯一索引的更新。在导入大量的数据到一个非空的 MyISAM 表时,通过设置这两个命令,可以提高导入的效率。对于导入大量数据到一个空的 MyISAM 表,默认就是先导入数据然后才创建索
阅读全文
摘要:innodb_flush_method这个参数控制着innodb数据文件及redo log的打开、刷写模式,对于这个参数,文档上是这样描述的:有三个值:fdatasync(默认),O_DSYNC,O_DIRECT默认是fdatasync,调用fsync()去刷数据文件与redo log的buffer为O_DSYNC时,innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件为O_DIRECT时,innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redo log首先文件的写操作包括三步:open,write,flush上面最常提到的
阅读全文
摘要:背景有同学讨论到MySQL 5.5下给大表加主键时会锁住读的问题,怀疑与fast index creation有关,这里简单说明下。对照现象为了说明这个问题的原因,有兴趣的同学可以做对比实验。1) 在给InnoDB表创建主键期间,会锁住该表上的读数据2)但是同样的表执行删除主键期间,不会锁住该表上的读操作—-这说明与是否fast index creation无关,因为这两个操作在数据层面的行为应该是类似的,实际上,创建/删除主键都必须copy data。3)在创建主键期间,会锁住该表上执行的show create table—-用1、3的现象可以猜测出,实际上与meta data lock有关
阅读全文
摘要:MySQL支持插件式存储引擎,常用的存储引擎则是MyISAM和InnoDB,通常在OLTP(Online Transaction Processing 在线事务处理)中,我们选择使用InnoDB,所以弄清楚Innodb体系架构,有助于我们更深刻的理解innodb的工作原理,以及更好的使用innodb,以及优化。从上图大致可以看到innodb有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作:1.维护所有进程/线程需要访问的多个内部数据结构。2.缓存磁盘上的数据,方便快速的读取,同时在对磁盘文件的数据修改之前在这里缓存。3.重做日志(redo log)缓冲一.后台线程的主要作用是
阅读全文
摘要:前不久去面试,被问到Innodb引擎的表如何改数据库名,当时我也只回答了MyISAM改如何操作,被一些细节问题打败,真是操蛋。如果表示MyISAM那么可以直接去到数据库目录mv就可以。Innodb完全不行,自己测试过,会提示相关表不存在。第一种方法:RENAME database olddbname TO newdbname这个是5.1.7到5.1.23版本可以用的,但是官方不推荐,会有丢失数据的危险第二种方法:1.创建需要改成新名的数据库。2.mysqldum 导出要改名的数据库3.删除原来的旧库(确定是否真的需要)当然这种方法虽然安全,但是如果数据量大,会比较耗时,哎,当时连这种方法都没有
阅读全文
摘要:本文来自david大神的博客,innodb技术内幕的作者。http://insidemysql.blog.163.com/blog/static/202834042201385190333/MySQL数据库的成功离不开其replicaiton,相对于Oracle DG和Microsoft SQL Server Log Shipping来说,其简单易上手,基本上1,2分钟内根据手册就能完成环境的搭建。然而,随着使用的深入,replication自身的问题会慢慢显露,其中非crash safe的特性使得许多DBA感到头疼,甚至不能理解其所发问题的原因。简单来说,crash-safe replica
阅读全文
摘要:先提个问题:如何不重启mysqld,且没有权限修改用户账号和权限的情况下,如何重新设置root密码?不知道没关系,在此之前我也是不知道如何操作的,先看看下面的几种重置root密码的方法。1、skip-grant-tables我们常用的方法是使用skip-grant-tables选项,mysqld s...
阅读全文
摘要:在数据库日常维护中,开发人员是最让人头痛的,很多时候都会由于SQL语句写的有问题导致服务器出问题,导致资源耗尽。最危险的操作就是在做DML操作的时候忘加where条件,导致全表更新,这是作为运维或者DBA的我们改如何处理呢?下面我分别针对update和delete操作忘加where条件导致全表更...
阅读全文

浙公网安备 33010602011771号