MySQL主從同步配置

MySQL主從同步配置

爲何要作主從同步?

  • 在很是複雜的業務中,常常會碰到有sql須要鎖表的場景,致使暫時不能讀取數據,那麼就影響運行中的業務,而使用主從複製,讓主庫複製寫,從庫複製讀,這樣就算主庫出現了鎖表的情景,經過讀取從庫也依然能夠保證業務的正常運做。
  • 作數據的熱備時很可靠
  • 隨着業務量愈來愈大,I/O訪問頻率太高,單機沒法知足,此時作多庫的存儲,下降磁盤I/O訪問的頻率,提升單個機器的I/O性能。

主從配置原理?

簡單說就是主庫開啓logbin,從數據庫啓動的那一刻起將保存全部修改數據庫結構或內容的一個文件。mysql主從複製是一個異步的複製過程,主庫發送更新事件到從庫,從庫讀取更新記錄,並執行更新記錄,使得從庫的內容與主庫保持一致。在主庫裏,只要有更新事件出現,就會被依次地寫入到binlog裏面,以後會推到從庫中做爲從庫進行復制的數據源。mysql

配置主從同步

準備工做:sql

  • 12.122.132.22 :3306 主庫
  • 12.122.132.23 :3306 從庫
  • 數據庫版本 5.7+

首先安裝好兩臺mysql,而且啓動:shell

systemctl start mysqld; #啓動mysql
systemctl stop mysqld;#中止mysql
systemctl reload mysqld; #重啓mysql

登陸主庫,建立一個用戶用於主從複製:數據庫

-- 用戶名 SimpleWu 密碼123456
CREATE USER 'SimpleWu'@'*' IDENTIFIED BY '123456';
-- 執行刷新權限:
flush privileges;

登陸兩個數據庫同時建立數據庫(CORE):安全

CREATE DATABASE CORE;

關閉兩個數據庫。服務器

修改主庫配置文件:異步

[mysqld]
#開啓二進制日誌
log-bin=mysql-bin
#設置server-id
server-id=1
binlog-do-db = game
binlog-ignore-db = mysql  
binlog-ignore-db = test  
binlog-ignore-db = information_schema

log-bin:設置logbin文件名稱,最好不要改動位置。性能

server-id:該id主從之間必須是惟一,惟一的標識。日誌

binlog-do-db:指定能夠主從同步的數據庫,多數據庫則配置多行。code

binlog-ignore-db:指定不能夠主從同步的數據庫,多數據庫則配置多行

修改從庫配置文件:

#設置server-id,必須惟一
server-id=2

只須要將服務id設置爲與主庫不一樣的ID既可;如今啓動兩個數據。

啓動後須要查看主庫log-bin信息

SHOW MASTER STATUS; -- 主庫執行

獲取到:

+------------------+----------+--------------+----------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                 |
+------------------+----------+--------------+----------------------------------+
| mysql-bin.000012 | 619      | core         | mysql,information_schema,sys     |
+------------------+----------+--------------+----------------------------------+

以目前位置開始主從同步,在從庫執行SQL將從庫關聯主庫:

CHANGE MASTER TO
MASTER_HOST='12.122.132.22', -- 主庫ip
MASTER_USER='SimpleWu', -- 用戶名
MASTER_PORT=3306, -- 端口號
MASTER_PASSWORD='123456', -- 密碼
MASTER_LOG_FILE='mysql-bin.000012', -- 開始文件
MASTER_LOG_POS=619; -- 開始位置

執行改SQL後咱們須要查看咱們目前的配置信息:

SHOW SLAVE STATUS; -- 從庫執行,查看主從狀態

能夠看到Slave IO STATE爲空表明未鏈接上,這時候從庫啓動複製:

START SLAVE; -- 從庫執行,啓動從庫

啓動後能夠再次查看從庫狀態,看到Slave IO STATE變成Waiting for master to send event表明主從同步成功。

這個時候在主庫建立一張表:

-- 主庫執行
CREATE TABLE `TB_USER`(
    ID VARCHAR(55) PRIMARY KEY NOT NULL,
    `NAME` VARCHAR(55) 
);

建立成功後登陸從庫,會發下多了一張表,這個時候咱們的主從複製就已經搭建完成了。圖就不貼了,貼圖不如本身動手體會效果。

啓動,關閉從庫:

START SLAVE; # 啓動從庫
STOP SLAVE; # 關閉從庫

在修改從庫的master配置以前必定要關閉從庫,在修改配置信息。

主從同步延遲

在主從同步過程當中由於全部的SQL必須都要在從服務器裏面執行一遍,可是主服務器若是不斷的有更新操做源源不斷的寫入, 那麼一旦有延遲產生, 那麼延遲加劇的可能性就會原來越大。雖然這個問題又不能徹底解決,可是咱們能夠採起一些措施來緩解。

咱們知道由於主服務器要負責更新操做, 他對安全性的要求比從服務器高, 全部有些設置能夠修改,好比sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之類的設置,而slave則不須要這麼高的數據安全,徹底能夠講sync_binlog設置爲0或者關閉binlog,innodb_flushlog, innodb_flush_log_at_trx_commit也 能夠設置爲0來提升sql的執行效率 這個能很大程度上提升效率。另外就是使用比主庫更好的硬件設備做爲slave。

相關文章
相關標籤/搜索