Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Codeigniter chuyển sang cơ sở dữ liệu thứ cấp nếu cơ sở dữ liệu chính gặp sự cố

Chà, tôi không biết liệu cách này có hiệu quả không, nhưng bạn thực sự có thể thử cách này:

1) tạo 2 nhóm cài đặt cơ sở dữ liệu (trong 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) Đặt deubg off để tránh hiển thị lỗi db và thực sự giết chết tập lệnh của bạn (làm điều đó cho cả hai):

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

3) Bạn có thể chuyển TRUE cho tham số thứ hai trong khi tải thư viện, để nó thực sự có giá trị trả về; nó trả về chính đối tượng cơ sở dữ liệu:

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

Bây giờ, bạn chỉ có thể kiểm tra tài nguyên "ID kết nối" để xem kết nối đã được thiết lập hay chưa:

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

Bây giờ bạn có thể quyết định tải một DB khác trong trường hợp cái đầu tiên không tải. Nhược điểm là, bạn thực sự không biết tại sao kết nối db không hoạt động, mặc dù ...

Về cách triển khai điều này, bạn có thể muốn thử mở rộng lớp cơ sở dữ liệu hoặc tốt hơn, tạo thư viện của riêng bạn mà trên thực tế chỉ kiểm tra xem kết nối có tồn tại hay không và tải nó thay vì thư viện cơ sở dữ liệu. Vì nó trả về một đối tượng cơ sở dữ liệu (ngoại trừ khi tất cả 2 kết nối không thành công), sau đó bạn có thể làm việc trên đối tượng đó như bạn làm trên lớp cơ sở dữ liệu bình thường:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql tạo một thủ tục được lưu trữ từ nhiều thủ tục được lưu trữ

  2. Cách cập nhật dữ liệu bằng cách sử dụng onclick thậm chí CHECKBOX mà không cần gửi nút trong php và mysql

  3. Đếm số lượng truy vấn mỗi lần tải trang với PDO

  4. Tải xuống Excel bị kẹt 188kb

  5. Tại sao chúng ta cần sử dụng Phím ngoại?