rhel6下,mysql 5.6.14 主從複製(也稱mysql AB複製)環境配置[基於binlog]


更多博文請關注:沒有傘的孩子必須努力奔跑 (www.xuchanggang.cn)python


1、mysql主(稱master)從(稱slave)複製的原理:

      (1). master將數據改變記錄到二進制日誌(binary log)中,也便是配置文件log-bin指定的文件(這些記錄叫作二進制日誌事件,binary log events)
      (2). slave將master的binary log events拷貝到它的中繼日誌(relay log)
      (3). slave重作中繼日誌中的事件, 將改變反映它本身的數據 (數據重演)

附簡要原理圖:mysql

221725639.png

spacer.gif
2、mysql主從複製支持的類型:
    (1).基於語句的複製:在主服務器上執行的SQL語句,在從服務器上執行一樣的語句.MySQL默認採用基於語句的複製,效率比較高
   (2).基於行的複製:把改變的內容直接複製過去,而不關心到底改變該內容是由哪條語句引起的 . 從mysql5.0開始支持
   (3).混合類型的複製: 默認採用基於語句的複製,一旦發現基於語句的沒法精確的複製時,就會採用基於行的複製.


3、主從配置須要注意的地方:linux

   (1).主DB server和從DB server數據庫的版本一致
   (2).主DB server和從DB server數據庫數據一致[ 這裏就會能夠把主的備份在從上還原,也能夠直接將主的數據目錄拷貝到從的相應數據目錄]
   (3).主DB server開啓二進制日誌,主DB server和從DB server的server_id都必須惟一


4、主從配置的簡要步驟:sql

附簡要示意圖:數據庫

221749365.png

spacer.gif
1.主DB SERVER上的配置
   (1).安裝數據庫
   (2).修改數據庫配置文件,指明server_id,開啓二進制日誌(log-bin)
   (3).啓動數據庫,查看當前是哪一個日誌,position號是多少
   (4).登錄數據庫,受權用戶[ip地址爲從機IP地址,若是是雙向主從,這裏的還須要受權本機的IP地址(此時本身的IP地址就是從IP地址)]
   (5).備份數據庫[記得加鎖和解鎖]
   (6).傳送備份到從DB server上
   (7).啓動數據庫
如下步驟,爲單向主從搭建成功,想搭建雙向主從須要的步驟:
   (1).登錄數據庫,指定主DB server的地址,用戶,密碼等信息[此步僅雙向主從時,須要]
   (2).開啓同步,查看狀態
2.從DB SERVER上的配置
  (1).安裝數據庫
  (2).修改數據庫配置文件,指明server_id[若是是搭建雙向主從的話,也要開啓二進制日誌(log-bin)]
  (3).啓動數據庫,還原備份
  (4).查看當前是哪一個日誌,position號是多少[單向主今後步不須要,雙向主從須要]
  (5).指定主DB server的地址,用戶,密碼等信息

  (6).開啓同步,查看狀態vim


