1. 程式人生 > >thinkphp laravel 主從複製讀寫分離配置

thinkphp laravel 主從複製讀寫分離配置

首先我們需要兩個mysql伺服器,考慮到像小編這樣,電腦有不可關閉的防火牆,外網各種埠被限制,空餘時間只能在本地玩玩。。。這型別的人還是有很多的!為了大家都能體驗,本教程就教大家在本地安裝兩個mysql服務,模擬不同的mysql伺服器

1、小編使用的是phpstudy,進入安裝目錄,將mysql 複製一份,修改名字為mysql1

這裡寫圖片描述

2、進入 MySQL1 修改my.ini

這裡寫圖片描述
修改port、basedir、datadir 與原來的mysql 區分開來

3、 win + R 輸入cmd 進入mysql1的bin目錄

這裡寫圖片描述

4、輸入 mysqld install mysql1
–defaults-file=”D:\phpStudy\PHPTutorial\MySQL1\my.ini” 執行安裝mysql1 服務
5、 win + R 輸入services.msc 開啟 window服務 找到mysql1 並啟動

這裡寫圖片描述

mysql伺服器準備完畢!
現在配置thinkphp 的配置檔案
//分散式資料庫配置定義
    'DB_DEPLOY_TYPE'=> 1, // 設定分散式資料庫支援
    'DB_RW_SEPARATE'=>true,//配置讀寫分離
    'DB_TYPE' => 'mysql', // 資料庫型別
    'DB_HOST' => '127.0.0.1,127.0.0.1', // 伺服器地址 這個需要注意,根據官方文件相同的寫一次就行,但是伺服器地址相同也不能只寫一個,否則操作的都是第一個伺服器
    'DB_NAME' => 'dt', // 資料庫名
    'DB_USER'
=> 'root', // 使用者名稱 'DB_PWD' => 'cm9vdA==', // 密碼 'DB_PORT' => '3306,3307', // 埠 'DB_CHARSET' => 'utf8', 'DB_PREFIX' => 'dt_', // 資料庫表字首

在讀寫分離的情況下,預設第一個資料庫配置是主伺服器的配置資訊,負責寫入資料,如果設定了DB_MASTER_NUM引數,則可以支援多個主伺服器寫入。其它的都是從資料庫的配置資訊,負責讀取資料,數量不限制。每次連線從伺服器並且進行讀取操作的時候,系統會隨機進行在從伺服器中選擇。

還可以設定DB_SLAVE_NO 指定某個伺服器進行讀操作。

'DB_MASTER_NUM'         =>  1, // 讀寫分離後 主伺服器數量
'DB_SLAVE_NO'           =>  '', // 指定從伺服器序號

伺服器配置完畢,在進行資料庫操作時,框架會為我們選擇資料庫!
可以自行進行資料庫操作與查詢測試下是否讀寫分離了!
開始測試!
先看下原始資料
這裡寫圖片描述
我們先寫一個數據
這裡寫圖片描述
列印一下結果
這裡寫圖片描述
在主伺服器查詢下結果
這裡寫圖片描述
是的,已經成功了!已經讀寫分離了
問題來了!讀寫分離完成了,那自從複製在哪裡配置呢?
框架也沒有說明!
因為這個配置是要在你的資料庫自行配置的!
小編找了一個配置主從複製的案例:
https://blog.csdn.net/lamp_yang_3533/article/details/52264784
好的!跟著步驟來一遍!

資料庫伺服器的引數:
主伺服器(master): IP為127.0.0.1,埠為3306
從伺服器(slave): IP為127.0.0.1,埠為3307
這裡寫圖片描述
主伺服器配置:
這裡寫圖片描述
從伺服器配置:
這裡寫圖片描述
根據教程,小編配置返回的結果並不如意!
如果 Slave_IO_Running 和 Slave_SQL_Running 的值都為 Yes,則說明主從複製的所有配置已成功,即從伺服器已經可以自動與主伺服器的資料庫資料實現同步了。
但是小編的 Slave_IO_Running 為 NO
然後小編找了解決這個問題的方法:https://www.jb51.net/article/27220.htm
小編在D:\phpStudy\PHPTutorial\MySQL1\data\v_jingzhili-PC1.err 找到了錯誤資訊 ,錯誤資訊如下:

