作者:Coralzd 博客:http://www.freebsdsystem.org 论坛:http://www.linuxtone.org (IT运维专家网|集群架构|性能调优) 欢迎转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 文档版本 V1.4 最后修改: 2010.6.10 09:33 FreeBSD简介: FreeBSD,是AT&T的后裔间接通过Berkeley Software Distribution(BSD)伯克利软件发行版UNIX,其漫长而动荡的历史可以追溯到1993年。不同于Linux发行版,这被定义为集成 Linux内核和数以千计的应用软件组成的解决方案,FreeBSD是一个紧密集成的操作系统基于BSD kernel和所谓的“userland(用户建造)”(因此,甚至没有额外的扩展程序)。发行版巨大失去了在普通电脑系统安装的机会 ? 像许多Linux发行版本,一个易于安装的(大部分)开放源码的应用扩展提供了FreeBSD的核心,但这些通常是由第三方捐助者提供的和不严格的 FreeBSD的一部分。
Browsing the archives for the mysql tag
1、MongoDB MongoDB是一款开源,高性能,可扩展,无模式,面向文档(与JSON类似的数据模式)的数据库,它为时下最流行的编程语言提供了驱动,如PHP,Python,Perl,Ruby,JavaScript,C++等,支持全文索引,自动分片,跨LAN或WAN扩展,采用Key/Value方式存储数据。MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用。世界上最大的单词收录网站Wordnik就从MySQL转向了MongoDB。 http://www.mongodb.org 2、Hypertable Hypertable是一款高性能分布式数据存储系统,旨在为应用程序提供最好的性能,可扩展性和可靠性,它建立在Google的BigTable之上,主要面向大规模数据集应用,其目标是要成为世界上最好的大规模并发高性能数据库平台。百度目前也使用了Hypertable,也是它的赞助商。
为了做sphinx搜索的分词库, 收罗了一堆词库,然后打算排重提出来,入库以后发现123万多的记录。 再网上寻找mysql 排重的方法, 找了很多都是使用sql命令去select 然后delete .效率很差。 偶尔在台湾人的网站看到这么条语句。使用以后。效率非常高啊。 50万重复数据几秒钟就被清掉了。 帅啊。特记录如下 ALTER IGNORE TABLE dict ADD UNIQUE INDEX(content);
1. 安装 下载已经编译好的安装包,或者预编译安装包均可,在这里,使用预编译版本。 [@s1.yejr.com ~]# tar zxf mysql-proxy-0.6.0-linux-rhas4-x86.tar.gz [@s1.yejr.com ~]# cd mysql-proxy-0.6.0-linux-rhas4-x86 #可以看到有2个目录 [@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# ls sbin share [@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# mv sbin/mysql-proxy /usr/local/sbin/ [@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# ls share mysql-proxy tutorial-constants.lua tutorial-packets.lua tutorial-rewrite.lua tutorial-warnings.lua tutorial-basic.lua tutorial-inject.lua tutorial-query-time.lua tutorial-states.lua #将lua脚本放到/usr/local/share下,以备他用 [@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# mv share/mysql-proxy /usr/local/share/ #删除符号连接等垃圾代码 [@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# strip /usr/local/sbin/mysql-proxy
集群采用master/slave的方式实现,好像大部分都是配一个master多个slave mysql的负载均衡有mysql_proxy实现 mysql_proxy作者的实现方案 proxy-server有一个连接池,将读操作和写操作分离开来,也就是传说中的读写分离 这个配置起来很简单,在proxy上面运行 #mysql-proxy –proxy-read-only-backend-addresses=192.168.50.8:3306 –proxy-backend-addresses=192.168.50.38:3306 –proxy-lua-script=/etc/mysql/mysql.lua 其中–proxy-read-only-backend-addresses=192.168.50.8:3306可以设置多个。 写数据库操作192.168.50.38 读数据库操作192.168.50.8 最后面的配置是实现读写分离的脚本
mysql的单点一直是一个让人很烦恼的事情,特别是master的单点。 现在外面的解决方案主要如下: 双master方案,heartbert(HA)+rhcs(分布式文件系统),heartbert(HA)+DRBD. 双master存在的问题是master有2个IP,这样意为着前端需要指向2个的masterIP,同时bin-log也是双向同步的,会不会比单向同步的量更多呢? 第二种方案是挺不错的,但是必须要分布式文件系统,要是实在不行就可以用NFS来代替,但是这样存在的问题就是数据文件是单点,所以必须使用分布式文件系统。 第三种是关键是DRBD,这个是在网络层做RAID1,在A机器上收到数据后DRBD会写到本地硬盘上,同时通过网络传输到另外一台机器上。这样保证了2台机器的一致。特别是DRBD传输的时候有多种协议可以选择,但是一般看到网上大家都是使用协议C(C表示收到远程主机的写入确认后,视为写入完成) DRBD的架构如下:
I. Strict Mode阐述 根据 mysql5.0以上版本 strict mode (STRICT_TRANS_TABLES) 的限制: 1).不支持对not null字段插入null值 2).不支持对自增长字段插入”值,可插入null值 3).不支持 text 字段有默认值 看下面代码:(第一个字段为自增字段) $query=”insert into demo values(”,’$firstname’,’$lastname’,’$sex’)”; 上边代码只在非strict模式有效。 $query=”insert into demo values(NULL,’$firstname’,’$lastname’,’$sex’)”; 上边代码只在strict模式有效。把空值”换成了NULL. II.让数据库支持Strict Mode 1.对数据库结构进行以下改进来支持strict mode: 1) 给所有not null字段都设置非null默认值,字符串默认值为 ”,数值默认值为 0,日期默认值为 ’0000-00-00 00:00:00′ 2) 去掉text字段的默认值 3) 规范化改进: 把 title 字段统一改为 varchar(255),把有默认值的null字段改为not null字段 2.如果安装的PHP程序数据库结构关闭Strict mode 1).一个是安装mysql5.0(含以上)版本的时候去掉strict mode。 编辑 my.cnf,关闭Strict Mode: sql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION” 2). [...]
可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺: mysql> show status like ‘Table%’; +—————————-+———-+ | Variable_name | Value | +—————————-+———-+ | Table_locks_immediate | 105 | | Table_locks_waited | 3 | +—————————-+———-+ 2 rows in set (0.00 sec) 如果Table_locks_waited的值比较高,则说明存在着较严重的表级锁争用情况。这时,需要我们对应用做进一步的检查,来确定问题所在。 Table_locks_immediate 指的是能够立即获得表级锁的次数,而Table_locks_waited指的是不能立即获取表级锁而需要等待的次数。如果 Table_locks_waited的值比较大的话,并且你遇到了性能问题,你可能希望将大表切分成小表;例如,你可以为一个定制模块创建一个专有的缓存(cache)表,或者通过其它方式来减小表的大小,或者降低表级锁命令调用的频率。对于一些表,比如cache_*,Watchdog, 和 accesslog表,减少表的大小的一种方式是减少数据的生命周期。
对于任何一个数据库管理系统来说,内存的分配使用绝对可以算的上是其核心之一了,所以很多希望更为深入了解某数据库管理系统的人,都会希望一窥究竟,我也不例外。 从内存的使用方式MySQL 数据库的内存使用主要分为以下两类 * 线程独享内存 * 全局共享内存 今天这篇文章暂时先分析 MySQL 中主要的 “线程独享内存” 的。
服务器生成的二进制日志文件写成二进制格式。要想检查这些文本格式的文件,应使用mysqlbinlog实用工具。 应这样调用mysqlbinlog: shell> mysqlbinlog [options] log-files… 例如,要想显示二进制日志binlog.000003的内容,使用下面的命令: shell> mysqlbinlog binlog.0000003 输出包括在binlog.000003中包含的所有语句,以及其它信息例如每个语句花费的时间、客户发出的线程ID、发出线程时的时间戳等等。 通常情况,可以使用mysqlbinlog直接读取二进制日志文件并将它们用于本地MySQL服务器。也可以使用–read-from-remote-server选项从远程服务器读取二进制日志。 当读取远程二进制日志时,可以通过连接参数选项来指示如何连接服务器,但它们经常被忽略掉,除非你还指定了–read-from-remote-server选项。这些选项是–host、–password、–port、–protocol、–socket和–user。