詳解Mysql數(shù)據(jù)庫(kù)之主從分離實(shí)例代碼

本篇文章主要介紹了數(shù)據(jù)庫(kù)之主從分離實(shí)例代碼,mysql數(shù)據(jù)庫(kù)設(shè)置讀寫(xiě)分離,可以使對(duì)數(shù)據(jù)庫(kù)的寫(xiě)操作和讀操作在不同服務(wù)器上執(zhí)行,提高并發(fā)量和相應(yīng)速度。

介紹

MySQL數(shù)據(jù)庫(kù)設(shè)置讀寫(xiě)分離,可以使對(duì)數(shù)據(jù)庫(kù)的寫(xiě)操作和讀操作在不同服務(wù)器上執(zhí)行,提高并發(fā)量和相應(yīng)速度。

現(xiàn)在的網(wǎng)站一般大點(diǎn)的,都采用有數(shù)據(jù)庫(kù)主從分離、讀寫(xiě)分離,即起到備份作用也可以減輕數(shù)據(jù)庫(kù)的讀寫(xiě)的壓力,一直聽(tīng)說(shuō)過(guò)這些,但是自己從沒(méi)有自己動(dòng)手親手實(shí)踐過(guò),今天有時(shí)間實(shí)踐一下,記錄下過(guò)程。

實(shí)驗(yàn)環(huán)境

我準(zhǔn)備了兩臺(tái)服務(wù)器,一個(gè)是本機(jī)電腦,一個(gè)是遠(yuǎn)程vps,分別在兩臺(tái)機(jī)子上裝的有數(shù)據(jù)庫(kù)。
MySQL安裝我就不介紹了,這里需要注意的是:MySQL安裝的版本最好一致,如果不一致,低版本向高版本讀的時(shí)候可能有問(wèn)題,最好保持一致。

主庫(kù)master

45.78.57.4? centos 7 系統(tǒng) ,? mysql版本? 5.1.73

從庫(kù)slave

本機(jī)127.0.0.1? macOs系統(tǒng),? mysql版本? 5.1.73

配置

創(chuàng)建用戶

在主庫(kù)創(chuàng)建一個(gè)用戶,用于從庫(kù)讀取主庫(kù)的執(zhí)行日志。

需要在mysql命令行里執(zhí)行,需要先登錄命令行

代碼如下:

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

修改my.cnf

linux系統(tǒng)在 /etc/my.cnf ,mac系統(tǒng)在安裝的MySQL的目錄,windows也一樣。

在my.cnf文件里增加一下代碼

server-id?=?1?//數(shù)據(jù)庫(kù)ID號(hào)  log-bin=master-bin?//啟用二進(jìn)制日志  log-bin-index=master-bin.index?//二進(jìn)制日志名稱

這里注意不要放在文件的末尾,要放在前面,即[mysqld]后,這里放上我的my.cnf內(nèi)容

[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

查看狀態(tài)

登陸mysql命令行后,輸入show master status,如果出現(xiàn)下面信息代表主庫(kù)配置完成

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兩個(gè)內(nèi)容,從庫(kù)配置的時(shí)候會(huì)用到這個(gè)。

從庫(kù)配置

在本機(jī)電腦(從庫(kù))上找到my.cnf文件,然后添加以下內(nèi)容,這個(gè)配置和主庫(kù)的配置意思是一樣的

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

注意確定和主庫(kù)的位置一樣,我就因?yàn)槲恢梅胖迷谀┪矊?dǎo)致一直關(guān)聯(lián)不上。

關(guān)聯(lián)主從庫(kù)

最后一步很重要,登錄從庫(kù)的MySQL命令行,執(zhí)行以下代碼,主要是關(guān)聯(lián)主庫(kù)的一些信息。

change?master?to?master_host='45.78.57.4',??#Master?服務(wù)器Ip  master_port=3306,  master_user='test',  master_password='test',?  master_log_file='master-bin.000001',?#Master日志文件名  master_log_pos=672675;?#Master日志同步開(kāi)始位置

注意是否執(zhí)行成功,如果執(zhí)行失敗就好好檢查下代碼,看看哪里寫(xiě)錯(cuò)了。

如果執(zhí)行正常,就啟動(dòng)從庫(kù)slave,并查看下連接狀態(tài)。

//需要再mysql命令行執(zhí)行?  start?slave;?  show?slave?statusG;?//查看slave連接狀態(tài)

狀態(tài)信息

????????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

注意!

這兩個(gè)狀態(tài)必須為Yes才算成功,如果不是,則檢查上面步驟那一步配置錯(cuò)誤。

Slave_IO_Running:?Yes  Slave_SQL_Running:?Yes

測(cè)試

現(xiàn)在你在主庫(kù)上添加一條數(shù)據(jù),看看從庫(kù)上是否有一個(gè)相同的數(shù)據(jù),如果有則配置正常,功能使用正常。

主從分離的原理主要是:開(kāi)啟主庫(kù)的執(zhí)行日志功能,然后從庫(kù)讀取主庫(kù)的日志信息,然后將主庫(kù)執(zhí)行過(guò)的SQL語(yǔ)句在從庫(kù)上面執(zhí)行一遍就做到主從分離,主從數(shù)據(jù)保持一直,備份數(shù)據(jù)的功能。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊10 分享