Archive for the ‘MySQL’ Category

MySQL转SQLite Shell脚本

杭城焰火满天飞, 闲来无事, 给 WordPress 换上SQLite; SQLite 在单服务器10W并发以下是很有优势的, 据说可以达到mysql与postgresql的2~20倍(道听途说, 没验证)。 使用WP插件pdo for wordpress, 本来使用XML导入导出数据, 奈何文件太大, 超过php的内存限制,找了个MySQL转SQLite的教本, 很好用, 分享。
文件: mysql2sqlite.sh

编译一个适合自己的MySQL – MySQL邯郸学步

为什么需要编译MySQL ? 性能! 那么不费话 开始:

###以 MySQL 5.1.42 为例
#tar xvf mysql-5.1.42.tar.gz
#cd mysql-5.1.42/
#./configure –prefix=/usr/local/mysql51 ### 只定安装目录
–with-embedded-server –enable-assembler –with-mysqld-ldflags=-all-static –with-client-ldflags=-all-static ### 静态编译
–without-debug –without-docs –without-man –without-readline ### 舍去不必要的东东
–with-charset=utf8 –with-collation=utf8_general_ci ### 指定编码,建议使用utf8, 默认latin1
–with-extra-charsets=complex ### 添加支持的编码, 根据自己的需求指定
–enable-thread-safe-client ### 线程安全
–enable-local-infile –with-ssl –with-libwrap [...]

迁移 Innodb 共享表空间至独立表空间 – MySQL邯郸学步

关于 MySQL 中的 Innodb 引擎就不多说了, 毕竟除了MyISAM 之外, 它的应用最广泛. Innodb 存储数据有两种方式: 共享表空间 和 独立表空间. 顾名思义, 共享表空间 就是把所有数据库数据放在一个或多个文件中( 这种方式的话,使用裸设备倒是很方便); 独立表空间 就是采用和MyISAM 想同的方式, 每个表拥有一个独立的数据文件( .idb )。
在服务器资源有限,单表数据不是特别多的情况下, 独立表空间明显比共享方式效率更高. 但是MySQL 默认是共享表空间, 现在LD 来演示一下转换方法.

按照自己的方式,去度过人生!

昨晚11点, 第三次读完《明朝那些事儿》, 彻夜未眠.
LD 并不是个聪明的人, 前两次均未理解所谓历史 所谓宿命 所谓自由. 这半年, 从09年9月, 第三次读《明》, 完全不同的感受, 石悅的历史观也许是悲观的, 正如他如是说. 然, LD 是悲愤的!
可以活得唯唯缩缩, 可以轰轰烈烈, 也可平平淡淡, 人之所以为人, 就是与别个不同. 10月, LD 曾慕名前往于谦祠, 旁边帅GG 惊呼: 于谦? 谁啊? 好像以前学过… 是啊~ 我也是. 强人只是那么一瞬间, 那一刻 绽放比凡人璀璨的花火, 之后殒灭为尘秽, 清澈、汙浊平凡无异.
生活的目标 一点足矣, 开心. 礼义廉耻 忠义孝廉 儿戏 儿戏, 二十几年来, 从没有这么坚定, 从没有这么澄净. 引用《火鳳燎原》中那句话: 属于我的这个年代, 将比任何朝代来得久远!

处理三角关系MySQL数据库的备份和数据迁移

遇到这么一个情况: 数据库A 依赖数据库B, B依赖数据库C, C又依赖A. 我称之为 三角关系. 最终要完成数据结构的升级. 其实这个case中, 一共牵涉到12个数据库,为了说明清楚, 只以数据库 A B C 为例.
完成升级,包括:

保留原数据;

替换所有存储过程, 函数, 触发器, 视图;

升成必要数据, 插入配置数据;

PHP 缓存 DsCache

很简单实用的 PHP 文件缓存– DsCache, 核心的两行代码从 QeePHP 的 SVN 中扒出来的( 省去了序列化,所以速度远远快于普通文件缓存机制 );
LD 修改这个已经有一段时间了, 上星期集成到公司的某个项目中, 自己测试效果挺不错, 今天抽点世间完善一下; 星期一就能知道实际高压下的性能了 嘿嘿^_^
主页: http://code.google.com/p/dscache/

MERGE例子中的union搜索优化

在 MERGE存储引擎的简单测试 – MySQL邯郸学步 一文中,有一个Union SELECT, 极其消耗时间, 仔细分析会发现,使用的搜索条件对应字段是TIMESTAMP, 索引几乎没用. 那么我们能不能绕开时间字段,使用作为主键的自增字段object_id 呢? 就单纯示例上这种情况,是可以的. 请看下面的存储过程:

MERGE存储引擎的简单测试 – MySQL邯郸学步

大多数时候,LD都看似很闲,所以看书也无目的性。最近看关于MySQL的东西,碰到MERGE这个存储引擎,做个小测试。
我其实只想知道一样东西,用UNION就可以合并两个查询,视图也能合并两张表数据,那么MERGE在合并表的数据后是否提供优化?
LD使用的MySQL是ArchLinux软件库中的,版本5.1.39, 配置文件默认,不做任何内存参数优化(因为使用的数据是真实的,而实际服务器上,运维也使用默认设置);
这两个表2个月前因为表字段的不同,执行一个union all的select语句要 260s 之久; 经过一番优化,已经缩短为2~3s, 但随着数据的增长,执行时间也在增加。LD一直在找解决方案,这么少的数据,还没达到100W,如果不能从SQL优化角度着手,只能从Linux系统和MySQL服务的配置想办法了。 废话不多说,Let’s Go。

多条件排序- MySQL邯郸学步

通常在写SQL语句时会碰到需要对结果集进行排序,使用’order by’单个条件还行,那么多个条件怎么写? 比如:先对时间逆序,再按编号排正序。要求第二次排序不打乱对时间的排序。
1 SELECT id,name,created,action FROM tbl_jobs ORDER BY created DESC, id LIMIT 15;
如上例,直接在’order by’接第二、第三条件即可,很方便。(很久之前LD还考虑过子查询,昏.)

使用Python连接MySQL – MySQL邯郸学步

使用Python并不能直接连接MySQL, 必须安装mysql-python软件包。对于Arch, 只需要 sudo pacman -Sy mysql-python