1. 程式人生 > >關於Mysql 查詢所有表的實時記錄用於對比2個MySQL 庫的數據是否異步

關於Mysql 查詢所有表的實時記錄用於對比2個MySQL 庫的數據是否異步

執行 密碼 col fetchone con 網上 mysql密碼 方式 HERE

Xu言:

今天,為了研究一個MySQL主從同步開機後報錯 問題,如下圖

技術分享圖片

故障原因分析:

經過分析,可能是主從服務器開機順序導致。(有待下次斷電再次測試)

主從錯誤提示:日誌讀取錯誤的問題。解決方法:更新日誌記錄文件,重新主從同步。

擔心主從問題過程中有數據寫入,想去確認下主從庫上的數據是否一致。想到了查詢下數據庫行數的方式。

網上查詢了下 ,一般有2種:

方法一:查看當前表的記錄行數

SELECT count(*) from 表名

方法二:"查看數據庫中所有表的記錄數" # 這裏之所以打引號,是因為這裏的數據不準確

SELECT table_name,table_rows FROM information_schema.tables

WHERE TABLE_SCHEMA = ‘testdb‘

ORDER BY table_rows DESC;

所以,經過各路大仙幫助使用了第一種方法進行了改良。

拼接法:

借助information_schema庫的tables表,來拼接出一個條sql語句

use information_schema;

select concat(
    select ", 
    TABLE_name, 
    ", count(*) from , 
    TABLE_SCHEMA, 
    .,
    TABLE_name,
     union all
) 
from tables where TABLE_SCHEMA=數據庫名;

技術分享圖片

拼接出來以後,使用工具去掉“union all ”部分,批量執行。

Python方式循環:

#!/usr/bin/env python
# Author: Loki
# Date: 2019-02-012
# Version: 0.1

import pymysql
User = ‘‘  # 這裏補充你的MySQL用戶名
Pass = ‘‘  # 這裏補充你的MySQL密碼
Port = 33060  # 自己的MySQL端口

db = pymysql.connect(host="192.168.x.x", port=Port, user=User, password=Pass, db=‘數據庫名
) cursor = db.cursor() cursor.execute("show tables") # 查詢本數據庫的所有表名 table_name = cursor.fetchall() count = 0 for item in table_name: # 循環 count += 1 tbn = item[0] sql_ = "SELECT count(*) FROM %s" % tbn cursor.execute(sql_) data = cursor.fetchone() print("table_name=%s, row=%s" % (tbn,data)) print("table totle= %s" % count) # Close Connect cursor.close() db.close()

以上Python方法輸出比較不友好,可以優化為輸出到文本裏面。賬號密碼部分也可以使用input()函數方式來提示填入

Shell方式循環:

#!/bin/bash
# Author:Jerry

tb_name=`mysql -u賬號 -p密碼 -h192.168.x.x -P端口 -e "select table_name from information_schema.tables where table_schema=‘數據庫名‘"|awk NR>1{print $1}` for name in $tb_name ; do tbl_count=`mysql -u賬號 -p密碼 -h192.168.x.x -P端口 -e "select count (*) as times from cwsys.$name;"| tail -1` echo "$name=$tbl_count" >>/home/xxx/xxx.log done

以上就是使用的一些方法和思路,留個記錄以作備忘。

PS:最後鳴謝各路大仙,就不一一點名!你們懂得

參考資料:

https://www.cnblogs.com/woider/p/5926744.html

https://blog.csdn.net/a19860903/article/details/52311765

https://www.cnblogs.com/xfxing/p/9322199.html

關於Mysql 查詢所有表的實時記錄用於對比2個MySQL 庫的數據是否異步