maatkit----mysql管理工具

    背景: Maatkit是一个Perl写的Mysql开源管理工具,maatkit提供的工具包,让我们更方便的管理mysql,详细的用法请查看官网http://www.maatkit.org/ ,最近公司开始大批量应用mysqlmaster-slave,为了方便管理主从复制的生产环境,学习了两个使用的工具,mk-table-checksum和mk-table-sync。

 一.安装maatkit

# cd maatkit-2725/
# perl Makefile.PL
# make
# make install

二.mk-table-checksum

1 作用:检查主从数据库是否一致

我们在做完主从之后,虽然主从的3个复制进程正常运行,但是我们不能完全保证主从数据库的一致性,利用mk-table-checksum来检查一致性。

mk-table-checksum Perform an online replication consistency check, or checksum MySQL tables efficiently on one or many servers.

 

2 用法:

(1)在主从数据库创建负责检查的用户,我试过,只有赋予all privileges才能启用检查

grant all privileges on databases.* to maatkit_user@'host' identified by 'password'

(2)执行命令

/usr/local/bin/mk-table-checksum -d databases -t table h=master-ip,u=maatkit_user,p=password,P=3306 h=slave-ip,u=maatkit_user,p=password,P=3306 

输出:

 

DATABASE  TABLE   CHUNK HOST          ENGINE      COUNT         CHECKSUM TIME WAIT STAT  LAG

DB      skucost     0 172.16.10.71  MyISAM       NULL       2260122823    1    0 NULL NULL

DB      skucost     0 192.168.0.229 MyISAM       NULL       2260122823    5    0 NULL NULL

checksum 值一样代表着master和slave的两个表是一致。否则,则不一致。

 

 

三 mk-table-sync

1 作用:修复不一致的表

在检查出不一样的表的时候,我们需要执行修复动作,强制让这两个表保持同步。

2 用法

/usr/local/bin/mk-table-sync --execute --print --charset=utf8 --no-check-slave h=master-ip,u=maatkit_user,p=password,P=3306 h=slave-ip,u=maatkit_user,p=password,P=3306 -d databases -t table

注意:

(1) --no-check-slave这个参数,如果你不加这个参数,会提示报错,因为这个工具默认是不允许在从库上修改数据的,但我们这里为了不在主库上dump出来,再到从库上导入进去,加了这个参数。

(2)master 和slave 的位置要保持源和目标的关系,否则调换位置,则会出现以slave的表来修复master的表,那样就完蛋了。

 

剩下的很多工具,需要时间去学习和实践,让我们更方便的管理mysql。

 

四 脚本

以下是自己写的比较简单的脚本,可以结合crontab,在数据库空闲时间执行检查和alter

 

#!/bin/bash

date1=`date +%Y%m%d_%H%M%S`

log_path="/var/log/maatkit/DB"

database="DB"

master_ip="192.168.0.229"

slave_ip="172.16.10.71"

[ ! -d ${log_path} ] && mkdir -p ${log_path}

/usr/local/bin/mk-table-checksum -d DB h=192.168.0.229,u=maatkit_user,p=password,P=3306 h=172.16.10.71,u=maatkit_user,p=password,P=3306 --count |/usr/local/bin/mk-checksum-filter >> ${log_path}/${database}_${date1}.log

count_diff_cets=`cat ${log_path}/${database}_${date1}.log |wc -l`

if [ ${count_diff_cets} -ge 2 ]

then

sed -n -e 'n' -e 'p' ${log_path}/${database}_${date1}.log|awk '{print $2}'|

while read i

do

/usr/bin/sendEmail -f "Mysql_ALTER<[email protected]>" -s smtp.gmail.com:587 -xu XXXXX -xp XXXXPASSOWRD -t [email protected] -u "${slave_ip} mysql slave problem" -m "${slave_ip} mysql slave from ${master_ip} check by script: $0,maatkit-checksum have found different tables with $i `date`"

/usr/local/bin/mk-table-sync --execute --print --charset=utf8 --no-check-slave h=192.168.0.229,u=maatkit_user,p=password h=172.16.10.71,u=maatkit_user,p=password -d DB -t $i

done

fi

 

你可能感兴趣的:(maatki,mysql管理工具)