为了做sphinx搜索的分词库, 收罗了一堆词库,然后打算排重提出来,入库以后发现123万多的记录。 再网上寻找mysql 排重的方法, 找了很多都是使用sql命令去select 然后delete .效率很差。 偶尔在台湾人的网站看到这么条语句。使用以后。效率非常高啊。 50万重复数据几秒钟就被清掉了。 帅啊。特记录如下 ALTER IGNORE TABLE dict ADD UNIQUE INDEX(content);
Browsing the archives for the mysql category
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的架构如下:
14.6 数据切分与整合中可能存在的问题 数据切分与整合中可能存在的问题 数据切分与整合中可能存在的问题 数据切分与整合中可能存在的问题这里,大家应该对数据切分与整合的实施有了一定的认识了,或许很多读者朋友都已经根据各种解决方案各自特性的优劣基本选定了适合于自己应用场景的方案,后面的工作主要就是实施准备了。 在实施数据切分方案之前,有些可能存在的问题我们还是需要做一些分析的。一般来 说,我们可能遇到的问题主要会有以下几点: ◆ 引入分布式事务的问题; ◆ 跨节点 Join 的问题; ◆ 跨节点合并排序分页问题;
可能很多读者朋友在网上或者杂志上面都已经多次见到关于数据切分的相关文章了, 只不过在有些文章中称之为数据的 Sharding 。其实不管是称之为数据的 Sharding 还是数据的切分,其概念都是一样的。简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。 数据的切分同时还可以提高系统的总体可用性,因为单台设备 Crash 之后,只有总体数据的某部分不可用,而不是所有的数据。 数据的切分( Sharding )根据其切分规则的类型,可以分为两种切分模式。 垂直(纵向)切分: 一种是按照不同的表(或者 Schema )来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分; 水平(横向)切分: 另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。
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 中主要的 “线程独享内存” 的。
mysql服务器为主-从配置时,发现从MySQL Slave未和主机同步,查看Slave状态: mysql> show slave statusG Slave_IO_Running: Yes Slave_SQL_Running: No Last_Errno: 1062 …. Seconds_Behind_Master:NULL 原因: 1.程序可能在slave上进行了写操作 2.也可能是slave机器重起后,事务回滚造成的.