這篇文章將為大家詳細講解有關如何檢測數據庫遷移的準確性,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
游戲運營中經常遇到數據庫遷移的情況。比如:合服前的庫遷移。為了節省成本整合庫遷移。甚至換云服務商引起的庫遷移。其實運維本身有責任和義務保證遷移過程中庫數據的準確性和完整性。因為對服務器而言。數據實在是太重要。批量遷移過程中總擔憂出問題。數據會不會丟失。如何減少這種意外發生。如何做到雙重保障?這樣心里更加有把握。
雙重保障思路是:遷移前批量執行庫中每個表的條數輸出到文本中。等運維遷移后。再批量執行庫中每個表的條數輸出到文本中。然后使用Beyond Compare 對比工具。因為輸出順序一致。文本前后完全相同。安全性大大提高。也可以簡單的方式輸出每個庫表的總條數。相同也可以保證準確性。
Shell腳本:CheckDbWork.sh
#!/bin/bash myvar=0 while [ $myvar -le 19 ] do echo $myvar mysql -uadmin -p'Pa$$w0' -h27.31.25.133 -P 3306 -Dtafang_s$(($myvar+6000)) <CheckDbWorkSql.sql myvar=$(( $myvar + 1 )) done myvar=20 while [ $myvar -le 39 ] do echo $myvar mysql -uadmin -p'Pa$$w0' -h27.31.25.134 -P 3306 -Dtafang_s$(($myvar+6000)) <CheckDbWorkSql.sql myvar=$(( $myvar + 1 )) done
Mysql腳本:CheckDbWork.sql
SET CHARACTER_SET_CLIENT=utf8; SET CHARACTER_SET_CONNECTION=utf8; DELIMITER $$ DROP PROCEDURE IF EXISTS `CheckDbWorkSql`$$ CREATE PROCEDURE `CheckDbWorkSql`() BEGIN DECLARE i INT DEFAULT 0; DECLARE tempCount INT DEFAULT 0; DECLARE dbSql VARCHAR(512) DEFAULT ''; DECLARE dbNameSql VARCHAR(512) DEFAULT ''; DECLARE checkDbSql VARCHAR(512) DEFAULT ''; DECLARE tableName VARCHAR(128) DEFAULT ''; DECLARE checkSrceSql VARCHAR(1024) DEFAULT ''; DECLARE runSrceSql VARCHAR(1024) DEFAULT ''; DECLARE calTableSql VARCHAR(1024) DEFAULT ''; DECLARE tempAllCount INT DEFAULT 0; DECLARE tempTableCount INT DEFAULT 0; -- 獲取當前數據庫 prepare stmt from "SELECT database() INTO @dbSql"; EXECUTE stmt; -- 循環導入數據 SET @checkSql=CONCAT("SELECT COUNT(1) into @tempCount FROM information_schema.TABLES WHERE TABLE_SCHEMA = '",@dbSql,"'"); prepare stmt from @checkSql; EXECUTE stmt; SET @checkSrceSql=CONCAT("SELECT table_name into @tableName FROM information_schema.TABLES WHERE TABLE_SCHEMA = '",@dbSql,"' LIMIT [##],1"); WHILE i < @tempCount DO SET @runSrceSql=REPLACE(@checkSrceSql,'[##]',i); prepare stmt from @runSrceSql; EXECUTE stmt; SET @calTableSql=CONCAT("SELECT COUNT(1) into @tempTableCount FROM ",@tableName); prepare stmt from @calTableSql; EXECUTE stmt; SET i=i+1; SET tempAllCount=tempAllCount+@tempTableCount; -- SELECT @tempTableCount; END WHILE; SELECT @dbSql,tempAllCount; END$$ DELIMITER $$ CALL CheckDbWorkSql();
關于如何檢測數據庫遷移的準確性就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。