當前位置:首頁 » 編程語言 » sql讀寫分離

sql讀寫分離

發布時間: 2023-01-29 11:01:34

sql Server 中對同一張表頻繁的讀寫,有什麼好辦法避免鎖等待

禁止對原數據表直接寫操作,減少佔用。
讀取無限制,所有用戶只對各自讀取後另外生成的臨時表進行寫操作。保存時,按臨時表內容改寫原數據表。僅保存時,獲取原數據表寫操作許可權。

⑵ MSSQL SERVER 怎麼實現讀寫分離

主機A為寫庫。主機B為讀庫,應用程序當寫入到主機A時,採用發布訂閱中的事務日誌模式,將數據同步至主機B中,這樣主機B為應用程序提供接近於實時的數據讀取服務。
如果有自增ID主鍵,也可以採用insert 命令,隔一段時間執行一次也行。
就看應用對數據需求了

⑶ SpringBoot項目中實現MySQL讀寫分離

但我們仔細觀察我們會發現,當我們的項目都是用的單體資料庫時,那麼就可能會存在如下問題:

為了解決上述提到的兩個問題,我們可以准備兩 (多) 台MySQL,一台主( Master )伺服器,一台從( Slave )伺服器,主庫的 數據變更 (寫、更新、刪除這些操作) ,需要 同步 到從庫中 (主從復制) 。而用戶在訪問我們項目時,如果是 寫操作 (insert、update、delete),則直接操作 主庫 ;如果是 讀操作 (select) ,則直接操作從庫,這種結構就是 讀寫分離 啦。

在這種讀寫分離的結構中,從庫是可以有多個的

MySQL主從復制是一個 非同步 的復制過程,底層是基於Mysql資料庫自帶的 二進制日誌 功能。就是一台或多台MySQL資料庫(slave,即 從庫 )從另一台MySQL資料庫(master,即 主庫 )進行日誌的復制,然後再解析日誌並應用到自身,最終實現 從庫 的數據和 主庫 的數據保持一致。MySQL主從復制是 MySQL資料庫自帶功能,無需藉助第三方工具。

二進制日誌(BINLOG)記錄了所有的 DDL(數據定義語言)語句和 DML(數據操縱語言)語句,但是不包括數據查詢語句。此日誌對於災難時的數據恢復起著極其重要的作用,MySQL的主從復制, 就是通過該binlog實現的。默認MySQL是未開啟該日誌的。

在環境搭建之前,我們需要准備好兩台伺服器,如果生活富裕使用的是兩台雲伺服器的時候記得要開放安全組,即防火牆;如果是比狗子我生活好點但也是用的虛擬機的話,記得別分這么多內存啟動藍屏了(別問怎麼知道的)

這里就不給大家展示資料庫的安裝和防火牆的操作了,這個我感覺網上好多資源都能夠滿足遇到的問題,在搭建主從庫的時候有在網上見到過說MySQL版本要一致的,我也沒太留意直接就在之前的MySQL上操作了,大家可以自己去驗證一下。

伺服器:192.168.150.100(別試了黑不了的,這是虛擬機的ip)

這里有三個方法都能重啟MySQL,最簡單的無疑就是一關一開:

登錄進去MySQL之後才能夠執行下面的命令,因為這是SQL命令,linux不認識這玩意是啥。

這個時候還 不用退出MySQL ,因為下面的命令還是SQL命令,執行下面的SQL,可以拿到我們後面需要的兩個重要參數。

執行完這一句SQL之後,==不要再操作主庫!不要再操作主庫!不要再操作主庫!==重要的事情說三遍,因為再操作主庫之後可能會導致紅框中的 兩個屬性值會發生變化 ,後面如果發生了錯誤可能就和這里有那麼兩毛錢關系了。

伺服器:192.168.150.101(別試了黑不了的,這也是虛擬機的ip)

這里要注意server-id和主庫以及其他從庫都不能相同,否則後面將會配置不成功。

這里有三個方法都能重啟MySQL,最簡單的無疑就是一關一開:

登錄進去MySQL之後才能夠執行下面的命令,因為這是SQL命令

參數說明:

這個時候還 不用退出MySQL ,因為下面的命令還是SQL命令,執行下面的SQL,可以看到從庫的狀態信息。通過狀態信息中的 Slave_IO_running Slave_SQL_running 可以看出主從同步是否就緒,如果這兩個參數全為 Yes ,表示主從同步已經配置完成。

