Archive

Posts Tagged ‘mysql’

i cannot find any free sql documentation tool

June 26th, 2009 Leon Tsang 2 comments

最近,需要给 MySQL 数据库做一个说明文档,想仿照 http://codex.wordpress.org/Database_Description 页面中的 Table Overview 和 Detail 样式用软件自动生成(在 Google 上发现此类软件大多叫做 sql documentation tool)。

只是我找了两天都没有发现合适的软件,很多都只适用于 Oracle、SQL Server、JDBC 数据库,针对 MySQL 而开发的很少,有几个也是属于商业软件,例如 Dbscribe for MySQL 之前也有免费的 1.1 版本,可惜找到的几个网上链接都是指向其官方网站,而其官方网站早就狡猾地把标明为 dbcrim11.zip 文件中的内容更改为 1.3 的商业版本,更可气 的是在Vista中试用时根本就无法连接 MySQL 数据库。

百度上也看到有用 Word VBA 开发了相关的 MySQL 数据库结构自动文档化工具。,但我不愿为了此而安装盗版的 Office 软件(正版的我作为个人用户消费不起,如果公司能购买的话我不介意使用)。

看来这次我想偷懒的想法泡汤了,可惜正版的 Dbscribe for MySQL 售价 39美元,显然不符合咱的消费水平,如果换成人民币且能在 Vista 环境下使用,我可以掏出钱来购买这一软件。

其网址为 http://www.leadum.com.nyud.net/product.php?prod_id=4 ,需要翻墙才能访问,网监处的人脑子真是坏了,连这种网站都被屏蔽了…

DBScribe 1.3 for MySQL
Product summary

MySQL database documentation tool that creates precise technical documentation of every detail of a database schema within a moment.

DBScribe prevents your staff from long routing documenting work and synchronization with database changes, gives you team members precise database documentation, increases your customer satisfaction with complete, professional looking database description.

DBScribe supports wide range of output formats (Microsoft HTML Help format (CHM), single HTML, multiple file HTML site and Microsoft Word document), rich set of features to customize you documentation, all SQL objects documenting, wizard and command line interface.


惊喜的发现,原来在 phpMyAdmin 的导出文件类型中选择 Open Document Text 或 Microsoft Word 2000 就可以达到我的要求了,我之前只试过 SQL,CSV,Open Document Spreadsheet,PDF 这几种类型后就放弃了。
如下图:
Read more…

mysql 5.0 to mysql 5.1

May 19th, 2009 Leon Tsang No comments

我本机测试是安装的 mysql 5.1 , 但 centos 服务器上确是使用的 mysql 5.0 ,  平时没发现差别, 但最近在用 phpMyAdmin sql 文件导入导出时发现了, 一点小小差别.

主要是在处理到索引语句时出现了不兼容的情况, 比如下面语句是在 mysql 5.1 导出的:
KEY `index_2` (`datatype`,`stime`,`line`,`mcode`) USING BTREE

如果想导入到 mysql 5.0 则调整 USING BTREE 这类指定索引类型语句的位置到中间, 为:
KEY `index_2` USING BTREE (`datatype`,`stime`,`line`,`mcode`)   

import chinese data into mysql from mssql

May 8th, 2009 Leon Tsang No comments

从网上知道了可以使用 mysqldump, 但在我的vista 下连 mysql shell 都无法进入, 所以这种方法忽略, 但用过MySQL Query Browser 和 MySQLAdmin 我都可以执行 sql 语句, 所以我的方法是:

1. 把 mssql( ms sqlserver 2000 )中的数据导出为 csv;

2. 把 csv 用 notepad++ 从 ansi 转码为 utf-8;

3. 在mySQLQueryBrowser 中运行下面指令;

use plc;
truncate table `sys_i18n`;
LOAD DATA LOCAL INFILE ‘d:/dd.csv’ INTO TABLE `sys_i18n` CHARACTER SET utf8 FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘”‘ LINES TERMINATED BY ‘\r\n’;
select * from `sys_i18n`;

ps: plc数据库默认编码也都是设置的 utf8 .

hmailserver error and mysql study log

May 6th, 2009 Leon Tsang No comments

