MySQL基础知识

MySQL基础知识,入门知识

[MySQL FAQ]系列-字符集兼容性测试

之前做过的兼容性测试结果:

infobright下如何使用utf8字符集

目前infobright应用越来越多了,有些场景下需要和台管理系统共用,因此需要同时存在brighthouse和myisam两种引擎。
这时候,如果需要brighthouse引擎支持utf8字符集,需要:
1. 数据库对象创建时务必使用utf8字符集,这点尤为关键,否则不可支持utf8;
2. 数据表对象创建时也使用utf8字符集;
3. 导入文件提前转换成utf8字符集;
4. 连接infobright时,执行set names utf8;
5. 导入文件,查看字符集是否正确;

另一种场景下,可能myisam表也需要支持utf8,这个相对比较麻烦:
1. 数据库对象创建时无所谓,不强制必须是utf8;
2. 数据表对象创建时务必使用utf8字符集;
3. 将导入文件全部转换成utf8字符集的INSERT语法,直接写入数据,infobright不支持LOAD DATA INFILE方式导入utf8字符集的文件;
4. 也可以将其他非字符型字段导入后,再用update进行更新;

TPCC-MySQL使用手册

一、 下载工具包
Tpcc-mysql是percona基于tpcc衍生出来的产品,专用于mysql基准测试,其源码放在bazaar(Bazaar是一个分布式的版本控制系统,采用 GPL 许可协议,可运行于 Windows、GNU/Linux、UNIX 以及 Mac OS 系统之上。Bazaar 由 Canonical 公司(Ubuntu母公司)赞助)上,因此还需要先安装bazaar客户端。

使用root安装rpm包

rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

然后就可以开始安装bzr客户端了:

yum install bzr 

之后,就可以开始用bzr客户端下载tpcc-mysql源码了。

cd tmp
bzr branch lp:~percona-dev/perconatools/tpcc-mysql

二、编译安装
编译非常简单

cd /tmp/tpcc-mysql/src
make

然后就会在 /tmp/tpcc-mysql 下生成 tpcc 命令行工具 tpcc_load 、 tpcc_start

[MySQL FAQ]系列-关于设置innodb buffer pool size

按照惯例,如果前端应用程序采用长连接的话,那么innodb buffer pool最高可设置为物理内存大小的80%。
不过部分在线DB由于并发连接数较高,每个线程分配的内存较多,或由于业务上升,并发事务数突然较大幅度提升,加上innodb buffer pool较大,导致了严重的内存交换(swap)发生。

鉴于此,我们建议在这些活跃度较高/并发连接数较高的在线DB服务器上,适当调低innodb buffer pool的大小(例如先调低为60%),
同时也适当调低各线程级别的内存参数,例如:tmp_table_size, sort_buffer_size等,避免因为内存交换而影响服务器性能。尤其是 tmp_table_size,不少人以为是全局变量,设置的非常大,甚至见过一个设置为 1GB 的,太吓人了。

如果绝大多数引擎是InnoDB的话,建议调低key_buffer_size到很小的值,同时可以关闭query cache,现在它基本是个鸡肋了,有些时候甚至还会导致性能受到影响。

[MySQL FAQ]系列-关于连接MySQL报错lost connection 和 gone away

一般频繁出现的话,才需要关注,一天出现几次属于正常情况。
频繁出现的原因一般有:
1. 网络,包括网络质量,服务器网卡驱动,程序连接数据库方式:ODBC/API,都是有区别的;这里的网络问题,可能出现在客户端,也可能出现在服务端
2. 如果使用ODBC的话,还需要注意部分ODBC版本可能存在bug,导致有问题
3. 服务端自身问题,例如mysqld不稳定,连接数超限,或者连接超时,或者由于dns反解析的问题导致连接异常
4. 其他问题,自己发挥吧 O(∩_∩)O哈哈~

[MySQL FAQ]系列-net_buffer_length选项对数据备份及恢复影响

有一次和朋友讨论到 net-buffer-length 可能对mysqldump导出及恢复有影响,对此测试了一下,发现影响很小,基本可以忽略不计,下面是对比测试结果。

说明:执行mysqldump时,net buffer length的最大上限是16Mb,默认值是1Mb,下面是测试结果贴图:

从上面的对比结果可以看出来,该选项的调整对导出所需时间影响不大,仅对导出文件有一定影响,但也很小;同样地,对数据恢复的影响也很小。

[MySQL FAQ]系列 -- 用mysqlslap进行压力测试

mysqlslap是官方提供的压力测试工具之一,官方介绍如下:

mysqlslap is a diagnostic program designed to emulate client load for a MySQL server and to report
the timing of each stage. It works as if multiple clients are accessing the server. mysqlslap is
available as of MySQL 5.1.4.

[MySQL FAQ]系列 -- 利用tcpdump简易抓取MySQL Query Log

原文参考:http://www.davidodwyer.com/category/tags/tcpdump-mysql

#!/bin/bash
tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e '
while(<>) { chomp; next if /^[^ ]+[ ]*$/;
if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL)/i) {
if (defined $q) { print "$q\n"; }
$q=$_;
} else {
$_ =~ s/^[ \t]+//; $q.=" $_";
}
}'

可以根据自己的需要稍微改改,我在这里只增加了对 CALL 关键字。

[MySQL FAQ]系列 -- Linux命令行下快速监控mysql

其实很简单,就是利用linux下的 watch 工具来做监控,方法如下:

[yejr@localhost imysql]# watch -d -n 10 "egrep 'MySQL thread|Log|Modified db pages' innodb_status.3249 "     
Every 10.0s: egrep 'MySQL thread|Log|Modified db pages' innodb_status.3249                                               Thu Apr  9 10:01:12 2009

[MySQL FAQ]系列 -- 如何快速比较查询结果是否一致

原文参考:http://www.xaprb.com/blog/2009/03/25/mysql-command-line-tip-compare-resu...

利用mysql客户端的pager功能即可:

mysql> pager md5sum -
PAGER set to 'md5sum -'
mysql> select * from user;
b20bd3864962507e2e05cd8706440ffd  -
3 rows in set (0.00 sec)
mysql> select * from user;
b20bd3864962507e2e05cd8706440ffd  -
3 rows in set (0.00 sec)
mysql> select * from user;
b20bd3864962507e2e05cd8706440ffd  -
3 rows in set (0.00 sec)

还不错吧,哈哈

页面

Subscribe to RSS - MySQL基础知识