aws拉取mysql日志_使用Python将Amazon RDS日志连续转储到本地磁盘

Amazon RDS(MySQL Engine)提供了将MySQL Engine的慢查询日志存储到数据表或数据文件的功能。

当我们需要对慢查询日志进行分析时,如果该日志是存储在数据表中的,就需要为其编写复杂的SQL语句来分析,带来的困扰是第一是编写 SQL 语句很麻烦,第二是执行这些 SQL 会为数据库带来负载, 所以请尽量将RDS(MySQL Engine)的日志存储设置为数据文件( log_output = FILE)

而这些存储到数据文件中的RDS Logs又有以下特点:

对于RDS来说,用户是没有文件系统权限的,所以虽然设置为存储到数据文件,但是实际上你还是必须使用API来访问这些文件

只保存最近24个小时内的日志

日志每小时轮替一次,共有24个文件

24个日志文件单从文件名无法判断先后顺序,并且没有按时间排序列出这些文件的功能,使用SHELL很难一个循环简单按序dump

API有Web管理页面,及RDS Command Line Tools

据其特点,实际使用中会遇到的问题是:

24小时之前的性能问题就追踪不到了

日志使用API即时获取,因此没有办法用mysqlslap/pt-query-digest等工具进行分析

一天的日志被分为24个,很难一次操作

为了解决以上问题,我做了一个小工具 rds_dump_log

,用来放在 Linux 的 crontab 中,每天从 RDS API 获取日志文件,按序 Dump 到位于本地磁盘的单个日志文件中。

配置自动Dump方法:

1.

首先,你需要在你的能访问RDS的Linux Server上安装配置RDS Command Line Tools,这是一个 JAVA 编写的命令行工具,可以在 Linux 中使用命令行来管理 RDS。

http://docs.aws.amazon.com/AmazonRDS/latest/CommandLineReference/StartCLI.html

2.

将以下环境变量添加到你的 /etc/profile 文件中并 source(各变量值根据你的实际安装路径配置)。

# Settings for AWS Command Line Tools

export AWS_RDS_HOME='/home/dba/maintain/RDSCli-1.15.001'

export JAVA_HOME='/usr/java/default'

export PATH=${PATH}:${AWS_RDS_HOME}/bin

export EC2_REGION=us-east-1

export AWS_CREDENTIAL_FILE=/home/dba/maintain/RDSCli-1.15.001/credential-file-path.template

3.

在Shell中使用 rds –help 来测试你的工具是否安装成功。

4.

安装 Python 2.7 以上版本(如果现有版本已经>=2.7,则跳过)。

6.

添加定时任务,每日自动Dump日志文件到本地

需要注意的是,由于该日志每小时自动轮替,并且只保存最近24小时的文件,因此你的crontab的两次连续任务之间的间隔必须小于24小时,不然你就会漏掉一些日志了,我选择的是每12小时Dump一次。

另外,dump_rds_log.py的使用方法可用python dump_rds_log.py –help查看,或到这里https://github.com/phang001/dump_rds_log/blob/master/README.md

例如,我当前配置的自动Dump GameFuse的slow日志的定时任务如下:

###将RDS的SLOW LOG DUMP到本地存放#######################

0 0,12 * * * source /etc/profile; /usr/bin/python /home/slow_log_dump/dump_rds_log.py rds-id-1 slow /home/slow_log_dump/

0 1,13 * * * source /etc/profile; /usr/bin/python /home/slow_log_dump/dump_rds_log.py rds-id-2 general /home/general_log_dump/

0 2,14 * * * source /etc/profile; /usr/bin/python /home/slow_log_dump/dump_rds_log.py rds-id-3 slow /home/slow_log_dump/

注意:

crontab 命令中的source /etc/profile是必须的,因为Linux crontab目前不能自动读取到系统环境变量,而调用RDS Command Line Tools需要上述那些环境变量的支持。

虽然AWS提供了一个python库叫做boto,用来管理RDS,但是目前该库功能有限,远不如RDS Command Line Tools功能强大,因此随着boto的进步,这个工具可能会变得更简单易用。

实际上该工具也可以用来转储general log、error log,将第二个参数改为general或error就可以了,甚至也可用用来转储 RDS的sqlserver engine、oracle engine的日志。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值