随笔分类 - mysql
摘要:mk-table-sync是maatkit里的一个同步主从数据库的利器,执行同步过程中,会同步DELETE,REPLACE,INSERT,UPDATE语句,mk-table-sync把包含前面几个的语句都执行一遍,举个例子来说,主从库上都有:a表,主库上的数据如下:id name1 aa2 bb3 cc4 dd5 ee6 ff从库上的数据如下:id name1 aa2 bb3 hh4 gg5 ee那么mk-table-sync会执行3条语句,同步"6 ff"添加到从库,更新"3 cc","4 gg"到从库,一共3条语句,而不是我们
阅读全文
摘要:有一些应用程序需要存放一些临时数据,这时候临时表似乎是一个很好的选择,但是内存表在主从数据库上表现却不那么好。 原因很简单,无论是基于STATEMENT还是基于ROW复制,都要在二进制日志中包含改变的数据。这就要求在主从机上数据必须一致。当重启从库的时候,你就会丢失内存表的数据,复制中断。 我们该怎么办呢?1.使用Innodb表代替innodb表非常快,能满足我们对性能的需求。2.在复制中忽略内存表如果不是非常有必要的话,忽略复制内存表,使用这个选项replicate-ignore-table=db.memory_table。我们需要注意的是:STATEMENT复制,不要使用insert ..
阅读全文
摘要:“内存表”顾名思义创建在内存中的表,真是这样吗?其实不然,MySQL的内存表,表结构创建在磁盘上,数据存放在内存中,所以当MySQL启动着的时候,这个表是存在的,数据也是存在的,如果用户有查看这个表的权限,在所有会话里面,都可以访问这个内存表的数据;当MySQL重启后,数据消失,结构还存在。内存表的创建:CREATE TABLE test( id int(10), num int(10)) ENGINE=MEMORY DEFAULT CHARSET=utf8;查看是否创建成功:show tables;使用完内存表后,如果我们想释放掉占用掉的内存,可以有两种方法:-- 删除数据delete f.
阅读全文
摘要:在不知道mysqlcheck之前,移动了一台服务器上的数据库,到另一台服务器上,想看看哪个表被损坏了,不想在命令行一个一个执行,下面是我写的脚本#!/bin/bashpass="123456" #root's passworddata_path="/home/mysql" #mysql's datadircd $data_pathfor f1 in $(ls)do if [ -d $f1 ];then if [ "mysql" != "$f1" -a "test" != &quo
阅读全文
摘要:从昨天开始,我开始对MySQL进行监控,发现时不时的会出现感觉很奇怪,MySQL的配置文件里,配置禁止域名解析了--skip-name-resolve,详情查看mysql是怎样使用dns的,google一翻,有说这是MySQL的一个bug,但是我的数据库版本不在里面说的之列,这篇文章安定了我的心。“unauthenticated user”的意思是由一个客户端发起的连接,但是这个客户端用户还没有被认证。这种情况一般在系统负载比较高或者mysql比较繁忙的时候遇到。此外在show processlist里还有几个User用户,比较常见的就不说了1.system user它指的是没有客户端线程,由
阅读全文
摘要:1.单个key_buffer的大小不能超过4G,如果设置超过4G,就有可能遇到下面3个bug:http://bugs.mysql.com/bug.php?id=29446http://bugs.mysql.com/bug.php?id=29419http://bugs.mysql.com/bug.php?id=57312.建议key_buffer设置为物理内存的1/4(针对MyISAM引擎),甚至是物理内存的30%~40%,如果key_buffer_size设置太大,系统就会频繁的换页,降低系统性能。因为MySQL使用操作系统的缓存来缓存数据,所以我们得为系统留够足够的内存;在很多情况下数据要
阅读全文
摘要:当WEB服务器负载高的时候,经常会出现这种错误,原因:MySQL默认connect_timeout是5秒,超过了这个时间MySQL的server端就会返回“Bad handshake”。解决办法:1.大多数时候设置"set global connect_timeout=60"是可以解决问题的;我们可以通过执行“SHOW STATUS LIKE 'aborted%'”,可以观察到Variable_nameValue Aborted_clients6Aborted_connects15010觉得是否要增加connect_timeout的时间,"Abor
阅读全文
摘要:转自老王的博客前些天说了一下如何修复损坏的MyISAM表,可惜只会修复并不能脱离被动的境地,只有查明了故障原因才会一劳永逸。如果数据库服务非正常关闭(比如说进程被杀,服务器断电等等),并且此时恰好正在更新MyISAM表,那么发生损坏的概率就比较大。今天我要说的是另一种情况:频繁的打开关闭MyISAM表文件造成MyISAM表损坏。什么时候会出现频繁的打开关闭MyISAM表文件的情况呢?先查看当前系统的table_cache设置,它的作用就是缓存表文件描述符,降低打开关闭表的频率,如果这个参数设置得过小,那么很快就会被占满,再有新请求过来的时候,就不得不关闭一些已打开的表以便为新请求腾出空间,从而
阅读全文
摘要:在我们的意识里,通常增大table_cache,尽量使打开的表句柄在缓存中,mysql能更快地响应操作,但是当我增大table_cache后,cpu增大了很多,查资料发现,table_cache并不是越大越好,因为mysql只有一个全局锁来控制打开和关闭表,也就是说无论有多少个线程在并行执行,只有一个线程可以打开或关闭表,这也就会出现很多死锁,别的线程等待那个全局锁,相应地增加了cpu的消耗,延长了其他链接线程执行sql的时间,降低系统性能,所以在保证table_cache够用的情况下,尽量保持table_cache足够小,但是这个度怎么把握,我也没有一定的尺度,还得再学习。参考资料:关于t.
阅读全文
摘要:判断字段是否存在的方法总结如下:1.查找系统表select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME from information_schema.COLUMNS where COLUMN_NAME='uu';2.使用describedescribe cdb_posts first存在第一列返回字段的名称,不存在就返回null,删除方法:如果删除的时候涉及的表不多的话,直接:alter table tb_name drop column col_name;多的话,可以使用下面的方法:存储过程删除[代码]
阅读全文
摘要:下面这些方法在我虚拟机上做的测试,内存384M,交换分区1024M, test共300W数据,重复记录3.5W,需求如题目所示,表结构如下:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->CREATEDATABASE/*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `test`;/*Table structure for table `test`
阅读全文
摘要:在原来公司,大部分需求和设计都是程序员上网调研的,领导拍板,我属于“听话”那一种类型的人,领导让干啥就干啥,现在这个公司挺好,有专门的策划小组,所有需求都是由策划出,在我的观念里,一切听策划的,所以在数据库优化的时候,我的思路很窄,单单优化sql,建索引,优化服务参数,今天看"MySQL高性能"提到“有时必须超越开发人员的身份,质疑手头的商业需求。通常撰写商业需求的人都不是数据库系统的专家,他们不会理解这些需求对性能的影响。如果告诉他们一个小小的特性会使硬件需求翻倍,他们也能理解并不是非得要这个特性”,我就缺乏这种质疑的态度,以后注意,要慢慢培训全局观和质疑的态度。
阅读全文
摘要:在存储过程中,调用:[代码]出现题目中的错误,原因如下:在mysql中多表联合删除时,表别名只能在sql中表关联部分声明。我们应该避免不是表关联部分声明别名,因为这产生歧义的sql,从而产生不是期望的结果,例如在错误的表中删除行,举个例子来说:[代码]对于多个表的删除,表的列表中提到的表别名的引用,使用默认数据库,除非已经明确地指定了一个数据库。例如,如果默认数据库是db1,下面的语句将不会工作,因为不确定的别名a2被认为已经有了db1:[代码]除了默认数据库外,为了正确地匹配表的别名,我们必须明确地指定正确的数据库的名字,[代码]根据上述理论,我的sql应该这样写:[代码]还有需要注意的是:
阅读全文
摘要:· max_allowed_packet 包或任何生成的/中间字符串的最大大小。这个过程大部分发生在load data file中,有时也发生在update,insert中。 包消息缓冲区初始化为net_buffer_length字节,但需要时可以增长到max_allowed_packet字节。该值默认很小,以捕获大的(可能是错误的)数据包。 如果你使用大的BLOB 列或长字符串,你必须增加该值。应同你想要使用的最大的BLOB一样大。max_allowed_packet的协议限制为1GB。这个值必须是1024的倍数;如果不是1024倍数的值,mysql就会自动四舍五入为最接近的1024的倍数。
阅读全文
摘要:先说下tmp_table_size吧:它规定了内部内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下,默认:mysql show variables like "tmpdir";+---------------+-------+| Variable_name | Value |+---------------+-------+| tmpdir | /tmp/ | +---------------
阅读全文
摘要:默认情况下,如果使用[代码]导出的只是全局权限,要想查看每个用户的具体权限,要使用[代码]如果要想导出所有的用户权限呢?应用场景--数据库迁移,使用下面的脚本(在国外网站看到)[代码]
阅读全文
摘要:最近在优化mysql,其中很多人都在配置文件中添加了thread_concurrency,大多数人给出的描述是:“设置thread_concurrency的值的正确与否, 对mysql的性能影响很大, 在多个cpu(或多核)的情况下,错误设置了thread_concurrency的值, 会导致mysql不能充分利用多cpu(或多核), 出现同一时刻只能一个cpu(或核)在工作的情况。thread_concurrency应设为CPU核数的2倍. 比如有一个双核的CPU, 那么thread_concurrency的应该为4; 2个双核的cpu, thread_concurrency的值应为8.”具
阅读全文
摘要:进入maatkit的官网可以赫然看见,和醒目的人头型logo,当初不明白,给别人推荐的时候也经常拼写错,查了一些原来是maat和kit的组合,maat是埃及的真理正义之神,kit是工具箱的意思,怪不得logo是埃及人头型了,很有意思。全面的介绍大头刚翻译过来了,如果想研究,请参考官网文档。
阅读全文
摘要:昨天有位同事说,他的网页查询过程中发现普通索引和唯一索引的效率是有差别的,普通索引比唯一索引快,今天在我的虚拟机中布置了环境,测试抓图如下:抓的这几个都是第一次执行的,刷了几次后,取平均值,效率大致相同,而且如果在一个列上同时建唯一索引和普通索引的话,mysql会自动选择唯一索引。谷歌一下:唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(log n)。补充下概念:1、普通索引 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列
阅读全文
摘要:[代码]上次说到用 OPTIMIZE TABLE 优化 mysql 表,这次就用到了,一个一个修复太麻烦,就写了一个脚本,挺简单的,省了很多事具体步骤:1.输入MySQL的root密码2.输入MySQL数据文件的全路径3.优化日志是/tmp/optimize.log4.剩下的就不用管了:)[代码]一般优化表后的提示是OK,如下: Table Op Msg_type Msg_text dashi.hx_focus optimize status OK 如果在日志里发现:2010年 11月 11日 星期四 19:13:18 CSTTable Op Msg_type Msg_texttool.re
阅读全文

浙公网安备 33010602011771号