2011年4月20日星期三

mysql找回store procedure

罪过, 浪费一下午时间, 就是因为自己不小心删掉了一个数据库, 但是之前没有作备份。 真正要紧的是丢失的库中的一些列store procedure.
还好, 最近一周, 这些store procedure都曾经做过改动。 于是我需要作的便是, 解析这一周时间内的mysql二进制日志, 从中找出对应store procedure的最后create语句, 重建这些store procedure。

1。 利用之前写的批量解析mysql二进制日志的python脚本 mylog.py
#!/usr/bin/env python
#coding=utf-8
import os
import datetime
import time

v_log_path = "/opt/mysqladv5.5.8/data"
v_sql_path = "/root/Desktop/script"

v_log_start_date = "2011-02-24"
v_seq = 1

for v_root, v_dirs, v_files in os.walk(v_log_path):
    for v_file in v_files:
       
        if v_file.find("mysql-bin.0") > -1:
            v_time = os.path.getctime(v_root + "/" + v_file)
            if datetime.datetime.fromtimestamp(v_time) > datetime.datetime.fromtimestamp(time.mktime(time.strptime(v_log_start_date,"%Y-%m-%d"))):
                v_commend = "mysqlbinlog " + v_root + "/" + v_file + " > " + v_sql_path + "/" + str(v_seq) + ".sql"
                v_seq = v_seq + 1
                os.system(v_commend)
           
print "end"

2. 编辑好以上脚本中的路径,运行, 解析出大概两百多个sql文件, 没办法, 这周我测试insert了很多很多数据

3. 运行类似“grep -n 'sp_transfer_antibody' *”的脚本, 找出含有最后create语句的文件以及行

4. vim打开对应文件, :12345 定位到对应行, v切换模式, 选定create语句, y复制, :sp sp_transfer_antibody.sql 打开另外一个文件, p粘贴, :wq保存

5. 将找出来的脚本运行, 重新生成procedure

2011年4月17日星期日

mysql connector

mysql connector6.3.6无法安装,  windows xp sp3环境, 可以安装到6.2.4

MysqlScript类在执行script的时候, 可以通过设置DELIMETER的方式来实现view/function/procedure的脚本, 但是依然不能把多个脚本放在一起, 也就是说一次execute的script只有有一个DELIMETER(创建简单的view没有问题, 但是稍微复杂一点的就报语法错误), 具体什么情况下会出错暂时没有测试


2011年4月15日星期五

mysql rownum实现

select @x:=ifnull(@x,0)+1 as rownum,id,col from tbl

类似用法很有用, 还可以用来update.

经常有数据从excel中导入, 特别是那种层次结构或者单元格合并的数据, 导入以后有很多数据是null, 其实意思就是与上面的第一个不为空的数据一样. 可以用该方法来update:
UPDATE service0329 SET service_line = (@service_line:= IFNULL(service_line, @service_line));

Mysql删除重复行的例子(有主键id)

DELETE et FROM email_temp et,
( SELECT id,email_id,email FROM email_temp GROUP BY email,email_id HAVING COUNT(*) >1) er WHERE et.email_id = er.email_id
AND et.email = er.email AND et.id > er.id