您好,登錄后才能下訂單哦!
在遷移數(shù)據(jù)庫的時候做一些必要的驗證還是很有用的,比如說遷移前后的數(shù)據(jù)條數(shù)是否一致,數(shù)據(jù)是否一致,這個時候怎么辦呢,驗證條數(shù)還好說,要是驗證數(shù)據(jù)是否一致呢,對于重要的數(shù)據(jù)當然要每條都不會有差錯,隨機抽樣驗證肯定是不行的,萬一遺漏了就麻煩了,而且兩張表不再同一臺服務器上。這個時候該怎么辦呢,有一種方法:
上面這種方法是同時想出來的,也還不錯,但我覺得還有改進的余地:
我的想法是這樣:
第二種方法的好處就是輸出文件會在一定范圍縮小,比對方便,但是也有缺點,不能像第一種方法一樣直接通過關鍵字段定位不同數(shù)據(jù)的位置。
下面是第二種方法效果和的具體代碼實現(xiàn):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
<!--?php
/**
* 使用方法:
* php -f mysql_diff.php yes dir 10
* 是否計算條數(shù) 是否計算輸出d5并保存到文件 合并數(shù)據(jù)的級別
*
*/
if(php_sapi_name() != 'cli')
{
die("請在CLI模式下運行");
}
array_shift($argv);
if(empty($argv))
{
die("at letase contain one info");
}
$is_count = array_shift($argv);
$is_md5 = empty($argv) ? false : array_shift($argv);
$conbine_num = empty($argv) ? 1 : intval(array_shift($argv));
if($is_md5 && !is_dir($is_md5) && !mkdir($is_md5, 777, true))
{
die("error info : md5 info must be input to a file");
}
$dbinfos = array(
'host' => 'localhost',
'port' => '3306',
'user' => 'root',
'pswd' => '123456',
'charset' => 'utf8',
'tables' => array(
'lagou.pos',
'lagou.pos_innodb',
),
);
//驗證格式
if(!$link = mysql_connect($dbinfos['host'].":".$dbinfos['port'],$dbinfos['user'], $dbinfos['pswd']))
{
die("connect to [{$host}@{$port}] failed!!");
}
if(!mysql_query("set names {$dbinfos['charset']}"))
{
die("set charset error : ".mysql_error());
}
foreach ($dbinfos['tables'] as $table)
{
if($is_count)
{
$sql = "select count(*) as nums from {$table}";
$ret = mysql_query($sql);
if(!$ret)
{
die("error : ".mysql_error());
}
$ret = mysql_fetch_array($ret, MYSQL_ASSOC);
echo "{$table} : {$ret['nums']}\n";
}
if($is_md5)
{
$path = $is_md5.DIRECTORY_SEPARATOR.$table;
$sql = "select * from {$table}";
$ret = mysql_query($sql);
$flag = 0;
$fields = '';
while ($_ret = mysql_fetch_array($ret, MYSQL_NUM)) {
$flag++;
while($_ret)
{
$fields .= array_pop($_ret);
}
if($flag % $conbine_num == 0)
{
file_put_contents($path, md5($fields)."\n", FILE_APPEND);
$fields = '';
}
}
if($flag % $conbine_num != 0 && $flag > 0)
{
file_put_contents($path, md5($fields)."\n", FILE_APPEND);
}
echo "save to file info : ".realpath($path)."\n";
}
}
|
原文地址:https://www.cnblogs.com/iforever/p/4455715.html
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。