Submitted by yejr on 周二, 2010/06/01 - 11:37
其实很简单,就是利用正则表达式,从文件中抽取,可以用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语句
Submitted by yejr on 周五, 2010/03/19 - 09:39
如果问这样的问题,我只能说你很菜鸟,哈哈。
不过,也不能全怪你,因为mysql的默认配置确实比较差劲,也没做最基本的优化调整。
现在的服务器,即使是办公用的PC,内存也大多1~2G了吧,默认配置分配给innodb的buffer pool才8M,真是服了,多少年了,也不改改。
还有另一个害人的地方是innodb数据文件的默认大小是10M,这个一般情况下,建议至少大于256M或512M。
最后给大家一个实用的小配置:秀下我的mysql客户端配置。
Submitted by yejr on 周四, 2010/03/18 - 17:18
对MySQL的用户而言,备受诟病的一个问题就是导入SQL备份文件时不能并发,使得导入的效率很低。
今天,我们就来改变下思路,尝试一下并发导入的方法,供大家参考。
1、问题分析
想要实现并发导入,其实没那么难,最简单的思路就是:将完整的文件切分成多份,然后并发导入即可。
在这里,我自己的做法是这样的:
1) 首先,假设只有一个库;多个库的情况也是类似,无非就是循环
2) 计算SQL文件总行数
3) 计算SQL文件总大小
4) 设定每个切分文件最大尺寸
5) 初始化表结构
Submitted by yejr on 周日, 2010/03/14 - 10:09
问: 如果数据表中有时间字段,现在要迁移到其他时区的服务器上,该如何处理呢?
Submitted by yejr on 周四, 2009/10/15 - 09:33
问: 如果密码中包含反斜线,该如何处理呢?
答: 在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') |
Submitted by yejr on 周五, 2009/09/18 - 15:51
问题
环境
硬件: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个多小时才完成。
业务库为当前活动库,日志库则主要用作备份,每天日志归档,过期数据表很少有读写请求。
Submitted by yejr on 周四, 2009/07/09 - 16:15
问题:
执行 show engine innodb status\G 时,显示的信息不全,DEADLOCK相关信息太多,后面的都没了
原因:
这是mysql客户端的一个bug:BUG#19825,交互式客户端限制了输出信息最大为 64KB,因此更多的信息无法显示。
Submitted by yejr on 周五, 2009/04/24 - 10:17
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.
Submitted by yejr on 周四, 2009/04/16 - 15:32
原文参见: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的,谨慎。
Submitted by yejr on 周四, 2009/04/09 - 15:54
原文参考: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 关键字。
页面
最近评论