Centos6.5基於MariaDB10.x 主從複製高可用簡單詳解

主從複製目的:mysql

mysql服務器穩定性提高,避免單臺mysql服務器宕機後影響整個業務,當出現宕機問題後,能夠當即可以使從機提高爲新的主服務器。從而實現sql高可用冗餘性。linux


1、演示環境web

os:centos6.5sql

sql:mariadb-10.0.12shell

iptables off數據庫

selinux disabledcentos

已裝組件:服務器

Development toolside

Server Platform Development測試

主機master:10.19.90.197

從機slave:10.19.90.111


2、(注:sql安裝不演示,請參考http://ssc4469.blog.51cto.com/6315913/1627739裏的mariadbab安裝,另外我這裏演示的數據庫版本一致的)

master服務器配置:

一、中止服務

# /etc/init.d/mysqld stop

二、修改mysql配置文件,/etc/my.cnf,我這裏僅修改了兩項參數,如圖所示,一個是mysql日誌路徑,一個是server-id爲1

wKiom1UqaAvj_n6_AAGjCSjo0C4625.jpg

三、建立binlog目錄,修改屬組

# mkdir -pv /mydata/binlogs/
# chown -R mysql:mysql /mydata/binlogs/

四、啓動mysql服務,查看啓動信息

# /etc/init.d/mysqld start

wKioL1Uqas6xyrrzAAEz9NPQLkc242.jpg五、登陸mysql 受權遠程用戶

MariaDB [(none)]> grant replication slave,replication client on *.* to '用戶'@'10.19.90.111' identified by '密碼';    //注:用戶密碼必須是當前sql已建立的用戶及密碼

MariaDB [(none)]> flush privileges;   //刷新MySQL的系統權限相關表


slave服務器配置:

一、中止服務

# /etc/init.d/mysqld stop

二、修改mysql配置文件,/etc/my.cnf,我這裏僅修改了兩項參數,如圖所示,一個是啓用mysql中繼日誌路徑,一個是server-id爲2

wKiom1UqayOBUdMuAADbvLtDRy4313.jpg

三、建立binlog目錄,修改屬組

# mkdir -pv /mydata/binlogs/
# chown -R mysql:mysql /mydata/binlogs/

四、啓動mysql服務,查看啓動信息

# /etc/init.d/mysqld start

五、鏈接mysql,查看中繼日誌狀態:

(注:中繼日誌:它其實跟複製相關的,與二進制日誌幾乎相同,只不過它不是用於記錄事件的,而是做爲讀取數據的源而且在本地執行的,固然中繼日誌是在從服務器上)

wKioL1UqbbGCjvEvAAJR3q6MHOU033.jpg

六、查看驗證(此時沒有文件)

# ls /mydata/relaylogs

七、登陸mysql 受權遠程用戶

MariaDB [(none)]> grant replication slave,replication client on *.* to '用戶'@'10.19.90.197' identified by '密碼';    //注:用戶密碼必須是當前sql已建立的用戶及密碼

MariaDB [(none)]> flush privileges;   //刷新MySQL的系統權限相關表


3、查看master、slave節點狀態及啓用slave節點

wKiom1UqbunBpekKAANwS9Sy0us186.jpg

二、maser查看日誌狀態:

wKiom1Uqc3yDzmZqAAEWlh3-y44770.jpg

三、slave節點查看同步狀態(注:配圖是已經同步中的狀態,實際剛建立完畢,Slave_IO_Running: No,Slave_SQL_Running: No,主要就是看這兩項參數

wKiom1Uqc-rR9dNlAAP5JCRVh-E752.jpg

注:show slave status 解釋  

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.19.90.197
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000002
          Read_Master_Log_Pos: 609
               Relay_Log_File: relay-bin.000006
                Relay_Log_Pos: 818
        Relay_Master_Log_File: master-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
      
SHOW SLAVE STATUS會返回如下字段:
Slave_IO_State
SHOW PROCESSLIST輸出的State字段的拷貝。SHOW PROCESSLIST用於從屬I/O線程。若是線程正在試圖鏈接到主服務器,正在等待來自主服務器的時間或正在鏈接到主服務器等,本語句會通知您

Master_User
被用於鏈接主服務器的當前用戶。

Master_Port
當前的主服務器接口。

Connect_Retry
–master-connect-retry選項的當前值

Master_Log_File
I/O線程當前正在讀取的主服務器二進制日誌文件的名稱。

Read_Master_Log_Pos
在當前的主服務器二進制日誌中,I/O線程已經讀取的位置。

Relay_Log_File
SQL線程當前正在讀取和執行的中繼日誌文件的名稱。

Relay_Log_Pos
在當前的中繼日誌中,SQL線程已讀取和執行的位置。

Relay_Master_Log_File
由SQL線程執行的包含多數近期事件的主服務器二進制日誌文件的名稱。

Slave_IO_Running
I/O線程是否被啓動併成功地鏈接到主服務器上。

Slave_SQL_Running
SQL線程是否被啓動。

Replicate_Do_DB,Replicate_Ignore_DB
使用–replicate-do-db和–replicate-ignore-db選項指定的數據庫清單。

Replicate_Do_Table,Replicate_Ignore_Table,Replicate_Wild_Do_Table,Replicate_Wild_Ignore_Table
使用–replicate-do-table,–replicate-ignore-table,–replicate-wild-do-table和–replicate-wild-ignore_table選項指定的表清單。

Last_Errno,Last_Error
被多數最近被執行的查詢返回的錯誤數量和錯誤消息。錯誤數量爲0而且消息爲空字符串意味着「沒有錯誤」。若是Last_Error值不是空值,它也會在從屬服務器的錯誤日誌中做爲消息顯示。

更多相關請參考:http://zhumeng8337797.blog.163.com/blog/static/10076891420115732244591/
或自行google,關鍵詞:「show slave status」

四、啓動slave同步鏈接服務:

MariaDB [(none)]> start slave
    -> ;
Query OK, 0 rows affected, 1 warning (0.00 sec)

五、slave節點驗證文件查看:

wKioL1Uqd3iypXKwAABw3Y0Dw5A193.jpg

六、slave節點同步狀態查看:

wKiom1UqdnWCNicjAACuo9OLgaY181.jpg


4、master建立庫,測試slave是否同步,這幾步操做不在進行演示,你們本身去試試就OK,很簡單、

5、我這裏講下,mysql主從同步,如何同步已有的數據。

問題:本來197這臺服務器最開始是單項sql服務器,剛纔建立的主從同步,不能同步以前的庫和數據,下面我給你們講下這個問題。

解決方法:

主機開兩個shell窗口,一個進入mysql,一個是shell

一、master 主機阻斷寫操做

MariaDB [(none)]>  FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

MariaDB [zentao]> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000002 |     2040 |              |                  |
+-------------------+----------+--------------+------------------+

二、另外一個shell導出master主機相應的數據庫

mysqldump -u root -p --opt -R zentao > /opt/zento-0412.sql

三、解鎖剛纔的鎖定

MariaDB [(none)]>  UNLOCK TABLES;

四、同步導出的數據

scp /opt/zentao-0412.sql root@10.19.90.111:/opt/

五、slave主機

中止slave

MariaDB [(none)]> stop slave;
Query OK, 0 rows affected (0.03 sec)

六、建立mysql庫 

create database zentao;

七、導入數據

mysql -uroot -p'密碼' zentao < /opt/zentao-0412.sql

八、從啓slave

MariaDB [(none)]> reset slave;
Query OK, 0 rows affected (0.00 sec)

6、驗證

登陸:master數據庫鏈接的web端,後臺建立一個新用戶,以下:

wKioL1UqhPrjJAynAADXMlA4XlY181.jpg


登陸master數據庫查看 user表 是否有數據寫入;

wKioL1UqhZaB3XDiAAFZsmBMkyQ007.jpg

登陸slave數據庫查看對應的表是否有數據同步過來;

我這裏已同步了 ,懶得寫了。。。。。。

特別注意注意:估計有人建立後同步數據庫時,好比主庫建立一條數據同步沒事,可是修改一條數據沒法同步,重啓slave  在show slave status,會看到Last_SQL_Error:1062  報錯 ,這裏請修改從庫的my.cof配置文件,在裏面加上

 slave-skip-errors = 1062 、在查看,數據就同步過來了,去掉配置裏的slave-skip-errors = 1062,重啓數據庫,在更新主庫表,在查看從庫對應的數據,一切正常。OK,就這樣。

相關文章
相關標籤/搜索