mysql多节点的数据一致性校验 Shell脚本

2017年12月7日15:57:23 发表评论 1,209 views
摘要

面试的时候可能会遇到的一些shell脚本

广告也精彩

check_data_for_mysql

一、介绍

参考pt checksum思想改写,可以定制化的检查随意两个mysql节点的数据一致性。

1.1 功能介绍

检查随意两个几点的数据一致性
支持并发检查,基于库的并发
支持指定行数,如默认10000。
支持基于db的并行check
支持断点继续check
本工具仅供学习使用,如需检查线上的数据,请充分测试

二、安装教程

下载工具

git clone https://gitee.com/mo-shan/check_data_for_mysql.git

cd check_data_for_mysql

2.1 配置

(1)编辑配置文件

moshan /data/git/check_data_for_mysql > cat conf/check.conf 
:<<comment
变量注释:
mysql_user    : 连接mysql用户名;
mysql_passwd  : 连接mysql的密码;
mysql_port1   : 第一个节点的端口号;
mysql_port2   : 第二个节点的端口号;
mysql_host1   : 第一个节点的ip地址
mysql_host2   : 第二个节点的ip地址
count         : check数据行的最小单位,默认是10000行
check_no_pk   : 该参数控制是否check没有主键的表, 1检查, 0不检查
threads       : 并发的线程数
mysql_path    : mysql这个工具的绝对路径
log_partition : 软件存放的目录所在的分区
log_par_size  : 日志文件预计的大小, 如果该分区所剩的空间大小小于该值就退出, 默认是10, 表示10GB
注意:默认以第一个节点为参照,即程序会先获取到第一个节点的业务表
comment
mysql_user="test"
mysql_passwd="test"
mysql_port1="3306"
mysql_port2="3311"
mysql_host1="172.28.84.239"
mysql_host2="172.28.84.239"
count=10000
check_no_pk=1
threads=2
mysql_path="/data/mysql/base/bin/mysql"
log_partition="/dev/mapper/mint--vg-root"
log_par_size="10"
#以下无需编辑修改
work_dir="/data/git/check_data_for_mysql"
log_dir="${work_dir}/log"
pid_dir="${work_dir}/pid"
pri_file_dir="${log_dir}/pri"
stop_file="${log_dir}/stop_file"
error_log_file="${log_dir}/error_result.log"
error_log_table_dir="${log_dir}/table"
[ ! -d "${log_dir}" ] && mkdir -p ${log_dir}
[ ! -d "${pid_dir}" ] && mkdir -p ${pid_dir}
[ ! -d "${pri_file_dir}" ] && mkdir -p ${pri_file_dir}
[ ! -d "${error_log_table_dir}" ] && mkdir -p ${error_log_table_dir}
info_log_file="${log_dir}/info_result.log"
mysql_port="${mysql_port1}"
host_list=(${mysql_host1} ${mysql_host2})
mysql_comm="${mysql_path} -u${mysql_user} -p${mysql_passwd} -h${host_list[0]} -P${mysql_port1}"
moshan /data/git/check_data_for_mysql >

(2)修改工作路径

sed -i 's#^work_dir=.*#work_dir=\"/check_data_for_mysql_path\"#g' bin/start.sh #将这里的check_data_for_mysql_path改成check_data_for_mysql的家目录的绝对路径

使用说明

bash bin/start.sh   #执行脚本

