如何统计MySQL多表行数?

Bash

1 前言

一个问题,一篇文章,一出故事。
今天迁移了一个数据库,用户提出需要验证数据是否完整,于是想到通过命令行来统计特定库的特定表的行数来确定。
如果你有更好的方法,请告诉我 O(∩_∩)O。

2 最佳实践

2.1 创建统计脚本

mkdir -p ~/scripts
vim ~/scripts/tableCount.sh

加入如下内容,

#!/bin/bash

dbUser="root"
dbPassword="rootPassword"
dbHost="mysql.cmdschool.org"
dbPort="3306"
dbName="db1"
dbTables="tab1 tab2 tab3"
dbLog="/var/log/tableClont.log"

for dbTable in $dbTables; do
        echo $dbName"."$dbTable":"`mysql -u$dbUser -p$dbPassword -h$dbHost -P$dbPort -e'select count(1) from '$dbName'.'$dbTable' \G;' 2> /dev/null | grep ^count | cut -d":" -f2` | tee -a $dbLog
done

由以上可知,核心语句如下,

mysql -u root -p rootPassword -h mysql.cmdschool.org -P 3306 -e 'select count(1) from db1.tab1 \G;'

使用说明,
参数“dbUser”定义需要统计的数据库服务器的登录用户
参数“dbPassword”定义需要统计的数据库服务器的登录密码
参数“dbHost”定义需要统计的数据库服务器的主机名称
参数“dbPort”定义需要统计的数据库服务器的端口
参数“dbName”定义需要统计的数据库名称
参数“dbTables”定义需要统计的数据库的表名称(一张以上)
参数“dbLog”定义统计日志输出的路径,以上范例定义值为“/var/log/tableClont.log”

2.2 执行统计脚本

sh ~/scripts/tableCount.sh

2.3 查看统计的记录

cat /var/log/tableClont.log

执行完毕后,可以通过以上命令查看统计记录,可见如下显示,

db1.tab1: 258726727
db1.tab2: 4878
db1.tab3: 31
没有评论

发表回复

Bash
如何熟悉Base Shell的变量的间接引用?

1 前言 一个问题,一篇文章,一出故事。 笔者希望以一个变量名称去引用另一个变量,于是整理此文。 2 …

Bash
如何实现文件夹路径转纯数字符串?

1 前言 一个问题,一篇文章,一出故事。 由于由于需要设置某目录的配额,配额要求为每个目录指定一个项 …

Bash
如何统计Linux打开文件前10进程?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境有台服务最近压力比较大,打开的文件数量不断地往 …