這可能是由於linux 是復制出來的,MySQL中還有一個 server_uuid 是一樣的,我們也需要修改。 vim /var/lib/mysql/auto.cnf

這應該就是各位大牛設置server_id的時候不小心設置相同的id了,修改過來就行,步驟在上面的配置中。

這是狗子在操作過程中搞出來的一個錯誤……

出錯的原因是在主庫中刪除了用戶信息,但是在從庫中同步的時候失敗導致同步停止,下面記錄自己的操作(是在進入MySQL的操作且是從庫)。

在資料庫中操作時,一定要注意當前所在的資料庫是哪個,作為一個良好的實踐:在SQL語句前加 USE dbname 。

Sharding-JDBC定位為 輕量級Java框架 ,在Java的JDBC層提供的額外服務。 它使用客戶端直連資料庫,以 jar包 形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動, 完全兼容JDBC和各種ORM框架

使用Sharding-JDBC可以在程序中輕松的實現資料庫 讀寫分離

Sharding-JDBC具有以下幾個特點:

下面我們將用ShardingJDBC在項目中實現MySQL的讀寫分離。

在pom.xml文件中導入ShardingJDBC的依賴坐標

在application.yml中增加數據源的配置

這時我們就可以對我們項目中的配置進行一個測試,下面分別調用一個更新介面和一個查詢介面,通過查看日誌中記錄的數據源來判斷是否能夠按照我們預料中的跑。

搞定!!!程序正常按照我們預期的成功跑起來了,成功藉助ShardingJDBC在我們項目中實現了資料庫的讀寫分離。

⑷ 主機sql資料庫佔用磁碟IO讀寫過高,怎麼解決

1、首先登錄SQL Server實例,如下圖所示。

⑸ 怎麼實現sql資料庫讀寫分離

在資料庫上點右鍵,就有資料庫分離的菜單項,直接點擊就好了
你在哪裡抄來抄了錯誤的東西嗎?或者你嘗試刷新數據。
顯然是資料庫連接字元串,不,啊,你要連接本地(local)資料庫實例名稱不會是localhost

⑹ 怎樣做mssql資料庫 分庫讀寫分離

sqlserver2008 怎樣進行資料庫分離??在資料庫上點右鍵,就有資料庫分離的菜單項,直接點擊就好了
你在哪裡抄來抄了錯誤的東西嗎?或者你嘗試刷新數據。
顯然是資料庫連接字元串,不,啊,你要連接本地(local)資料庫實例名稱不會是localhost

⑺ net 怎麼使用sqlserver讀寫分離

在任務欄上,單擊「開始」,然後單擊「運行」。
在「運行」對話框中,復制並粘貼以下命令,或自己鍵入以下命令:
C:\WINNT\IsUninst.exe -f"C:\Program Files\Microsoft SQL Server\MSSQL$Server1\Uninst.is" -c"C:\Program Files\Microsoft SQL Server\MSSQL$Server1\sqlsun.dll" -Mssql.miff i=I1

⑻ mysql讀寫分離在sql里怎麼保證查詢走主庫增刪改走從庫

你說反了吧,增刪改應該走主庫,查詢走從庫

一般是藉助資料庫中間件來完成的,不會自己的手動寫這些的

例如:藉助ShardingProxy,只要配置中寫明主庫和從庫,然後後端連接此中間件,那麼不需要修改代碼,有關增刪改的會被攔截然後到主庫執行,有關查詢的會到從庫執行

詳細的可以到官方網站shardingsphere學習,比手動寫容易多了

⑼ MySQL Proxy怎樣配置lua腳本來實現對SQL語句的攔截和修改

Mysql Proxy Lua讀寫分離設置是本文要介紹的內容,主要是來了解Mysql Proxy的Mysql 分離設置,為了未來MySQL讀寫分離的需要, 先行對MySQL官方的Mysql Proxy產品進行了初步測試. 以下是測試過程,二進製版Mysql Proxy可以去下載。
1、設置說明
Master伺服器: 192.168.41.196 Slave伺服器: 192.168.41.197 Proxy伺服器: 192.168.41.203

