首頁  >  文章  >  資料庫  >  詳解Mysql資料庫之主從分離實例程式碼

詳解Mysql資料庫之主從分離實例程式碼

黄舟
黄舟原創
2017-03-27 13:12:051639瀏覽

這篇文章主要介紹了Mysql資料庫之主從分離實例程式碼,MySQL資料庫設定讀寫分離,可以讓資料庫的寫入操作和讀取操作在不同伺服器上執行,提高並發量和相應速度。

介紹

MySQL資料庫設定讀寫分離,可以讓資料庫的寫入操作和讀取操作在不同伺服器上執行,提高並發量和對應速度。

現在的網站一般大點的,都採用有資料庫主從分離、讀寫分離,即起到備份作用也可以減輕資料庫的讀寫的壓力,一直聽說過這些,但是自己從沒有自己動手親手實踐過,今天有時間實踐一下,記錄過程。

實驗環境

我準備了兩台伺服器,一個是本機電腦,一個是遠端vps,分別在兩台機上裝的有資料庫。
MySQL安裝我就不介紹了,這裡要注意的是:MySQL安裝的版本最好一致,如果不一致,低版本向高版本讀取的時候可能有問題,最好保持一致。

主函式庫master

45.78.57.4  centos 7 Linux系統,  mysql版本  5.1.73

#從函式庫slave

本機127.0.0.1  macOs系統,  mysql版本  5.1.73

#設定

建立用戶

在主庫建立一個用戶,用於從庫讀取主庫的執行日誌。

需要在mysql命令列執行,需要先登入命令列

程式碼如下:

GRANT REPLICATION SLAVE ON *.* TO 'test'@'45.78.57.4' IDENTIFIED BY 'test';

修改my.cnf

linux系統在/etc/my.cnf ,mac系統在安裝的MySQL的目錄,windows也是。

在my.cnf檔案裡增加一下程式碼

server-id = 1 //数据库ID号
log-bin=master-bin //启用二进制日志
log-bin-index=master-bin.index //二进制日志名称

這裡注意不要放在檔案的結尾,要放在前面,即[mysqld]後,這裡放上我的my.cnf內容

[mysqld]
server-id=1
log-bin=master-bin
log-bin-index=master-bin.index

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
max_allowed_packet=100M

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

查看狀態

登陸mysql命令列後,輸入show master status,如果出現下面資訊代表主庫配置完成

mysql> show master status;
+-------------------+----------+--------------+------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |  672675 |       |         |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

記錄下File和Position兩個內容,從函式庫配置的時候會用到這個。

從庫配置

在本機電腦(從庫)上找到my.cnf文件,然後添加以下內容,這個配置和主庫的配置意思是一樣的

server-id=2
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index

注意確定和主庫的位置一樣,我就因為位置放置在最後導致一直關聯不上。

關聯主從函式庫

最後一步很重要,登入從函式庫的MySQL指令行,執行下列程式碼,主要是關聯主函式庫的一些資訊。

change master to master_host='45.78.57.4',  #Master 服务器Ip
master_port=3306,
master_user='test',
master_password='test', 
master_log_file='master-bin.000001', #Master日志文件名
master_log_pos=672675; #Master日志同步开始位置

注意是否執行成功,如果執行失敗就好好檢查下程式碼,看看哪裡寫錯了。

如果執行正常,就啟動從函式庫slave,並查看下連線狀態。

//需要再mysql命令行执行 
start slave; 
show slave status\G; //查看slave连接状态

狀態資訊

        Slave_IO_State: Waiting for master to send event
         Master_Host: 45.78.57.4
         Master_User: test
         Master_Port: 3306
        Connect_Retry: 60
       Master_Log_File: master-bin.000001
     Read_Master_Log_Pos: 672913
        Relay_Log_File: slave-relay-bin.000044
        Relay_Log_Pos: 504
    Relay_Master_Log_File: master-bin.000001
       Slave_IO_Running: Yes
      Slave_SQL_Running: Yes

注意!

這兩個狀態必須為Yes才算成功,如果不是,則檢查上面步驟那一步配置錯誤。

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

測試

現在你在主庫上新增一條數據,看看從庫上是否有一個相同的數據,如果有則配置正常,功能使用正常。

主從分離的原理主要是:開啟主庫的執行日誌功能,然後從庫讀取主庫的日誌訊息,然後將主庫執行過的SQL語句在從庫上面執行一遍就做到主從分離,主從資料保持一直,備份資料的功能。

以上是詳解Mysql資料庫之主從分離實例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn