Mysql資料庫之主從分離配置
每日一句
There is a Chinese saying which goes, "It takes ten years to grow a tree."中國有句話叫“十年樹木”。
介紹
MySQL資料庫設定讀寫分離,可以使對資料庫的寫操作和讀操作在不同伺服器上執行,提高併發量和響應速度。現在的網站一般大點的,都採用有資料庫主從分離、讀寫分離,既起到備份作用也可以減輕資料庫的讀寫的壓力,一直聽說過這些,但是從來沒有親自動手實踐過,今天有時間實踐一下,記錄下過程。
環境準備
我準備了兩臺伺服器,一個是本機PC,一個是遠端伺服器,分別在兩臺機子上裝有Mysql資料庫。
MySQL安裝我就不介紹了,這裡需要注意的是:MySQL安裝的版本最好一致,如果不一致,低版本向高版本讀的時候可能有問題,最好保持一致。
主庫master
伺服器:172.10.10.69 centos 7 Linux系統 , mysql版本 5.6.35
從庫slave
本機:172.10.10.240 Win7系統, mysql版本 5.6.35
主庫配置
一、建立使用者
在主庫中建立一個使用者root,用於從庫讀取主庫的執行日誌。
需要在mysql命令列裡執行,需要先登入命令列
1、GRANTREPLICATIONSLAVEON *.* TO'root'@'192.10.10.240'IDENTIFIEDBY'123456';
2、flush privileges;
二、修改my.cnf
Linux系統在 /etc/my.cnf中;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 | 120 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
記錄下File和Position兩個內容,從庫配置的時候會用到這個。
從庫配置
在本機PC(從庫)上找到my.cnf(windows上為my.ini)檔案,然後新增以下內容,這個配置和主庫的配置意思是一樣的
server-id=2
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
注意確定和主庫的位置一樣,我就因為位置放置在末尾導致一直關聯不上。
一、關聯主從庫
最後一步很重要,登入從庫的MySQL命令列,執行以下程式碼,主要是關聯主庫的一些資訊。
change master to master_host='192.10.10.69', #Master 伺服器Ip
master_port=3306,
master_user='root',
master_password='123456',
master_log_file='master-bin.000001', #Master日誌檔名
master_log_pos=120; #Master日誌同步開始位置
注意是否執行成功,如果執行失敗就好好檢查下程式碼,看看哪裡寫錯了。
如果執行正常,就啟動從庫slave,並檢視下連線狀態。
//需要再mysql命令列執行
start slave;
show slave status; //檢視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
注意!配置過程中會碰到以下問題:
1、在Mysql5.6.35中,my.ini檔案在C:\ProgramData\MySQL\MySQL Server 5.6目錄下面,且已經預設配置了server-id=1,需要註釋掉。 2、如果碰到【Slave failed to initialize relay log info structure from the repository】錯誤提示,需要在slave中執行命令【reset slave;】 3、在命令列中可以通過【show variables like 'server_id';】檢視server_id資訊。 4、修改Mysql配置後,需要重啟Mysql服務.5、下面這兩個狀態必須為Yes才算成功,如果不是,則檢查上面步驟那一步配置錯誤。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
測試
現在在主庫上新增一條資料,看看從庫上是否有一個相同的資料,如果有則配置正常,功能使用正常。
主從分離的原理主要是:開啟主庫的執行日誌功能,然後從庫讀取主庫的日誌資訊,然後將主庫執行過的SQL語句在從庫上面執行一遍就做到主從分離,主從資料保持一致,起到備份資料的功能。