doe*_*oeJ 3 php mysql sql database pdo
我在两台不同的服务器上有匹配的数据库(mysql 复制不是一个选项)。我需要查看一个表 2 中是否缺少一条记录,如果是,则截断表 2,然后从表 1 复制到表 2。每个表都位于不同的 IP/服务器上。
代码:
$pdoyd = new PDO(
'mysql:host=' . DB_HOST_YODA . ';dbname=' . DB_DATABASE_DNS,
DB_USER_DNS,
DB_PASSWORD
);
$pdoyd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdoyd->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$truntbl = array('cryptokeys', 'domains', 'records');
foreach($truntbl as $tbl){
$sql = 'truncate '.$tbl;
$statementyd = $pdoyd->prepare($sql);
$useryd = $statementyd->execute();
var_dump($statementyd);
echo '<br>';
}
Run Code Online (Sandbox Code Playgroud)
将丢失的记录从一台服务器上的一个表复制到另一台服务器上的另一个表的有效方法是什么?
您可以打开两个连接。使用一个从源服务器读取,另外两个插入到目标服务器。ON DUPLICATE KEY IGNORE当您尝试覆盖现有行时,使用该选项可以防止错误,因此它只插入丢失的行。
$pdo1 = new PDO('mysql:host=server1;dbname=xxx', $username1, $password1);
$pdo2 = new PDO('mysql:host=servrer2; dbname=xxx', $username2, $password2);
$insert_stmt = $pdo2->prepare("INSERT INTO yourTable (col1, col2, col3, ...) VALUES (:col1, :col2, :col3, ...) ON DUPLICATE KEY IGNORE");
$select_results = $pdo1->query("SELECT * FROM yourTable");
while ($row = $select_results->fetch(PDO::FETCH_ASSOC)) {
$insert_stmt->execute($row);
}
Run Code Online (Sandbox Code Playgroud)