这些天只要是工作时间 hmailserver 总会出现只能接收外部邮件但无法收发邮件的情况,  错误日志的描述是:
“ERROR”    1800    “2009-05-05 07:13:50.390″    “Severity: 2 (High), Code: HM4208, Source: Thread::ThreadFunc, Description: An error occurred while running thread.  Returning thread to pool. Error number: 10060, Description: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。”

我一直在 hmailserver  上查找原因, 升级啊, 优化啊, 做了好多遍也没起作用. 因为其他服务mysql 和 apache 在我看了网站访问没问题, 他们也应该没问题才对.

我突然意识到一个问题,也许是由于垃圾邮件的缘故导致 mysql 并发连接数超限, 使得 hmailserver 认为 mysql 服务断开了.

仿照我 centos 中的设置, 在另一个子公司的此邮件和网站服务器 windows 2003 上设置 apache 的分页日志参数为:
ErrorLog   “|d:/xampp/apache/bin/rotatelogs.exe d:/logs/zuolo_Error_%Y%m%d.log 2M”
CustomLog   “|d:/xampp/apache/bin/rotatelogs.exe d:/logs/zuolo_access_%Y%m%d.log 864000″   common

并且发现之前服务器上的 mysql 没有输错误日志, 故在 my.cnf 中添加参数:
log_error=”d:/mysql_error.log”

这样以后 hmailserver错误出现时, 我就可以对照看看 mysql 当时是不是也出现问题了.

在服务器上使用 mysql administrator 查看 Heal 功能中的 Status Variables 和 System Variables 情况, 发现现在都深夜了, 视图连接到 mysql 的次数是 513, 而系统默认最大的连接数只有100, 不过已用的连接只有8, 就是不知道高峰期会达到多少. 如果没有安装软件可以登录 mysql 控制台后, 用命令 SHOW VARIABLES LIKE ‘%conn%’; 和 SHOW STATUS LIKE ‘%conn%’; 来查看系统和当前参数情况, 使用命令 show full processlist 则可以查看当前进程/有哪些mysql连接/有哪些数据库在使用.

一般情况下100个最大连接应该足够了, 但我发现代码操作超时参数的 wait_timeout 和 interactive_timeout  都值为 28800 , 也就是8个小时, 时间太长了, 这样如果有很多坏的连接就会导致mysql 超过连接上限了.

还有一个参数 max_connect_errors 是用来统计某个主机的错误链接的, 一旦超过将阻止它, 我想这个参数才是真正导致 hmailserver 无法访问 mysql 的原因吧.  如果是这个原因的话, 可以通过 运行 flush hosts; 来清空被 mysql 阻止的主机缓存.

又看到一个重要的参数 back_log 设置突发连接, 如果邮件服务器突然收到大量垃圾邮件, 则会导致突发连接过多, 也可能是这个参数, 默认值为 50 , 建议更改为500.

下面我对 my.cnf 优化后的参数:

back_log=512
interactive_timeout=512
max_connect_errors=1024
max_connections=1024
wait_timeout=512
key_buffer_size=256M
query_cache_size=128M
myisam_sort_buffer_size=128M
read_buffer_size=16M
read_rnd_buffer_size=16M
sort_buffer_size=32M
table_cache=512
thread_cache_size=80
join_buffer_size=8M

参考资料如下:

5.1.3. Server System Variables

http://dev.mysql.com/doc/refman/6.0/en/server-system-variables.html#sysvar_myisam_max_sort_file_size

MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔

http://blog.sina.com.cn/s/blog_45a590db0100c0c8.html

优化mysql性能的十个参数的详细介绍

http://www.sqlserver.com.cn/c2l0ZS9zaG93Lmh0bWw_bXlpZD0xMzI3url.html

MySQL优化经验

http://kb.discuz.net/index.php?title=MySQL%E4%BC%98%E5%8C%96%E7%BB%8F%E9%AA%8C

MySQL优化经验 key_buffer_size,query_cache_size,table_cache

http://www.01hr.com/wenzhang/1715759.htm

centos setup: miscellaneous tip 1

May 5th, 2009 Leon Tsang No comments

tail  -n 10 /var/log/messages |grep ER 查看最后10行错误日志
tail  -n 10 /var/log/messages |grep warning 查看最后10行警告日志
ps: centos已在 /etc/my.cnf 中设置 mysql的错误日志单独导出在 /var/log/mysqld.log;

