mysql複製

     mysql複製其實就是把數據從一個節點(master) 拷貝到另外一個節點(slaves), 固然根據應用架構的不一樣,採用的方式也不一樣,MySQL服務器之間的複製使用的是二進制日誌機制.對master的更新與變更都會做爲事件(event)記錄在日誌中,日誌中的信息會隨變化的不一樣被記錄成不一樣的格式.slaves被配置成從master讀取日誌,而且執行二進制日誌中的事件到slave本地數據庫.一旦master啓動二進制日誌功能,那麼全部語句操做都會被記錄下來,每個slave會收到一份整個日誌內容的拷貝.slave的責任就是決定日誌中的哪條語句須要被執行,而咱們不能經過配置master來僅僅記錄某些特定的事件.若是您沒有另行指定,在主服務器二進制日誌中的全部事件都在slave上執行.若是須要,還能夠配置slave僅應用來自於特定數據庫或表的事件.mysql


根據上圖來講說mysql複製的工做機制,複製的過程在主從架構中通常是有三個線程來完成複製工做的,主服務器上dump thread ,從服務器I/O thread ,從服務器sql  thread, 若是想使用多線程的話須要打補丁的, 根據上圖一主一從的架構複製是這樣工做的,主服務器將操做寫入二進制日誌,由主服務器上的dump線程將日誌發送到從服務器上的I/O線程,而後存儲爲中繼日誌,而由sql線程根據中繼日誌將數據寫入從服務器中,下面來配置下這樣的複製架構,
*********************************************************************************************************************************************sql

配置主從複製
一,master和slave上編譯安裝mysql   這裏使用目前最新的mysq版本5.5.25a
數據庫

  
  
  
  
  1. 下載以下兩個軟件包到/usr/srC目錄  
  2. cmake-2.8.8.tar.gz  
  3. mysql-5.5.25a.tar.gz  
  4. 開始安裝配置,主從服務器的配置同樣,  
  5. #cd /usr/src  
  6. #tar xzvf cmake-2.8.8.tar.gz  
  7. #cd cmake-2.8.8  
  8. #./bootstrap  
  9. #make  
  10. #make install  
  11. #cd /usr/src  
  12. #tar xzvf mysql-5.5.25a.tar.gz  
  13. #cd mysql-5.5.25a  
  14. #cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  
  15. -DMYSQL_DATADIR=/data/mysql \ 
  16. -DSYSCONFDIR=/etc \  
  17. -DWITH_INNOBASE_STORAGE_ENGINE=1 \  
  18. -DWITH_ARCHIVE_STORAGE_ENGINE=1 \  
  19. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \  
  20. -DWITH_READLINE=1 \  
  21. -DWITH_SSL=system \  
  22. -DWITH_ZLIB=system \  
  23. -DWITH_LIBWRAP=0 \  
  24. -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \  
  25. -DDEFAULT_CHARSET=utf8 \  
  26. -DDEFAULT_COLLATION=utf8_general_ci  
  27. #make  
  28. #make install  
  29. #useradd -r mysql 
  30. #mkdir -p /data/mysql 
  31. #chown -R mysql.mysql /usr/local/mysql/ 
  32. #/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql 
  33. #cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf 
  34. #vim /etc/my.cnf 
  35. [mysqld]  在mysqld配置中添加
  36. datadir = /data/mysql 
  37.  
  38. #cp -p /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld 
  39. #chkconfig mysqld on 
  40. #service mysqld restart 

二,配置主從複製,
1, 在主服務器上作以下操做bootstrap

  
  
  
  
  1. #/usr/local/mysql/bin/mysql -e "GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO test@10.0.0.2 IDENTIFIED BY 'passwd';" 
  2. #vim /etc/my.cnf 要保證mysqld配置段裏面有如下兩行 
  3. log-bin=mysql-bin 
  4. sync_binlog=1 innodb_flush_logs_at_trx_commit=1
  5. server-id       = 1 
  6.  
  7. #service mysqld restart
  8.  
  9. # /usr/local/mysql/bin/mysql -e "SHOW MASTER STATUS"; 記住下面的file字段跟Position待會有用
    • +------------------+----------+--------------+------------------+
    • | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    • +------------------+----------+--------------+------------------+
    • | mysql-bin.000002 |      350 |              |                  |
    • +------------------+----------+--------------+------------------+

2.在從服務器上作如下配置
vim

  
  
  
  
  1. #vim /etc/my.cnf  要保證mysqld配置段裏面有以下  
  2. relay-log = mysql-relay  
  3. read_only = ON  
  4. skip_slave_start=1
  5. #log-bin=mysql-bin  
  6. server-id       = 12  
  7.   
  8. #service mysqld restart
  9.  
  10. #/usr/local/mysql/bin/mysql -e "CHANGE MASTER TO MASTER_HOST = '10.0.0.1',MASTER_USER = 'test',MASTER_PASSWORD = 'passwd',MASTER_LOG_FILE = 'mysql-bin.000002',MASTER_LOG_POS = 350;" 
  11. #/usr/local/mysql/bin/mysql -e "START SLAVE;" 

ok, 基本已經配置好了,能夠進行測試了,在主服務器上建一數據庫,而後在從服務器上看有沒有複製過來便可,
*********************************************************************************************************************************************
上面主從的複製基本配置好了,下面來擴展下配置,須要注意的是下面每一個小段都是一個知識點,並非關聯起來的,根據本身的須要配置,

如何設置半同步複製, 服務器

  
  
  
  
  1. # 在主服務器上作如下配置 
  2. mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';   
  3. mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;   
  4. mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000
  5.  
  6. #vim /etc/my.cnf   
  7. [mysqld]   
  8. rpl_semi_sync_master_enabled=1   
  9. rpl_semi_sync_master_timeout=1000  
  10.  
  11.  
  12. #在從服務器上作如下配置 
  13. mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';   
  14. mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;   
  15. mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;  
  16.  
  17. #vim /etc/my.cnf 
  18. [mysqld]   
  19. rpl_semi_sync_slave_enabled=1   


複製的過濾,配置以下多線程

  
  
  
  
  1. #在主服務器上實現複製過濾,不建議在主服務器上作 
  2. #vim /etc/my.cnf 
  3. [mysqld] 
  4. binlog-do-db=testdb  #表示只保存testdb的二進制日誌, 
  5.  
  6.  
  7. #在從服務器上實現複製過濾, 也建議在從服務器上作過濾, 
  8. #vim /etc/my.cnf 
  9. [mysqld] 
  10. replicate_do_db=testdb #表示只複製某個數據庫 
  11. rpplicate_ignore_db=testdb  #表示不復制某個數據庫 
  12.  
  13. replicate_do_table=testdb.t1  表示只複製testdb庫裏面的t1表 
  14. replicate_ignore_table=testdb.t1 表示不復制某個庫的某個表 
相關文章
相關標籤/搜索