2、安裝Mysql Proxy
在Proxy伺服器上安裝即可. 如果源碼方式安裝, 需提前安裝pkg-config,libevent,glibc,lua等依賴包, 非常麻煩, 建議直接使用二進製版.
# cd /u01/software/mysql # tar -zxvf Mysql Proxy-0.8.1-linux-rhel5-x86-32bit.tar.gz -C /usr/local # cd /usr/local # ln -s Mysql Proxy-0.8.1-linux-rhel5-x86-32bit Mysql Proxy # vi + ~/.bash_profile export PATH=$PATH:/usr/local/Mysql Proxy/bin/ # . ~/.bash_profile

3、Mysql Proxy選項說明
# Mysql Proxy help-all

管理功能選項:
admin-address=host:port 指定一個mysqo-proxy的管理埠, 預設是4041; admin-username=<string> username to allow to log in admin-password=<string> password to allow to log in admin-lua-script=<filename> script to execute by the admin plugin

代理功能選項:
-P, proxy-address=<host:port> 是Mysql Proxy 伺服器端的監聽埠, 預設是4040; -r, proxy-read-only-backend-addresses=<host:port> 只讀Slave的地址和埠, 預設為不設置; -b, proxy-backend-addresses=<host:port> 遠程Master地址和埠, 可設置多個做failover和load balance, 預設是127.0.0.1:3306; proxy-skip-profiling 關閉查詢分析功能, 預設是打開的; proxy-fix-bug-25371 修正 mysql的libmysql版本大於5.1.12的一個#25371號bug; -s, proxy-lua-script=<file> 指定一個Lua腳本來控制Mysql Proxy的運行和設置, 這個腳本在每次新建連接和腳本發生修改的的時候將重新調用;

其他選項:
defaults-file=<file>配置文件, 可以把Mysql Proxy的參數信息置入一個配置文件里; daemon Mysql Proxy以守護進程方式運行 pid-file=file 設置Mysql Proxy的存儲PID文件的路徑 keepalive try to restart the proxy if it crashed, 保持連接啟動進程會有2個, 一號進程用來監視二號進程, 如果二號進程死掉自動重啟proxy.

4、資料庫准備工作
(1)安裝半同步補丁(建議)
讀寫分離不能迴避的問題之一就是延遲, 可以考慮Google提供的SemiSyncReplication補丁.
(2)給用戶授權
在Master/Slave建立一個測試用戶, 因為以後客戶端發送的SQL都是通過Mysql Proxy伺服器來轉發, 所以要確保可以從Mysql Proxy伺服器上登錄MySQL主從庫.
mysql> grant all privileges on *.* to 'u_test'@'192.168.41.203' identified by 'xxx' with grant option;

(3)在Master建立測試表
mysql> create table db_test.t_test (col varchar(10)); mysql> insert into db_test.t_test values ('testA'); mysql> select * from db_test.t_test; +-+ | col | +-+ | testA | +-+

5、Mysql Proxy啟動
(1)修改讀寫分離lua腳本
默認最小4個最大8個以上的客戶端連接才會實現讀寫分離, 現改為最小1個最大2個:
# vi +40 /usr/local/Mysql Proxy/share/doc/Mysql Proxy/rw-splitting.lua connection pool if not proxy.global.config.rwsplit then proxy.global.config.rwsplit = { min_idle_connections = 1, max_idle_connections = 2, is_debug = true } end

這是因為Mysql Proxy會檢測客戶端連接, 當連接沒有超過min_idle_connections預設值時, 不會進行讀寫分離, 即查詢操作會發生到Master上.
(2)啟動Mysql Proxy
建議使用配置文件的形式啟動, 注意配置文件必須是660許可權, 否則無法啟動. 如果有多個Slave的話, proxy-read-only-backend-addresses參數可以配置多個以逗號分隔的IP:Port從庫列表.
# killall Mysql Proxy # vi /etc/Mysql Proxy.cnf [Mysql Proxy] admin-username=wangnc admin-password=iamwangnc admin-lua-script=/usr/local/Mysql Proxy/lib/Mysql Proxy/lua/admin.lua proxy-backend-addresses=192.168.41.196:3351 proxy-read-only-backend-addresses=192.168.41.197:3351 proxy-lua-script=/usr/local/Mysql Proxy/share/doc/Mysql Proxy/rw-splitting.lua log-file=/var/tmp/Mysql Proxy.log log-level=debug daemon=true keepalive=true # chmod 660 /etc/Mysql Proxy.cnf # Mysql Proxy defaults-file=/etc/Mysql Proxy.cnf # ps -ef | grep Mysql Proxy | grep -v grep root 1869 1 0 18:16 ? 00:00:00 /usr/local/Mysql Proxy/libexec/Mysql Proxy defaults-file=/etc/Mysql Proxy.cnf root 1870 1869 0 18:16 ? 00:00:00 /usr/local/Mysql Proxy/libexec/Mysql Proxy defaults-file=/etc/Mysql Proxy.cnf # tail -50f /var/tmp/Mysql Proxy.log

