讀寫分離
1.問(wèn)題說(shuō)明
2.讀寫分離
Master(主庫(kù))----(數(shù)據(jù)同步)—> Slave(從庫(kù)) Mysql主從復(fù)制
-
mysql主從復(fù)制
-
介紹
- mysql主從復(fù)制是一個(gè)異步的復(fù)制過(guò)程,底層是基于mysql數(shù)據(jù)庫(kù)自帶的
二進(jìn)制日志
功能。就是一臺(tái)或多臺(tái)mysql數(shù)據(jù)庫(kù)(Slave,即從庫(kù))從另一臺(tái)mysql數(shù)據(jù)庫(kù)(Master,即主庫(kù))進(jìn)行日志的復(fù)制然后再解析日志并應(yīng)用到自身,最終現(xiàn)實(shí)從庫(kù)的數(shù)據(jù)和主庫(kù)的數(shù)據(jù)保持一致。mysql主從復(fù)制是mysql數(shù)據(jù)庫(kù)自帶功能,無(wú)需借助第三方工具 - mysql復(fù)制過(guò)程分成三步:
- Master將改變記錄二進(jìn)制日志(binary log)
- Slave將Master的binary log拷貝到它的中繼日志(relay log)
- Slave重做中繼日志中的事件,將改變應(yīng)用到自己的數(shù)據(jù)庫(kù)中
- mysql主從復(fù)制是一個(gè)異步的復(fù)制過(guò)程,底層是基于mysql數(shù)據(jù)庫(kù)自帶的
-
配置
-
配置–前置條件
提前準(zhǔn)備好兩臺(tái)服務(wù)器,分別安裝mysql并啟動(dòng)服務(wù)成功
- 主庫(kù)Master 服務(wù)器ip
- 從庫(kù)Slave 服務(wù)器ip
-
配置-主庫(kù)Master
第一步:修改MySQL數(shù)據(jù)庫(kù)的配置文件 /etc/my.cnf
[mysqld]
log-bin=mysql-bin #[必須]啟用二進(jìn)制日志
server-id = 100 #[必須]服務(wù)器–ID
第二步:重啟mysql服務(wù)
systemctl restart mysqld
第三步:登錄mysql數(shù)據(jù)庫(kù),執(zhí)行下面sql
GRANT REOLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
- ==注:==上面sql的作用是創(chuàng)建一個(gè)用戶xiaoming。密碼Root@123456,并且給xiaoming用戶授予REPLICATION SLAVE權(quán)限,常用于建立復(fù)制時(shí)所需要用到的用戶權(quán)限,也就是Slave必須被Master授權(quán)具有該權(quán)限的用戶,才能通過(guò)該用戶復(fù)制。
報(bào)錯(cuò)-----解決如下:
mysql> GRANT REOLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'REOLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456'' at line 1 mysql> create user xiaoming identified by 'Root@123456' -> ; Query OK, 0 rows affected (0.00 sec) mysql> grant replication slave on *.* to xiaoming -> ; Query OK, 0 rows affected (0.00 sec)
第四步:登錄mysql數(shù)據(jù)庫(kù),執(zhí)行下面sql,記錄下結(jié)果中File和Position的值
show master status;
、
==注意:==上面sql的作用是查看Master的狀態(tài),執(zhí)行完此sql后不要再執(zhí)行任何操作
-
配置–從庫(kù)Slave
第一步:修改MySQL數(shù)據(jù)庫(kù)的配置文件/etc/my.cnf
server-id = 101 #[必須]服務(wù)器--ID
第二步:重啟mysql服務(wù)
systemctl restart mysqld
第三步:登錄MySQL數(shù)據(jù)庫(kù),執(zhí)行下面sql
change master to master_host='(主庫(kù)ip地址)',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=603; start slave;
==注意:==如果報(bào)a running slave io thread的錯(cuò)!那么我們需要使用
stop slave;
來(lái)停止這個(gè)異常第四步:登錄mysql數(shù)據(jù)庫(kù),執(zhí)行下面sql,查看從數(shù)據(jù)庫(kù)的狀態(tài)
show slave status;
-
-
-
讀寫分離案例
-
背景
背景
面對(duì)日益增加的系統(tǒng)訪問(wèn)量,數(shù)據(jù)庫(kù)的吞吐量面臨著巨大瓶頸。對(duì)于同一時(shí)刻有大量并發(fā)讀操作和較少寫操作類型的應(yīng)用系統(tǒng)來(lái)說(shuō),將數(shù)據(jù)庫(kù)拆分為主庫(kù)和從庫(kù),主庫(kù)負(fù)責(zé)處理事務(wù)性的增刪改操作,從庫(kù)負(fù)責(zé)處理查詢操作,能夠有效的避免由數(shù)據(jù)更新導(dǎo)致的行鎖,使得整個(gè)系統(tǒng)的查詢性能得到極大的改善
-
-
sharding-JDBC介紹
Sharding-JDBC定位為輕量級(jí)java框架,在java的JDBC層提供額外服務(wù)。它使用客戶端直連數(shù)據(jù)庫(kù),以jar包形式提供服務(wù),無(wú)需額外部署和依賴,可理解為增強(qiáng)版的JDBC驅(qū)動(dòng),完全兼容JDBC和各種ORM框架
使用sharding-JDBC可以在程序中輕松的實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫分離。
- 適用于任何基于JDBC的ORM框架:JPA,Hibernate,MyBatis,Spring JDBC Template或直接使用JDBC。
- 支持任何第三方的數(shù)據(jù)庫(kù)連接池,如:DBCP,C3P0,BoneCP,Druid,HikariCP等。
- 支持任意實(shí)現(xiàn)JDBC規(guī)范的數(shù)據(jù)庫(kù),目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)
<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.0.0-RC1</version> </dependency>
-
入門案例
使用sharding-JDBC實(shí)現(xiàn)讀寫分離步驟:
-
導(dǎo)入maven坐標(biāo)
<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.0.0-RC1</version> </dependency>
-
在配置文件中配置讀寫分離規(guī)則
spring: shardingsphere: datasource: names: master,slave # 主數(shù)據(jù)源 master: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://(主庫(kù)ip地址):3306/rw?characterEncoding=utf-8 username: root password: root # 從數(shù)據(jù)源 slave: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/rw?characterEncoding=utf-8 username: root password: 12345678 masterslave: # 讀寫分離配置 load-balance-algorithm-type: round_robin #輪詢 # 最終的數(shù)據(jù)源名稱 name: dataSource # 主庫(kù)數(shù)據(jù)源名稱 master-data-source-name: master # 從庫(kù)數(shù)據(jù)源名稱列表,多個(gè)逗號(hào)分隔 slave-data-source-names: slave props: sql: show: true #開啟SQL顯示,默認(rèn)false main: allow-bean-definition-overriding: true
-
在配置文件中配置允許bean定義覆蓋配置項(xiàng)
main: allow-bean-definition-overriding: true
-
-
功能測(cè)試
查詢功能測(cè)試(操作Slave)
插入數(shù)據(jù)功能測(cè)試(操作Master)
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-448474.html
-
項(xiàng)目實(shí)現(xiàn)讀寫分離文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-448474.html
- 數(shù)據(jù)庫(kù)環(huán)境準(zhǔn)備(主從復(fù)制)
- 代碼改造
- 功能測(cè)試
到了這里,關(guān)于項(xiàng)目實(shí)現(xiàn)讀寫分離操作(mysql)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!