180823 15:35:53 [Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=v_jingzhili-PC1-relay-bin' to avoid this problem.
180823 15:35:53 [Note] 'CHANGE MASTER TO executed'. Previous state master_host='', master_port='3306', master_log_file='', master_log_pos='4'. New state master_host='127.0.0.1', master_port='3306', master_log_file='mysql-bin.000008', master_log_pos='498'.
180823 15:36:46 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000008' at position 498, relay log '.\v_jingzhili-PC1-relay-bin.000001' position: 4
180823 15:36:46 [Note] Slave I/O thread: connected to master '[email protected]:3306',replication started in log 'mysql-bin.000008' at position 498
180823 15:36:46 [ERROR] Error reading packet from server: Could not find first log file name in binary log index file ( server_errno=1236)
180823 15:36:46 [ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file', Error_code: 1236
180823 15:36:46 [Note] Slave I/O thread exiting, read up to log 'mysql-bin.000008', position 498

根據介紹小編的報錯原因是因為
伺服器讀mysql-bin.000008這個Log的498這個位置時發生錯誤,這個位置不存在,於是無法同步。
之所以錯誤,原來是小編忽略了這一步
這裡寫圖片描述
小編的是mysql-bin.000001,373
卻直接執行了教程的 master_log_file=’mysql-bin.000008’,master_log_pos=498;

好的知道原因那就重新執行一次

SLAVE STOP; 
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=373; 
SLAVE START; 

這裡寫圖片描述
成功了!
開始測試!
這裡寫圖片描述
哈哈!資料進來了!
到mysql看下主資料庫資料表
這裡寫圖片描述
從伺服器
這裡寫圖片描述
哈哈!成功了!
然後小編根據laravel的官方文件,也配置了下laravel的讀寫分離,也是成功的!
趕緊也是體驗一次!開心一下吧!

相關推薦

thinkphp laravel 主從複製分離配置

首先我們需要兩個mysql伺服器,考慮到像小編這樣,電腦有不可關閉的防火牆,外網各種埠被限制,空餘時間只能在本地玩玩。。。這型別的人還是有很多的!為了大家都能體驗,本教程就教大家在本地安裝兩個mysql服務,模擬不同的mysql伺服器 1、小編使用的是ph

mac下redis配置主從複製分離方法

預設你已經用brew安裝redis,且正常執行。 開啟目錄 $ cd /usr/local/etc/ 檢視檔案,有一個redis.conf,如果沒有find找 $ ls 複製 $ cp redis.conf redis1.conf $ cp redis.co

Redis 主從複製(分離)————哨兵(主從切換)配置(轉載)

當資料量變得龐大的時候,讀寫分離還是很有必要的。同時避免一個redis服務宕機,導致應用宕機的情況,我們啟用sentinel(哨兵)服務,實現主從切換的功能。redis提供了一個master,多個slave的服務。          準備三個redis服務,依次命名資料夾子

redis的主從複製(分離)/哨兵(主從切換)配置

        當資料量變得龐大的時候,讀寫分離還是很有必要的。同時避免一個redis服務宕機,導致應用宕機的情況,我們啟用sentinel(哨兵)服務,實現主從切換的功能。redis提供了一個master,多個slave的服務。          準備三個redis服

redis主從複製,分離以及哨兵的配置

1.Redis主從配置 1.1:安裝redis  具體教程可以看我安裝redis-cluster部落格中的內容,這裡就不再重寫一遍了。 1.2:在/usr/local/目錄下建立redis-jiqun資料夾 mkdir /usr/local/redis-jiqun 1.3

redis的主從複製(分離)、哨兵(主從切換)配置

當資料量變得龐大的時候,讀寫分離還是很有必要的。同時避免一個redis服務宕機,導致應用宕機的情況,我們啟用sentinel(哨兵)服務,實現主從切換的功能。redis提供了一個master,多個slave的服務。          準備三個redis服務,依次命名資料夾子

MYSQL主從複製+分離

案例 搭建MYSQL主從複製 這裡mysql伺服器都裝好了的 yum -y install ntp #裝ntp時間同步 vim /etc/ntp.conf #配置檔案 server 127.127.1.0 fudge 127.127.1.0 strat

mysql主從複製分離之——proxysql應用

一、說明ProxySQL是一個開源的MySQL代理伺服器,這意味著它充當MySQL伺服器和訪問其資料庫的應用程式之間的中介。ProxySQL可以通過在多個數據庫伺服器池之間分配流量來提高效能,並且如果一個或多個數據庫伺服器發生故障,還可以通過自動故障切換到備用資料庫來提高可用性。 系統環境:master1:

Docker Mysql 主從複製+分離

整體規劃 host ----------- ip--------------------port---------------------說明 -----------------192.168.100.30 10088 Keepalived-VIP Proxysql-21 192.168

Java架構學習(三十)redis高階&redis高可用&主從複製&分離&叢集&哨兵機制&持久化RDB儲存&持久化AOF儲存&事務機制&Redis釋出訂閱

redis高階 一、基礎回顧 什麼是redis? 答:redis是非關係型資料庫,使用redis的目的是:減輕資料庫訪問壓力。 資料庫是做IO操作,使用redis是記憶體操作,記憶體資料庫, 效率要比IO效率高。這個就是快取。 如果資料庫值與redis

redis 主從複製 分離 持久化---總結

主從複製模式: slaveof  127.0.0.1:6379   slaveof no one 一僕二主  :一個主機兩個從機,當主機重啟那麼兩個從機地位不變  原地待命,重啟完之後繼續做master,從機能共享主機上的所有的資料,

CentOS6中MySql5.6資料庫主從複製/分離(二)

程式碼層面實現讀寫分離 在文章(一)中我們已經有了兩個資料庫而且已經實現了主從資料庫同步,接下來的問題就是在我們的業務程式碼裡面實現讀寫分離,假設我們使用的是主流的ssm的框架開發的web專案,這裡面我們需要多個數據源。 在此之前,我們在專案中一般會使用一

MySQL主從複製分離與Yii2實現

關於 MySQL的主從複製的配置以及MySQL proxy的配置 在以下這篇文章當中會詳細講到: 或者可以參考這個 接下來我們要說的是在Yii2中是如何實現這個程式碼層級的讀寫分離. Yii2中主從複製和讀寫分離 這裡主要圍繞最新的Yii2英文文件中的一小節“主從複製與讀寫分離”展開進行介紹。為什麼

Redis主從複製,分離及sentinel監控的使用

在有redis基礎的前提下,你肯定會發現redis真的很強大很實用,至少我是這麼覺得的。廢話不多說,本文將會簡單說明redis叢集中主從複製,讀寫分離的實現,以及監控運維工具sentinel的使用。1.redis的主從配置說明主從複製在redis中的實現非常簡單,redis持

redis搭建主從複製分離

準備 關閉RDB持久化修改持久化檔案的儲存位置 啟動Redis redis-server /etc/redis.conf   使用客戶端連線Redis redis-cli   連線成功,接下來就可以愉快的玩耍啦~~~ 主從複製(讀寫分離)

Mysql資料庫的主從複製分離搭建過程與原理介紹

首先說明一下在搭建Mysql資料庫的主從複製與讀寫分離的過程中十分容易出錯,所以在搭建的過程中一定要謹慎注重每一步的細節。傳統資料庫中存在的問題1.傳統資料庫設計時,如果伺服器宕機,將不能為使用者提供服務導致整個系統崩潰.2.如果資料庫突然宕機.會導致資料丟失.3.為了防止資

redis主從複製分離

  主從複製,讀寫分離 Master/Slave 是什麼 master寫入 slave讀取 能幹嘛 讀寫分離,更加安全,效能提升 怎麼玩 一主二僕、薪火相傳、反客為主 周明老師,能夠把長篇大論總結的很精闢。 配從不配主 slaveof 主庫ip 主庫

Redis叢集主從複製,分離(下)

上一次呢我們講到了Redis的叢集,還有redis的主從複製,讀寫分離的一些配置,那麼接下來就接著上次還未完結的內容 上一次呢講的是在正常的情況下redis服務在各個主機上的執行情況,那麼接下來就是要介紹不正常的情況了。 假如說我們的redis的主庫掛了或者是執行re

MyCat1.6+Mysql5.7的主從複製+分離

1.Mysql的主從複製前提準備工作及注意事項:a、主DB server和從DB server資料庫的版本一致b、主DB server和從DB server資料庫資料一致[ 這裡就會可以把主的備份在從上還原,也可以直接將主的資料目錄拷貝到從的相應資料目錄]c、主DB serv

基於MYCAT的MYSQL主從分離配置詳解與示例

第三版_基於Mycat的MySQL主從讀寫分離配置詳解與示例  1、不使用Mycat託管MySQL主從伺服器,簡單使用如下配置:          <dataNodename="dn1" dataHost="localhost1" database="db1"/&