각 사용자가 각 데이터베이스에 동일한 스키마가있는 고유 한 데이터베이스를 가져 오는 응용 프로그램이 있습니다. 여러 데이터베이스 마이그레이션 성능 향상
을 실행하여 데이터베이스를 통해
- SHOW 데이터베이스
- 으로 반복을 :
나는 이런 식으로 마이그레이션을 수행하는 스크립트를 많은 시간이 소요되는 복잡한 쿼리 (3 초 이상)
거기에 한 스크립트에서 동시에 각 데이터베이스에 대해 SQL 문을 실행할 수있는 방법이 있습니까? 이 작업을 수행하는 데 위험하거나 너무 리소스가 많이 소모됩니까?
내가 원하는 이유는 가능한 한 중단 시간을 방지하기 위해서입니다. 데이터베이스가 부하 보유 할 경우
<?php ini_set('display_errors', 1); set_time_limit(0); $sql = file_get_contents('../update.sql'); $sql_queries = explode(";", $sql); $exclude_dbs = array('horde','phppoint_forums','phppoint_site','roundcube', 'pos', 'bntennis_site', 'mysql', 'information_schema', 'performance_schema'); $conn = mysqli_connect("localhost", "root", "PASSWORD"); $show_db_query = mysqli_query($conn, 'SHOW databases'); $databases = array(); while ($row = mysqli_fetch_assoc($show_db_query)) { if (!in_array($row['Database'], $exclude_dbs)) { $databases[] = $row['Database']; } } foreach($databases as $database) { mysqli_select_db($conn, $database); echo "Running queries on $database\n***********************************\n"; foreach($sql_queries as $query) { if (!empty($query)) { echo "$query;"; if (!mysqli_query($conn, $query)) { echo "\n\nERROR: ".mysqli_error($conn)."\n\n"; } } } echo "\n\n"; } ?>
한 번의 작업으로 각 데이터베이스에 대한 쿼리를 실행하는 것은 매우 위험하며 리소스 호그가됩니다. 쿼리 나 동작을 분리 한 다음 각각을 호출하는 것이 좋습니다. 또는 주 데이터를 하나의 데이터베이스에 복사 한 다음 쿼리를 실행하여 더 많은 정보가 필요할 때 데이터베이스를 쿼리하는 방법을 호출 할 수도 있습니다. 그러나 한 번에 여러 데이터베이스에 복잡한 쿼리를 보내면 보안 및 응답 시간을 볼 때 결코 좋은 생각이 아닙니다. – James