sql >> Database teknologi >  >> RDS >> Mysql

Codeigniter skifter til sekundær database, hvis den primære er nede

Nå, jeg ved ikke, om det kommer til at virke, men du kan faktisk prøve dette:

1) opret 2 grupper af databaseindstillinger (i application/config/database.php):

// regular one..
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
//...

// second connection
$db['second']['hostname'] = 'localhost';
$db['second']['username'] = 'root';
//...

2) Sæt deubg fra for at undgå at vise db-fejl og faktisk dræbe dit script (gør det for begge):

$db['default']['db_debug'] = FALSE;

3) Du kan sende en TRUE til den anden parameter, mens du indlæser biblioteket, så det faktisk har en returværdi; det returnerer selve databaseobjektet:

$dbobject1 = $this->load->database('default',TRUE);
$dbobject2 = $this->load->database('second',TRUE);

Nu kan du bare tjekke efter "forbindelses-id"-ressourcen for at se, om en forbindelse blev etableret eller ej:

if(FALSE === $dbobject1->conn_id)
{
  echo 'No connection established!';
}

Nu kan du beslutte at indlæse en anden DB, hvis den første ikke indlæses. Ulempen er, at du faktisk ikke ved, hvorfor db-forbindelsen ikke virkede...

Med hensyn til hvordan du implementerer dette, vil du måske prøve at udvide databaseklassen eller, bedre, oprette dit eget bibliotek, som faktisk bare tjekker om en forbindelse eksisterer eller ej, og indlæse dette i stedet for databasebiblioteket. Da det returnerer et databaseobjekt (bortset fra når alle 2 forbindelser fejler), kan du arbejde på det, som du ville gøre på den normale databaseklasse:

class Check_db {

     private $CI = '';
     public $DB1 = '';
     public $DB2 = '';

     function __construct()
     {
        $this->CI =&get_instance();
        $this->DB1 = $this->CI->load->database('default',TRUE);
        if(FALSE !== $this->DB1->conn_id)
        {
          return $this->DB1;
        }
        else
        {
          $this->DB2 = $this->CI->load->database('second',TRUE);
          if(FALSE !== $this->DB2->conn_id)
          {
            return $this->DB2;
          }
          else
          {
            return FALSE;
          }
        }
      }



  1. Hvordan bruger man en fremmednøgle i sqlite?

  2. hvordan man vælger værdien fra underforespørgselsresultatet

  3. Spring JdbcTemplate opdatering Postgis geografi kolonne

  4. Sådan returneres dynamiske kolonner fra grupperede værdier i SQL Server (lagret procedure)