1. 程式人生 > >mysql-配置主從數據庫,實現讀寫分離

mysql-配置主從數據庫,實現讀寫分離

參考 image 增加 mysql- pan 位置 span 主從同步 原則

主從分離的原則:所有的寫操作在主數據庫中進行,因為主從分離的原理是涉及到同步數據,那就可能會出現延遲或者其他問題,就可能會出現臟數據。

所以,在從庫中進行的讀操作也必須是有一定容忍性的數據,例如日誌等。

例如需要註意,如果一個業務中有讀和寫的操作。

那麽這個操作的庫必須是主庫,因為這個涉及到事務,需要非常小心。

主從同步的原理:

從數據庫後臺線程請求主數據庫的更新數據,主數據庫後臺線程接收到請求後會讀取bin-log文件內容,然後放到從庫的請求響應中。

從庫接收到響應後,會將接收到的內容放到relay-log文件中,然後讀取這個文件中同步過來的sql,然後在執行一遍。

好了,下面先新增一個從數據庫:

    1,復制一個已經安裝好的mysql就好
    2,修改新mysql的相關配置(端口,安裝目錄,數據目錄),在my.ini文件中修改port,basedir,datadir
    3,為新的mysql創建數據目錄(從mysql的安裝目錄中拷貝data文件夾);
    4,打開cmd命令窗口,為新的mysql創建windows系統服務mysqld install MySQL2  --defaults-file="D:\MySQL Server 5.5 Copy\my.ini"
5,檢查創建的系統服務,並啟動測試;

技術分享圖片

到這裏,就把從數據庫搞好了。

接下來就是配置主從數據庫了。

1.在主數據的my.ini文件中增加如下信息:

server-id:3306//給數據庫服務的唯一標識,一般為大家設置服務器Ip的末尾號,在一個集群中,這個id是不能重復的;
log-bin=master-bin://開啟二進制文件;後面設置的這個master-bin就是二進制文件的名字前綴(名字);
log-bin-index=master-bin.index//開啟二進制文件的索引;名字一般為log-bin.index

2.啟動主數據庫,執行show master status;

mysql> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |      107 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set

只要能查詢到信息,說明主庫OK了。

這裏要註意上面顯示的Postion是指當前bin-log文件記錄到的位置,如果你的從數據庫可以對過去的數據既往不咎,那你在下面設置同步時可以將起點設置為最新的Postion,不過這樣會出現數據不一致的情況,看情況選擇吧。

3.配置從數據庫

在從數據的my.ini文件中增加如下信息:

server-id=3307;//不一定3307,隨你
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index

4.啟動從服務器

5.讓從數據庫指定master庫,並且設置同步數據的信息

在從數據庫的命令行中運行下面的這一句命令

change master to master_host=‘127.0.0.1‘,
master_user=‘root‘,
master_password=‘admin‘,
master_port=3306,
master_log_file=‘master-bin.000001‘,
master_log_pos=107;

解釋一下,最後master_log_pos=107的作用是指定請求同步Master的bin-log的哪一行數據之後的內容;

6.完事了,修改主數據庫的數據,然後測試從數據庫的數據是否跟著同步修改了呢。

java項目如何進行讀寫分離?可以看我另一篇文章參考下:

https://www.cnblogs.com/tinyj/p/9864128.html

mysql-配置主從數據庫,實現讀寫分離