6、客戶端連接測試
(1)先停止Slave的復制進程
mysql> stop slave;

(2)連接Proxy埠, 插入數據
# mysql -uu_test -pxxx -h192.168.41.203 -P4040 -Ddb_test mysql> insert into db_test.t_test values ('testB'); mysql> select * from db_test.t_test; +-+ | col | +-+ | testA | | testB | +-+

(3)多開幾個客戶端, 連接Proxy埠, 查詢數據
# mysql -uu_test -pxxx -h192.168.41.203 -P4040 -Ddb_test mysql> select * from db_test.t_test; +-+ | col | +-+ | testA | +-+

如果查詢不到上步新插入的數據, 說明連接到了Slave, 讀寫分離成功. 在同一線程再插入數據並驗證:
mysql> insert into db_test.t_test values ('testC'); mysql> select * from db_test.t_test; +-+ | col | +-+ | testA | +-+

發現insert操作成功, 但是select不出剛插入的數據, 說明同一線程也讀寫分離成功. 從日誌中可以驗證:
# tail -50f /var/tmp/Mysql Proxy.log ... [read_query] 192.168.41.203:45481 current backend = 0 client default db = db_test client username = u_test query = select * from db_test.t_test sending to backend : 192.168.41.197:3351 is_slave : true server default db: db_test server username : u_test in_trans : false in_calc_found : false COM_QUERY : true [read_query] 192.168.41.203:45481 current backend = 0 client default db = db_test client username = u_test query = insert into db_test.t_test values ('testC') sending to backend : 192.168.41.196:3351 is_slave : false server default db: db_test server username : u_test in_trans : false in_calc_found : false COM_QUERY : true

(4)測試完畢後, 啟動Slave的復制進程
mysql> start slave;

7、正式環境說明
1、Mysql Proxy當前還只是個測試版, MySQL官方還不建議用到生產環境中;
2、Mysql Proxy的rw-splitting.lua腳本在網上有很多版本, 但是最准確無誤的版本仍然是源碼包中所附帶的rw-splitting.lua腳本, 如果有lua腳本編程基礎的話, 可以在這個腳本的基礎上再進行優化;
3、Mysql Proxy實際上非常不穩定, 在高並發或有錯誤連接的情況下, 進程很容易自動關閉, 因此打開keepalive參數讓進程自動恢復是個比較好的辦法, 但還是不能從根本上解決問題, 因此通常最穩妥的做法是在每個從伺服器上安裝一個Mysql Proxy供自身使用, 雖然比較低效但卻能保證穩定性;
4、Amoeba for MySQL是一款優秀的中間件軟體, 同樣可以實現讀寫分離, 負載均衡等功能, 並且穩定性要大大超過Mysql Proxy, 建議大家用來替代Mysql Proxy, 甚至MySQL-Cluster.
小結:詳解Mysql Proxy Lua讀寫分離設置的內容介紹完了,希望通過本文的學習能對你有所幫助!

熱點內容
玩戰地5配置不行怎麼辦 發布:2024-03-29 22:10:28 瀏覽:981
javaice 發布:2024-03-29 21:56:37 瀏覽:355
編譯圖書 發布:2024-03-29 21:56:36 瀏覽:332
linux全選vi 發布:2024-03-29 21:55:11 瀏覽:774
艾譜保險箱初始密碼一般是什麼 發布:2024-03-29 21:48:11 瀏覽:825
商家粉腳本 發布:2024-03-29 21:34:57 瀏覽:151
我的世界ec伺服器怎麼獲得 發布:2024-03-29 21:21:44 瀏覽:709
小米4設置限制的訪問 發布:2024-03-29 21:21:10 瀏覽:406
linux向伺服器上傳文件 發布:2024-03-29 21:17:20 瀏覽:929
腳本健康cpu佔用率報警 發布:2024-03-29 21:16:42 瀏覽:255