导数据是很长有的事, 导完了总得检查一下把, 云上有DTS很方便, 但是有的环境只能手动导数据了, 这比较就比较麻烦了, 或者是用户自己导的, 让你检查检查, 总之检查两个库之间表的数据量是很常见的工作. 常见的工作做多了就饭, 就写个脚本, py效果更好, 但是不如shell方便(因环境而异). 我分享下脚本检查mysql两库之间数据行数的脚本吧.
这个脚本是mysql的, 也可以改一改给pg或者oracle用, 我就不写了哈
1. 下载方式
github: https://github.com/ddcw/ddcw/blob/master/shells/tableCheckSum.sh
见文末
2. 使用方法
代码语言:javascript复制sh tableCheckSum.sh
SRC_IP=192.168.1.2
SRC_USER=u1
SRC_PASSWORD=123456
SRC_PORT=3306
SRC_DBNAME=db1
DST_IP=192.168.1.3
DST_USER=u1
DST_PASSWORD=123456
DST_PORT=3306
DST_DBNAME=db2
PARALLEL=16
TABLE_FILE=table.txt
本脚本如果不指定TABLE_FILE参数的话, 默认会比较数据库下面所有的表.
代码语言:javascript复制#TABLE_FILE格式如下:
table_name1
table_name2
t3
3. 例子:
并行度默认是本机线程数的2倍
默认该库所有表
也可以手动指定库名:
4. 脚本如下:
代码语言:javascript复制#!/bin/env bash
#write by ddcw at 2021.06.26
#检查mysql的表数据是否一致, 只检查行数量
#用法, sh $0.sh src_user/src_passowrd@src_ip:src_port[/database_name] dst_user/dst_passowrd@dst_ip:dst_port[/database_name]
PARAMS=$@
SRC_PARAM=$1
DST_PARAM=$2
dt=$(date %s)
same_tbale="/tmp/.same_table_${dt}.same"
no_same_tbale="/tmp/.same_table_${dt}.nosame"
#run this function and exit with $2
function exits(){
echo -e "[`date %Y%m%d-%H:%M:%S`] 33[31;40m$1 33[0m"
[ -z $2 ] && exit $2
exit 1
}
function echo_color() {
case $1 in
green)
echo -e "