du /var/log -sh 只查看系统日志文件夹的大小
du /var/log/*.log -h 查看系统日志文件的大小
du /var/log -h 查看系统日志文件夹和其中各个文件的大小

下面的 chkconfig 指令由于没有注明 –level参数, 则会同时对 tty2,tty3,tty4,tty5 进行操作.
chkconfig httpd on           让apache服务随系统启动
chkconfig mysqld  on     让mysql服务随系统启动
chkconfig bluetooth  off          不让蓝牙随系统启动

删除mysql的方法:          yum erase mysql
查找mysql安装路径:
如果是rpm包,用rpm -ql mysql查找
如果是编译的,通常在/usr/local/mysql下面

查看mysql的版本号:  进入 mysql 提示行前会提示当前版本号, 或在进入后使用 select version();
从 /etc/my.cnf 中可以看到数据存储在 /var/lib/mysql;

/usr/bin/php -v 或 php -v 查看php版本, 并确认没有 extension 的加载错误信息
php -i 等于phpinfo()函数
php -i|grep php.ini 得到php配置文件路径
httpd   -v 查看apache服务器的版本
vim 快捷键进阶学习:
:noh 取消语法高亮
? 反向搜索,只能按n下一个
/ 正向搜索,只能按n下一个
:[range]s/pattern/string/[c,e,g,i]
range     指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行至最後一行,也就是整篇文章,也可以 % 代表。還記得嗎? % 是目前編輯的文章,# 是前一次編輯的文章。
pattern     就是要被替換掉的字串,可以用 regexp 來表示。
string     將 pattern 由 string 所取代。
c     confirm,每次替換前會詢問。
e     不顯示 error。
g     globe,不詢問,整行替換。
i     ignore 不分大小寫。
g 大概都是要加的,否則只會替換每一行的第一個符合字串。可以合起來用,如 cgi,表示不分大小寫,整行替換,替換前要詢問是否替換。
[實例] :%s/Edwin/Edward/g
這樣整篇文章的 Edwin 就會替換成 Edward。

修复/恢复 passwd文件的方法, 也许以后再出现passwd权限被误改时我可以试试:
用光盘Rescue模式启动,把passwd拷过去

/var/log 下的常见文件说明:
1)/var/log/secure:记录登录系统存取数据的文件;
例如pop3,ssh,telnet,ftp等都会记录在此.

2)/ar/log/wtmp:记录登录这的信息记录,被编码过,所以必须以last解析;

3)/var/log/message:jihu所有的开机系统发生的错误都会在此记录;

4)/var/log.boot.log:记录一些开机或者关机启动的一些服务显示的启动或者关闭的信息;

5)/var/log/maillog:记录邮件的存取和往来;

6)/var/log/cron:用来记录crontab这个服务的内容;

7)/var/log/httpd,/var/log/mysqld.log等等文件,记录几个不同的网络服务的记录文件;

8)/var/log/acpid ,   ACPI – Advanced Configuration and Power Interface,表示高级配置和电源管理接口。
后面的 d 表示 deamon 。 acpid 也就是 the ACPI event daemon 。 也就是 acpi 的消息进程。用来控制、获取、管理 acpi 的状态的服务程序。

9)/var/run/utmp 记录着现在登录的用户;
10)/var/log/lastlog 记录每个用户最后的登录信息;
11)/var/log/btmp 记录错误的登录尝试;
12)/var/log/dmesg内核日志;
13)/var/log/cpus CPU的处理信息;
14)/var/log/syslog 事件记录监控程序日志;
15)/var/log/auth.log 用户认证日志;
16)/var/log/daemon.log 系统进程日志;
17)/var/log/mail.err 邮件错误信息;
18)/var/log/mail.info 邮件信息;
19)/var/log/mail.warn 邮件警告信息;
20)/var/log/daemon.log 系统监控程序产生的信息;
21)/var/log/kern 内核产生的信息;
22)/var/log/lpr   行打印机假脱机系统产生的信息;

日志的记录是syslog这个daemon来管理控制的

Categories: Live - Work and Struggle Tags: , , ,