5、單向主從環境[也稱 mysql A/B複製]的搭建案例:
1.主DB server和從DB server都安裝相應版本的數據庫,個人兩臺DB server都已經安裝好(5.6.14版本),都會是雙實例,這裏就不演示安裝,能夠參考mysql源碼編譯安裝和mysql多實例配置兩篇文章
注:兩臺機器的的selinux都是disable(永久關閉selinux,請修改/etc/selinux/config,將SELINUX改成disabled),防火牆能夠選擇關閉,開啓的話也行[不行的話,添加防火牆策略]
2.修改主DB server的配置文件(/etc/my.cnf),開啓日誌功能,設置server_id值,保證惟一[client102爲主DB server]
[root@client102 scripts]# vim /etc/my.cnf
# 修改配置文件裏,下面兩個參數:
# 設置server_id,通常建議設置爲IP,或者再加一些數字
server_id =102
# 開啓二進制日誌功能,能夠隨便取,最好有含義
log-bin=mysql3306-bin
3.啓動數據庫服務器,並登錄數據庫,授予相應的用戶用於同步
# 我這裏是多實例mysql,因此啓動是這樣的,若是你們是單實例的,就直接啓動就能夠[/etc/init.d/mysqld start]
[root@client102 scripts]# mysqld_multi start 3306
# 登錄mysql 服務器
[root@client102 scripts]# mysql -uroot -S /usr/local/mysql/mysqld3306.sock -p
# 授予用戶權限用於主從同步
mysql> grant replication slave on *.* to 'kongzhong'@'192.168.1.100' identified by 'kongzhong';
Query OK, 0 rows affected (0.00 sec)
# 刷新受權表信息
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# 查看position 號,記下position 號(很重要,從機上須要這個position號和如今的日誌文件,我這裏是414和mysql3306-bin.000001)
mysql> show master status;
+----------------------+----------+--------------+------------------+-------------------+
| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| mysql3306-bin.000001 |      414 |              |                  |                   |
+----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
4.爲保證主DB server和從DB server的數據一致,這裏採用主備份,從還原來實現初始數據一致
# 臨時鎖表
mysql> flush tables with read lock;
# 我這裏實行的全庫備份,在實際中,咱們可能只同步某一個庫,能夠只備份一個庫
# 新開一個終端,執行以下操做
[root@client102 data]# mysqldump  -p3306 -uroot -p  -S /usr/local/mysql/mysqld3306.sock  --all-databases > /tmp/mysql.sql
# 解鎖
mysql> unlock tables;
# 將備份的數據傳送到從機上,用於恢復
 [root@client102 data]# scp  /tmp/mysql.sql  root@192.168.1.100:/tmp
5.從DB server配置文件只需修改一項,其他用命令行作
[root@client100 ~]# vim /etc/my.cnf
# 設置server_id,通常建議設置爲IP,或者再加一些數字
server_id =100
6.啓動數據庫,還原備份數據
# 啓動數據庫
[root@client100 ~]# mysqld_multi start 3306
# 還原主DB server備份的數據
[root@client100 ~]# mysql -uroot -S /usr/local/mysql/mysqld3306.sock -p < /tmp/mysql.sql
7.登錄數據庫,添加相關參數(主DBserver的ip/端口/同步用戶/密碼/position號/讀取哪一個日誌文件)
[root@client100 ~]# mysql -uroot -S /usr/local/mysql/mysqld3306.sock -p
mysql> change master to
    -> master_host='192.168.1.102',
    -> master_user='kongzhong',
    -> master_password='kongzhong',
    -> master_port=3306,
    -> master_log_file='mysql3306-bin.000001',
    -> master_log_pos=414;
#/*  下面是一部分註解:
#/*  指定主DB server的IP地址
master_host='192.168.1.102'
#/*  指定用於同步的用戶[這個就是咱們在主DB server受權的用戶]
master_user='kongzhong'
#/* 指定用於同步的用戶的密碼
master_password='kongzhong'
#/* 指定主DB server的端口[下面一個例子,能夠重點看這個]
master_port=3306
#/*  指定從DB server 從哪一個日誌文件開始讀[在主DB server上使用show master status查看到日誌]
master_log_file='mysql3306-bin.000001'
#/*  指定 從哪一個POSITION號開始讀
master_log_pos=414
# 開啓主從同步
mysql> start slave;
# 查看主從同步狀態
mysql> show slave status\G;
# 主要看如下兩個參數:[這兩個參數若是是yes就表示主從同步正常]
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
8.下面你們就能夠在主DB server上新建一個表,看是否能同步到從DB server上,我這裏就不測試了
[注:千萬不要在從DB server手動插入數據,那樣數據就不一致,主從就會斷開,須要從新配置了]
若是有問題,能夠嘗試關閉IPTABLES(/etc/init.d/iptables stop)和selinux(setenforce 0:臨時關閉selinux,永久關閉selinux,請修改/etc/selinux/config,將SELINUX改成disabled)

9.上面所搭建的是單向主從,也是用的比較多的,有人想了解雙向主從是如何搭建,其實,就是主DB server和從DB sever都開啓日誌功能,而後在主DB SERVER執行受權用戶[這裏受權的是本身做爲從服務器,也就是這裏的IP地址是主DB server的IP地址],而後再在主DB server上進行chang master操做.有不理解的能夠留言詢問.


    注:文章若有明顯描述錯誤或理論錯誤,請務必在下面留言,給予指正,以避免誤導其餘讀者。謝謝!
相關文章
相關標籤/搜索