罪过, 浪费一下午时间, 就是因为自己不小心删掉了一个数据库, 但是之前没有作备份。 真正要紧的是丢失的库中的一些列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月20日星期三
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)
订阅:
评论 (Atom)