做虛擬化,用宿主機做xenserver,創(chuàng)立虛擬機,然后一臺真機一臺虛擬機兩個數(shù)據(jù)庫進行讀寫分離最好,這樣能減少一些并發(fā)情況的發(fā)生。
創(chuàng)新互聯(lián)公司是一家網(wǎng)站建設、成都網(wǎng)站制作,提供網(wǎng)頁設計,網(wǎng)站設計,網(wǎng)站制作,建網(wǎng)站,定制制作,網(wǎng)站開發(fā)公司,成立與2013年是互聯(lián)行業(yè)建設者,服務者。以提升客戶品牌價值為核心業(yè)務,全程參與項目的網(wǎng)站策劃設計制作,前端開發(fā),后臺程序制作以及后期項目運營并提出專業(yè)建議和思路。
Mysql主從配置,實現(xiàn)讀寫分離
原理:主服務器(Master)負責網(wǎng)站NonQuery操作,從服務器負責Query操作,用戶可以根據(jù)網(wǎng)站功能模特性塊固定訪問Slave服務器,或者自己寫個池或隊列,自由為請求分配從服務器連接。主從服務器利用MySQL的二進制日志文件,實現(xiàn)數(shù)據(jù)同步。二進制日志由主服務器產(chǎn)生,從服務器響應獲取同步數(shù)據(jù)庫。
具體實現(xiàn):
1、在主從服務器上都裝上MySQL數(shù)據(jù)庫,windows系統(tǒng)鄙人安裝的是mysql_5.5.25.msi版本,Ubuntu安裝的是mysql-5.6.22-linux-glibc2.5-i686.tar
windows安裝mysql就不談了,一般地球人都應該會。鄙人稍微說一下Ubuntu的MySQL安裝,我建議不要在線下載安裝,還是離線安裝的好。大家可以參考 這位不知道大哥還是姐妹,寫的挺好按照這個就能裝上。在安裝的時候可能會出現(xiàn)幾種現(xiàn)象,大家可以參考解決一下:
(1)如果您不是使用root用戶登錄,建議 su - root 切換到Root用戶安裝,那就不用老是 sudo 了。
(2)存放解壓的mysql 文件夾,文件夾名字最好改成mysql
(3)在./support-files/mysql.server start 啟動MySQL的時候,可能會出現(xiàn)一個警告,中文意思是啟動服務運行讀文件時,忽略了my.cnf文件,那是因為my.cnf的文件權限有問題,mysql會認為該文件有危險不會執(zhí)行。但是mysql還會啟動成功,但如果下面配置從服務器參數(shù)修改my.cnf文件的時候,你會發(fā)現(xiàn)文件改過了,但是重啟服務時,修改過后的配置沒有執(zhí)行,而且您 list一下mysql的文件夾下會發(fā)現(xiàn)很多.my.cnf.swp等中間文件。這都是因為MySQL啟動時沒有讀取my.cnf的原因。這時只要將my.cnf的文件權限改成my_new.cnf的權限一樣就Ok,命令:chmod 644 my.cnf就Ok
(4)Ubuntu中修改文檔內(nèi)容沒有Vim,最好把Vim 裝上,apt-get install vim,不然估計會抓狂。
這時候我相信MySQL應該安裝上去了。
2、配置Master主服務器
(1)在Master MySQL上創(chuàng)建一個用戶‘repl’,并允許其他Slave服務器可以通過遠程訪問Master,通過該用戶讀取二進制日志,實現(xiàn)數(shù)據(jù)同步。
根據(jù)要求配置MySQL主從備份、讀寫分離,結合網(wǎng)上的文檔,對搭建的步驟和出現(xiàn)的問題以及解決的過程做了如下筆記;
現(xiàn)在使用的兩臺服務器已經(jīng)安裝了MySQL,全是rpm包裝的,能正常使用。
為了避免不必要的麻煩,主從服務器MySQL版本盡量保持一致;
環(huán)境:192.168.0.1 (Master)
192.168.0.2 (Slave)
MySQL Version:Ver 14.14 Distrib 5.1.48, for pc-linux-gnu (i686) using readline 5.1
server-id = 1 //數(shù)據(jù)庫ID號, 為1時表示為Master,其中master_id必須為1到232–1之間的一個正整數(shù)值;
log-bin=mysql-bin //啟用二進制日志;
binlog-do-db=data //需要同步的二進制數(shù)據(jù)庫名;
binlog-ignore-db=mysql //不同步的二進制數(shù)據(jù)庫名;這個同步后聽說很麻煩,我沒有同步;
log-bin=/var/log/mysql/updatelog //設定生成的log文件名;
log-slave-updates //把更新的記錄寫到二進制文件中;
slave-skip-errors //跳過錯誤,繼續(xù)執(zhí)行復制;
2、建立復制所要使用的用戶;
mysqlgrant replication slave on *.* to identified by '********'
3、重啟mysql;
/usr/bin/mysqladmin -uroot shutdown;
/usr/bin/mysql_safe
4、現(xiàn)在備份Master上的數(shù)據(jù);
鎖定后我直接tar.gz data這個庫文件;
mysqlFLUSH TABLES WITH READ LOCK;
cd /var/lib/mysql
tar data.tar.gz data
接著直接執(zhí)行了遠程scp;
scp ./data.tar.gz
5、登錄Slave數(shù)據(jù)庫服務器,修改my.cnf;
server-id = 3 //2已經(jīng)被用在另一個服務器上了,如果以后要再加Slave號接著往后數(shù)就OK了;
在老版本的MySQL 3.22中,MySQL的單表限大小為4GB,當時的MySQL的存儲引擎還是ISAM存儲引擎。但是,當出現(xiàn)MyISAM存儲引擎之后,也就是從MySQL 3.23開始,MySQL單表最大限制就已經(jīng)擴大到了64PB了(官方文檔顯示)。也就是說,從目前的技術環(huán)境來看,MySQL數(shù)據(jù)庫的MyISAM存儲 引擎單表大小限制已經(jīng)不是有MySQL數(shù)據(jù)庫本身來決定,而是由所在主機的OS上面的文件系統(tǒng)來決定了。
而MySQL另外一個最流行的存儲引擎之一Innodb存儲數(shù)據(jù)的策略是分為兩種的,一種是共享表空間存儲方式,還有一種是獨享表空間存儲方式。
當使用共享表空間存儲方式的時候,Innodb的所有數(shù)據(jù)保存在一個單獨的表空間里面,而這個表空間可以由很多個文件組成,一個表可以跨多個文件存在,所 以其大小限制不再是文件大小的限制,而是其自身的限制。從Innodb的官方文檔中可以看到,其表空間的最大限制為64TB,也就是說,Innodb的單 表限制基本上也在64TB左右了,當然這個大小是包括這個表的所有索引等其他相關數(shù)據(jù)。
而當使用獨享表空間來存放Innodb的表的時候,每個表的數(shù)據(jù)以一個單獨的文件來存放,這個時候的單表限制,又變成文件系統(tǒng)的大小限制了。
作為主服務器的Master,會把自己的每一次改動(每條sql語句)都記錄到二進制日志Binarylog中。
作為從服務器Slave, 會用master上的賬號登陸到 master上,讀取master的Binarylog,寫入到自己的中繼日志 Relaylog。
然后從服務器自己的sql線程會負責讀取這個中繼日志,并執(zhí)行一遍。
但我們仔細觀察我們會發(fā)現(xiàn),當我們的項目都是用的單體數(shù)據(jù)庫時,那么就可能會存在如下問題:
為了解決上述提到的兩個問題,我們可以準備兩 (多) 臺MySQL,一臺主( Master )服務器,一臺從( Slave )服務器,主庫的 數(shù)據(jù)變更 (寫、更新、刪除這些操作) ,需要 同步 到從庫中 (主從復制) 。而用戶在訪問我們項目時,如果是 寫操作 (insert、update、delete),則直接操作 主庫 ;如果是 讀操作 (select) ,則直接操作從庫,這種結構就是 讀寫分離 啦。
在這種讀寫分離的結構中,從庫是可以有多個的
MySQL主從復制是一個 異步 的復制過程,底層是基于Mysql數(shù)據(jù)庫自帶的 二進制日志 功能。就是一臺或多臺MySQL數(shù)據(jù)庫(slave,即 從庫 )從另一臺MySQL數(shù)據(jù)庫(master,即 主庫 )進行日志的復制,然后再解析日志并應用到自身,最終實現(xiàn) 從庫 的數(shù)據(jù)和 主庫 的數(shù)據(jù)保持一致。MySQL主從復制是 MySQL數(shù)據(jù)庫自帶功能,無需借助第三方工具。
二進制日志(BINLOG)記錄了所有的 DDL(數(shù)據(jù)定義語言)語句和 DML(數(shù)據(jù)操縱語言)語句,但是不包括數(shù)據(jù)查詢語句。此日志對于災難時的數(shù)據(jù)恢復起著極其重要的作用,MySQL的主從復制, 就是通過該binlog實現(xiàn)的。默認MySQL是未開啟該日志的。
在環(huán)境搭建之前,我們需要準備好兩臺服務器,如果生活富裕使用的是兩臺云服務器的時候記得要開放安全組,即防火墻;如果是比狗子我生活好點但也是用的虛擬機的話,記得別分這么多內(nèi)存啟動藍屏了(別問怎么知道的)
這里就不給大家展示數(shù)據(jù)庫的安裝和防火墻的操作了,這個我感覺網(wǎng)上好多資源都能夠滿足遇到的問題,在搭建主從庫的時候有在網(wǎng)上見到過說MySQL版本要一致的,我也沒太留意直接就在之前的MySQL上操作了,大家可以自己去驗證一下。
服務器:192.168.150.100(別試了黑不了的,這是虛擬機的ip)
這里有三個方法都能重啟MySQL,最簡單的無疑就是一關一開:
登錄進去MySQL之后才能夠執(zhí)行下面的命令,因為這是SQL命令,Linux不認識這玩意是啥。
這個時候還 不用退出MySQL ,因為下面的命令還是SQL命令,執(zhí)行下面的SQL,可以拿到我們后面需要的兩個重要參數(shù)。
執(zhí)行完這一句SQL之后,==不要再操作主庫!不要再操作主庫!不要再操作主庫!==重要的事情說三遍,因為再操作主庫之后可能會導致紅框中的 兩個屬性值會發(fā)生變化 ,后面如果發(fā)生了錯誤可能就和這里有那么兩毛錢關系了。
服務器:192.168.150.101(別試了黑不了的,這也是虛擬機的ip)
這里要注意server-id和主庫以及其他從庫都不能相同,否則后面將會配置不成功。
這里有三個方法都能重啟MySQL,最簡單的無疑就是一關一開:
登錄進去MySQL之后才能夠執(zhí)行下面的命令,因為這是SQL命令
參數(shù)說明:
這個時候還 不用退出MySQL ,因為下面的命令還是SQL命令,執(zhí)行下面的SQL,可以看到從庫的狀態(tài)信息。通過狀態(tài)信息中的 Slave_IO_running 和 Slave_SQL_running 可以看出主從同步是否就緒,如果這兩個參數(shù)全為 Yes ,表示主從同步已經(jīng)配置完成。
這可能是由于linux 是復制出來的,MySQL中還有一個 server_uuid 是一樣的,我們也需要修改。 vim /var/lib/mysql/auto.cnf
這應該就是各位大牛設置server_id的時候不小心設置相同的id了,修改過來就行,步驟在上面的配置中。
這是狗子在操作過程中搞出來的一個錯誤……
出錯的原因是在主庫中刪除了用戶信息,但是在從庫中同步的時候失敗導致同步停止,下面記錄自己的操作(是在進入MySQL的操作且是從庫)。
在數(shù)據(jù)庫中操作時,一定要注意當前所在的數(shù)據(jù)庫是哪個,作為一個良好的實踐:在SQL語句前加 USE dbname 。
Sharding-JDBC定位為 輕量級Java框架 ,在Java的JDBC層提供的額外服務。 它使用客戶端直連數(shù)據(jù)庫,以 jar包 形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅(qū)動, 完全兼容JDBC和各種ORM框架 。
使用Sharding-JDBC可以在程序中輕松的實現(xiàn)數(shù)據(jù)庫 讀寫分離 。
Sharding-JDBC具有以下幾個特點:
下面我們將用ShardingJDBC在項目中實現(xiàn)MySQL的讀寫分離。
在pom.xml文件中導入ShardingJDBC的依賴坐標
在application.yml中增加數(shù)據(jù)源的配置
這時我們就可以對我們項目中的配置進行一個測試,下面分別調(diào)用一個更新接口和一個查詢接口,通過查看日志中記錄的數(shù)據(jù)源來判斷是否能夠按照我們預料中的跑。
搞定!?。〕绦蛘0凑瘴覀冾A期的成功跑起來了,成功借助ShardingJDBC在我們項目中實現(xiàn)了數(shù)據(jù)庫的讀寫分離。
新聞名稱:mysql讀寫分離怎么做 mysql實現(xiàn)讀寫分離
轉載注明:http://jinyejixie.com/article26/hehojg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設、網(wǎng)站排名、品牌網(wǎng)站建設、企業(yè)網(wǎng)站制作、網(wǎng)站建設、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)