제목 | CI로 mysql replacatiion 된 DB 사용하기 | ||
---|---|---|---|
글쓴이 | 한대승(불의회상) | 작성시각 | 2013/10/16 16:29:20 |
|
|||
별도의 클래스로 구현하여 처리하면 되겠다 싶어 열심히 만들어 보는데.... 이게 뭔 삽질이래 싶더군요. 그래서 그냥 단무지(단순, 무식, 지X...)로 처리 하기로 했습니다. 먼저 config/database.php 설정입니다. $active_group = 'slave'; $active_record = TRUE; $db['slave']['hostname'] = 'mysql:host=192.168.0.1;port=3306'; $db['slave']['username'] = 'test'; $db['slave']['password'] = 'test'; $db['slave']['database'] = 'test'; $db['slave']['dbdriver'] = 'pdo'; $db['slave']['dbprefix'] = ''; $db['slave']['pconnect'] = FALSE; $db['slave']['db_debug'] = TRUE; $db['slave']['cache_on'] = FALSE; $db['slave']['cachedir'] = ''; $db['slave']['char_set'] = 'utf8'; $db['slave']['dbcollat'] = 'utf8_general_ci'; $db['slave']['swap_pre'] = ''; $db['slave']['autoinit'] = TRUE; $db['slave']['stricton'] = FALSE; $db['master']['hostname'] = 'mysql:host=192.168.0.2;port=3306'; $db['master']['username'] = 'test'; $db['master']['password'] = 'test'; $db['master']['database'] = 'test'; $db['master']['dbdriver'] = 'pdo'; $db['master']['dbprefix'] = ''; $db['master']['pconnect'] = FALSE; $db['master']['db_debug'] = TRUE; $db['master']['cache_on'] = FALSE; $db['master']['cachedir'] = ''; $db['master']['char_set'] = 'utf8'; $db['master']['dbcollat'] = 'utf8_general_ci'; $db['master']['swap_pre'] = ''; $db['master']['autoinit'] = TRUE; $db['master']['stricton'] = FALSE; 다음으로 core/My_Model.php 입니다. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); // DB Replacation Model class MY_Model extends CI_Model { protected $wdb; public function __construct() { parent::__construct(); $this->load->database(); $this->wdb = $this->load->database('master', TRUE); } public function map($fil, $arr) { $data = array(); foreach($fil as $name) { isset($arr[$name]) ? $data[$name] = $arr[$name] : NULL; } return $data; } }* MY_Model 안에 있는 map() 함수는 사용자 함수 입니다. 모델 구현시는 아래와 같이 합니다. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Album_model extends MY_Model { public function __construct() { parent::__construct(); } public function getAll() { return $this->db->get('album')->result(); } public function addAlbum($arr) { $ret = FALSE; $data = $this->map(array('artist', 'title'), $arr); if(!empty($data)) { $this->wdb->insert('album', $data); $ret = $this->wdb->insert_id(); } return $ret; } public function deleteAlbum($id) { if(!empty($id)) { $this->wdb->where(array('id' => $id)); $this->wdb->delete('album'); } } public function updateAlbum($arr, $id) { $ret = FALSE; $data = $this->map(array('artist', 'title'), $arr); if(!empty($id) && !empty($data)) { $this->wdb->where(array('id' => $id)); $this->wdb->update('album', $data); $ret = TRUE; } return $ret; } }* 무식하지만 차~~암 쉽죠! 테스트용 컨트롤러 입니다. public function album_test() { $this->output->enable_profiler(); $this->load->model('mysql/album_model'); echo "<pre>"; $data = array('artist' => 'hoksi', 'title' => 'aaaa'); $id = $this->album_model->addAlbum($data); print_r($this->album_model->getall()); $data['title'] = 'bbb'; $this->album_model->updateAlbum($data, $id); print_r($this->album_model->getall()); $this->album_model->deleteAlbum($id); print_r($this->album_model->getall()); } *결과 Array ( [0] => stdClass Object ( [id] => 88 [artist] => hoksi [title] => aaaa ) ) Array ( [0] => stdClass Object ( [id] => 88 [artist] => hoksi [title] => bbb ) ) Array() |
|||
다음글 | CodeIgniter Cheet Sheets (3) | ||
이전글 | 한글언어팩 누락 부분 (1) | ||
변종원(웅파)
/
2013/10/16 16:51:12 /
추천
0
slave가 default?
|
한대승(불의회상)
/
2013/10/16 16:58:37 /
추천
0
웅파// DB세션을 사용할 경우 문제가 발생 할 수 있겠네요.
프로파일링이나 세션의 경우 default를 기준으로 되어 있어서요. |
양승현
/
2013/10/16 17:10:14 /
추천
0
L4장비나 따로 스위치가 없는경우 유용한 방법이네요.
전 과감히 master-master로 하여 1개 아이피를 앞에 물려 사용중입니다. 깨지면? ㅋㅋ.. 대책없는 상태로 운영중.. 근데 3~4달간 안깨지고 잘 되고있네용. |
변종원(웅파)
/
2013/10/16 17:13:57 /
추천
0
master - slave replication 잘 깨진다는 소리가 있어 걱정을 했는데
6월말부터 아직까지 잘 운영되고 있네요. 초기 운영미숙으로 한번 재연결 하고 이제는 2주에 한번 정비(innodb 증분백업분 및 전체 db 백업 후 테이블 초기화)하는데 잘 돌아갑니다. |