moshan /data/git/check_data_for_mysql > bash bin/start.sh
[2019-08-09 17:12:38] [INFO] 并发数是100, 但空闲CPU只有6个, 现在将并发数强制变更为5.
[2019-08-09 17:12:38] [INFO] ========== 本次检查开始 ==========
[2019-08-09 17:12:38] [INFO] THREAD_1:STARTING...
[2019-08-09 17:12:38] [INFO] THREAD_1:正在检查books库
[2019-08-09 17:12:38] [INFO] THREAD_2:STARTING...
[2019-08-09 17:12:38] [INFO] THREAD_2:正在检查chengyu库
[2019-08-09 17:12:38] [INFO] THREAD_3:STARTING...
[2019-08-09 17:12:38] [INFO] THREAD_3:正在检查liaotian库
[2019-08-09 17:12:38] [INFO] THREAD_4:STARTING...
[2019-08-09 17:12:38] [INFO] THREAD_4:正在检查moshan库
[2019-08-09 17:12:38] [INFO] THREAD_5:STARTING...
[2019-08-09 17:12:38] [INFO] THREAD_5:正在检查moshan_info库
[2019-08-09 17:12:38] [OK] THREAD_1:books.t_book[1,313]:数据一致。
[2019-08-09 17:12:38] [OK] THREAD_3:liaotian.moshan[1,6040]:数据一致。
[2019-08-09 17:12:38] [OK] THREAD_4:moshan.admin[1,1]:数据一致。
[2019-08-09 17:12:38] [OK] THREAD_1:books.t_moshan[1,495]:数据一致。
[2019-08-09 17:12:38] [INFO] THREAD_1:END
[2019-08-09 17:12:38] [OK] THREAD_4:moshan.authorization[1,1]:数据一致。
[2019-08-09 17:12:38] [OK] THREAD_3:liaotian.moshan_tmp[1,3279]:数据一致。
[2019-08-09 17:12:38] [OK] THREAD_2:chengyu.chengyu[1,41030]:数据一致。
[2019-08-09 17:12:38] [INFO] THREAD_2:END
[2019-08-09 17:12:38] [WARN] THREAD_4:moshan.flush_:没有主键。
[2019-08-09 17:12:38] [ERROR] THREAD_4:moshan.flush_[0,0]:数据不一致。第一个节点的数据行是:1,第二个节点的数据行是:0。不同部分请参考文件: /data/git/check_data_for_mysql/log/table/172.28.84.239_3306_moshan_flush_.log。
[2019-08-09 17:12:38] [OK] THREAD_5:moshan_info.chengyu_old[1,41030]:数据一致。
[2019-08-09 17:12:38] [OK] THREAD_5:moshan_info.mafengwo[1,3]:数据一致。
[2019-08-09 17:12:38] [OK] THREAD_4:moshan.history_[1,1]:数据一致。
[2019-08-09 17:12:38] [WARN] THREAD_4:moshan.host_:没有主键。
[2019-08-09 17:12:38] [OK] THREAD_4:moshan.host_[0,0]:数据一致。
[2019-08-09 17:12:38] [OK] THREAD_5:moshan_info.mljr[1,5]:数据一致。
[2019-08-09 17:12:38] [WARN] THREAD_4:moshan.info:没有主键。
[2019-08-09 17:12:38] [WARN] THREAD_5:moshan_info.moshan_car_info:没有主键。
[2019-08-09 17:12:38] [ERROR] THREAD_4:moshan.info[0,0]:数据不一致。第一个节点的数据行是:1882,第二个节点的数据行是:0。不同部分请参考文件: /data/git/check_data_for_mysql/log/table/172.28.84.239_3306_moshan_info.log。
[2019-08-09 17:12:39] [OK] THREAD_5:moshan_info.moshan_car_info[0,0]:数据一致。
[2019-08-09 17:12:39] [WARN] THREAD_4:moshan.info_back:没有主键。
[2019-08-09 17:12:39] [OK] THREAD_4:moshan.info_back[0,0]:数据一致。
[2019-08-09 17:12:39] [OK] THREAD_5:moshan_info.moshan_info[1,61]:数据一致。
[2019-08-09 17:12:39] [OK] THREAD_4:moshan.login[1,1]:数据一致。
[2019-08-09 17:12:39] [OK] THREAD_5:moshan_info.persional_information[1,9]:数据一致。
[2019-08-09 17:12:39] [WARN] THREAD_5:moshan_info.t:没有主键。
[2019-08-09 17:12:39] [INFO] THREAD_1:STARTING...
[2019-08-09 17:12:39] [INFO] THREAD_1:正在检查repl库
[2019-08-09 17:12:39] [OK] THREAD_4:moshan.money[1,36]:数据一致。
[2019-08-09 17:12:39] [INFO] THREAD_2:STARTING...
[2019-08-09 17:12:39] [INFO] THREAD_2:正在检查ultrax库
[2019-08-09 17:12:39] [OK] THREAD_5:moshan_info.t[0,0]:数据一致。
[2019-08-09 17:12:39] [INFO] THREAD_5:END
[2019-08-09 17:12:39] [WARN] THREAD_4:moshan.prose:没有主键。
[2019-08-09 17:12:39] [WARN] THREAD_2:ultrax.dis_common_admincp_cmenu:没有主键。
[2019-08-09 17:12:39] [OK] THREAD_4:moshan.prose[0,0]:数据一致。
[2019-08-09 17:12:39] [OK] THREAD_2:ultrax.dis_common_admincp_cmenu[0,0]:数据一致。
[2019-08-09 17:12:39] [WARN] THREAD_2:ultrax.dis_common_admincp_group:没有主键。
[2019-08-09 17:12:39] [OK] THREAD_2:ultrax.dis_common_admincp_group[0,0]:数据一致。
[2019-08-09 17:12:39] [OK] THREAD_4:moshan.tmp_[1,1]:数据一致。
[2019-08-09 17:12:39] [WARN] THREAD_2:ultrax.dis_common_admincp_member:没有主键。
[2019-08-09 17:12:39] [OK] THREAD_2:ultrax.dis_common_admincp_member[0,0]:数据一致。
[2019-08-09 17:12:39] [OK] THREAD_4:moshan.tmp_table[1,25]:数据一致。
[2019-08-09 17:12:39] [WARN] THREAD_4:moshan.use_date:没有主键。
[2019-08-09 17:12:39] [OK] THREAD_3:liaotian.qq_xiaofan[1,105423]:数据一致。
[2019-08-09 17:12:39] [OK] THREAD_2:ultrax.dis_common_admincp_perm[1,67]:数据一致。
[2019-08-09 17:12:39] [OK] THREAD_4:moshan.use_date[0,0]:数据一致。
[2019-08-09 17:12:39] [OK] THREAD_2:ultrax.dis_common_admincp_session[1,1]:数据一致。
[2019-08-09 17:12:39] [OK] THREAD_4:moshan.user_[1,2]:数据一致。
[2019-08-09 17:12:39] [WARN] THREAD_2:ultrax.dis_common_admingroup:没有主键。
[2019-08-09 17:12:39] [WARN] THREAD_4:moshan.ver_:没有主键。
[2019-08-09 17:12:39] [OK] THREAD_2:ultrax.dis_common_admingroup[0,0]:数据一致。
[2019-08-09 17:12:39] [OK] THREAD_3:liaotian.wx_moshan[1,16269]:数据一致。
[2019-08-09 17:12:39] [OK] THREAD_4:moshan.ver_[0,0]:数据一致。
[2019-08-09 17:12:40] [WARN] THREAD_2:ultrax.dis_common_adminnote:没有主键。
[2019-08-09 17:12:40] [WARN] THREAD_4:moshan.year_:没有主键。
[2019-08-09 17:12:40] [OK] THREAD_2:ultrax.dis_common_adminnote[0,0]:数据一致。
[2019-08-09 17:12:40] [OK] THREAD_4:moshan.year_[0,0]:数据一致。
[2019-08-09 17:12:40] [INFO] THREAD_4:END
[2019-08-09 17:12:40] [WARN] THREAD_2:ultrax.dis_common_advertisement:没有主键。
……省略部分
[2019-08-09 17:13:11] [OK] THREAD_2:ultrax.dis_ucenter_pm_messages_0[0,0]:数据一致。
[2019-08-09 17:13:11] [WARN] THREAD_2:ultrax.dis_ucenter_pm_messages_1:没有主键。
[2019-08-09 17:13:11] [OK] THREAD_2:ultrax.dis_ucenter_pm_messages_1[0,0]:数据一致。
[2019-08-09 17:13:11] [WARN] THREAD_2:ultrax.dis_ucenter_pm_messages_2:没有主键。
[2019-08-09 17:13:11] [OK] THREAD_2:ultrax.dis_ucenter_pm_messages_2[0,0]:数据一致。
[2019-08-09 17:13:11] [WARN] THREAD_2:ultrax.dis_ucenter_pm_messages_3:没有主键。
[2019-08-09 17:13:11] [OK] THREAD_2:ultrax.dis_ucenter_pm_messages_3[0,0]:数据一致。
[2019-08-09 17:13:11] [WARN] THREAD_2:ultrax.dis_ucenter_pm_messages_4:没有主键。
[2019-08-09 17:13:12] [OK] THREAD_2:ultrax.dis_ucenter_pm_messages_4[0,0]:数据一致。
[2019-08-09 17:13:12] [WARN] THREAD_2:ultrax.dis_ucenter_pm_messages_5:没有主键。
[2019-08-09 17:13:12] [OK] THREAD_2:ultrax.dis_ucenter_pm_messages_5[0,0]:数据一致。
[2019-08-09 17:13:12] [WARN] THREAD_2:ultrax.dis_ucenter_pm_messages_6:没有主键。
[2019-08-09 17:13:12] [OK] THREAD_2:ultrax.dis_ucenter_pm_messages_6[0,0]:数据一致。
[2019-08-09 17:13:12] [WARN] THREAD_2:ultrax.dis_ucenter_pm_messages_7:没有主键。
[2019-08-09 17:13:12] [OK] THREAD_2:ultrax.dis_ucenter_pm_messages_7[0,0]:数据一致。
[2019-08-09 17:13:12] [WARN] THREAD_2:ultrax.dis_ucenter_pm_messages_8:没有主键。
[2019-08-09 17:13:12] [OK] THREAD_2:ultrax.dis_ucenter_pm_messages_8[0,0]:数据一致。
[2019-08-09 17:13:12] [WARN] THREAD_2:ultrax.dis_ucenter_pm_messages_9:没有主键。
[2019-08-09 17:13:12] [OK] THREAD_2:ultrax.dis_ucenter_pm_messages_9[0,0]:数据一致。
[2019-08-09 17:13:12] [OK] THREAD_2:ultrax.dis_ucenter_protectedmembers[0,0]:数据一致。
[2019-08-09 17:13:12] [OK] THREAD_2:ultrax.dis_ucenter_settings[1,27]:数据一致。
[2019-08-09 17:13:12] [OK] THREAD_2:ultrax.dis_ucenter_sqlcache[0,0]:数据一致。
[2019-08-09 17:13:12] [WARN] THREAD_2:ultrax.dis_ucenter_tags:没有主键。
[2019-08-09 17:13:12] [OK] THREAD_2:ultrax.dis_ucenter_tags[0,0]:数据一致。
[2019-08-09 17:13:12] [OK] THREAD_2:ultrax.dis_ucenter_vars[0,0]:数据一致。
[2019-08-09 17:13:12] [INFO] THREAD_2:END
[2019-08-09 17:13:12] [INFO] End of all threads.
[2019-08-09 17:13:12] [INFO] ========== 本次检查结束 ==========
moshan /data/git/check_data_for_mysql >
  • QQ精品交流群
  • weinxin
  • 微信公众号
  • weinxin
广告也精彩
admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: