MySQL FAQ

MySQL FAQ
MySQL 常见问题

[MySQL FAQ]系列 -- 从dump文件中抽取部分库表

其实很简单,就是利用正则表达式,从文件中抽取,可以用awk或sed,例如:

1. 抽取数据库 imysql_1 的全部SQL语句

#假设数据库 imysql_1 的下一个是 imysql_2 
DBNAME1="imysql_1"
DBNAME2="imysql_2"
sed -n “/^-- Current Database: \`$DBNAME1\`/,/^-- Current Database: \`$DBNAME2\`/p”  imysql_20100601.sql

 

2. 抽取数据表 user_base 的全部SQL语句

技术相关:

[MySQL FAQ]系列 -- 同样默认配置,为何mysql比pgsql慢多了

如果问这样的问题,我只能说你很菜鸟,哈哈。

不过,也不能全怪你,因为mysql的默认配置确实比较差劲,也没做最基本的优化调整。

现在的服务器,即使是办公用的PC,内存也大多1~2G了吧,默认配置分配给innodb的buffer pool才8M,真是服了,多少年了,也不改改。

还有另一个害人的地方是innodb数据文件的默认大小是10M,这个一般情况下,建议至少大于256M或512M

最后给大家一个实用的小配置:秀下我的mysql客户端配置

技术相关:

[MySQL FAQ]系列 -- 新年新思想:MySQL也能并发导入数据

对MySQL的用户而言,备受诟病的一个问题就是导入SQL备份文件时不能并发,使得导入的效率很低。
今天,我们就来改变下思路,尝试一下并发导入的方法,供大家参考。
1、问题分析
想要实现并发导入,其实没那么难,最简单的思路就是:将完整的文件切分成多份,然后并发导入即可。
在这里,我自己的做法是这样的:

1) 首先,假设只有一个库;多个库的情况也是类似,无非就是循环
2) 计算SQL文件总行数
3) 计算SQL文件总大小
4) 设定每个切分文件最大尺寸
5) 初始化表结构

技术相关:

[MySQL FAQ]系列 -- 如何跨时区迁移数据

问: 如果数据表中有时间字段,现在要迁移到其他时区的服务器上,该如何处理呢?

技术相关:

[MySQL FAQ]系列 -- 账号密码包含反斜线时怎么办

问: 如果密码中包含反斜线,该如何处理呢?
答: 在mysql中,反斜线"\"是有特殊意义的,用于转义,因此如果密码中包含"\",就需要特别注意。有一种一劳永逸的办法,就是在密码中不用反斜线,哈哈。另一种,那就是需要多加几个反斜线,例如:

(root:hostname:Thu Oct 15 09:15:38 2009)[mysql]> grant usage on *.* to yejr@localhost identified by 'ye\\\jr'; 
Query OK, 0 rows affected (0.02 sec)
(root:imysql.cn:Thu Oct 15 09:16:22 2009)[mysql]> select password('ye\jr');
+-------------------------------------------+
| password('ye\jr')                         |

技术相关:

[MySQL FAQ]系列 -- 数据不算大,备份却非常慢

问题

环境
硬件:DELL 1950, 146G SAS 15K RPMS * 2, 8G Ram
软件:2.6.9-55.ELsmp x86_64, mysql 5.1.x

现象
2个库,其中1个业务库下有20多个表,表文件大小总量不到2G。
另一个为日志库,下400多个表,大致是每天会产生5个表,其中有一个表较大,约400MB,总量约40多GB。
每次备份耗时较长,最严重的一次花了5个多小时才完成。
业务库为当前活动库,日志库则主要用作备份,每天日志归档,过期数据表很少有读写请求。

技术相关:

[MySQL FAQ]系列 -- show engine innodb status显示信息不全?

问题:
执行 show engine innodb status\G 时,显示的信息不全,DEADLOCK相关信息太多,后面的都没了

原因:
这是mysql客户端的一个bug:BUG#19825,交互式客户端限制了输出信息最大为 64KB,因此更多的信息无法显示。

[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]系列 -- 如何从SQL备份文件中提取出特定库

原文参见:http://pento.net/2009/04/16/extracting-a-database-from-a-mysqldump-file/

直接用 sed 命令从一个mysqldump备份出来的标准 SQL 文件中提取出特定数据库下的所有 SQL 语句:

sed -n '/^-- Current Database: `test`/,/^-- Current Database: `/p' fulldump.sql > test.sql

上面的例子是把 test 库下所有的 SQL 语句都提取出来。
这种方法适合dump文件相对较小的情况,否则可能需要处理很长时间,而且一定不能用在线服务的机器处理,搞不好会因为内存不够用导致其他应用程序crash的,谨慎。

技术相关:

[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 关键字。

页面

Subscribe to RSS - MySQL FAQ