mysql數據庫服務器整體規劃(數據庫服務器配置方案)

本文目錄一覽:

簡述提高mysql數據庫服務器性能的措施有哪些

簡述提高mysql數據庫服務器性能的措施有哪些

1,存儲引擎,根據應用選擇合適的引擎

2,索引 —-這個就有很多文章了,具體需要你自己去了解

3,sql語句優化,查詢條件的選擇之類

4,mysql自身系統配置,需要針對應用去定製

5,表的選擇,臨時表,或者分區表,也需要針對應用的情況去選擇使用

網站訪問量大 怎樣優化mysql數據庫

 單機MySQL數據庫的優化

一、服務器硬件對MySQL性能的影響

①磁盤尋道能力 (磁盤I/O),我們現在上的都是SAS15000轉的硬盤。MySQL每秒鐘都在進行大量、複雜的查詢操作,對磁盤的讀寫量可想而知。所以,通常認為磁 盤I/O是制約MySQL性能的最大因素之一,對於日均訪 問量在100萬PV以上的Discuz!論壇,由於磁盤I/O的制約,MySQL的性能會非常低下!解決這一制約因素可以考慮以下幾種解決方案: 使用RAID1+0磁盤陣列,注意不要嘗試使用RAID-5,MySQL在RAID-5磁盤陣列上的效率不會像你期待的那樣快。

②CPU 對於MySQL應用,推薦使用DELL R710,E5620 @2.40GHz(4 core)* 2 ,我現在比較喜歡DELL R710,也在用其作Linuxakg 虛擬化應用;

③物理內存對於一台使用MySQL的Database Server來說,服務器內存建議不要小於2GB,推薦使用4GB以上的物理內存,不過內存對於現在的服務器而言可以說是一個可以忽略的問題,工作中遇到高端服務器基本上內存都超過了32G。

我們工作中用得比較多的數據庫服務器是HP DL580G5和DELL R710,穩定性和性能都不錯;特別是DELL R710,我發現許多同行都是採用它作數據庫的服務器,所以重點推薦下。

   二、MySQL的線上安裝我建議採取編譯安裝的方法,這樣性能上有較大提升,服務器系統我建議用64bit的Centos5.5,源碼包的編譯參數會默 認以Debgu模式生成二進制代碼,而Debug模式給MySQL帶來的性能損失是比較大的,所以當我們編譯準備安裝的產品代碼時,一定不要忘記使用「— without-debug」參數禁用Debug模式。而如果把—with-mysqld-ldflags和—with-client-ldflags二 個編譯參數設置為—all-static的話,可以告訴編譯器以靜態方式編譯和編譯結果代碼得到最高的性能。使用靜態編譯和使用動態編譯的代碼相比,性能 差距可能會達到5%至10%之多。我參考了簡朝陽先生的編譯參數,特列如下,供大家參考

./configure –prefix=/usr/local/mysql –without-debug –without-bench –enable-thread-safe-client –enable-assembler –enable-profiling –with-mysqld-ldflags=-all-static –with-client-ldflags=-all-static –with-charset=latin1 –with-extra-charset=utf8,gbk –with-innodb –with-csv-storage-engine –with-federated-storage-engine –with-mysqld-user=mysql –without-我是怎麼了ded-server –with-server-suffix=-community –with-unix-socket-path=/usr/local/mysql/sock/mysql.sock

三、MySQL自身因素當解決了上述服務器硬件制約因素後,讓我們看看MySQL自身的優化是如何操作的。對 MySQL自身的優化主要是對其配置文件my.cnf中的各項參數進行優化調整。下面介紹一些對性能影響較大的參數。

下面,根據以上硬件配置結合一份已經優化好的my.cnf進行說明:

#vim /etc/my.cnf

以下只列出my.cnf文件中[mysqld]段落中的內容,其他段落內容對MySQL運行性能影響甚微,因而姑且忽略。

[mysqld]

port = 3306

serverid = 1

socket = /tmp/mysql.sock

skip-locking

#避免MySQL的外部鎖定,減少出錯幾率增強穩定性。

skip-name-resolve

#禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。但需要注意,如果開啟該選項,則所有遠程主機連接授權都要使用IP地址方式,否則MySQL將無法正常處理連接請求!

back_log = 384

   #back_log參數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中。 如果系統在一個短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接的偵聽隊列的大小。不同的操作系統在這個隊列大小上有它自 己的限制。 試圖設定back_log高於你的操作系統的限制將是無效的。默認值為50。對於Linux系統推薦設置為小於512的整數。

key_buffer_size = 384M

#key_buffer_size指定用於索引的緩衝區大小,增加它可得到更好的索引處理性能。對於內存在4GB左右的服務器該參數可設置為256M或384M。注意:該參數值設置的過大反而會是服務器整體效率降低!

max_allowed_packet = 4M

thread_stack = 256K

table_cache = 614K

sort_buffer_size = 6M

#查詢排序時所能使用的緩衝區大小。注意:該參數對應的分配內存是每連接獨佔,如果有100個連接,那麼實際分配的總共排序緩衝區大小為100 × 6 = 600MB。所以,對於內存在4GB左右的服務器推薦設置為6-8M。

read_buffer_size = 4M

#讀查詢操作所能使用的緩衝區大小。和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享。

join_buffer_size = 8M

#聯合查詢操作所能使用的緩衝區大小,和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享。

myisam_sort_buffer_size = 64M

table_cache = 512

thread_cache_size = 64

query_cache_size = 64M

   #指定MySQL查詢緩衝區的大小。可以通過在MySQL控制台觀察,如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩衝不 夠 的情況;如果Qcache_hits的值非常大,則表明查詢緩衝使用非常頻繁,如果該值較小反而會影響效率,那麼可以考慮不用查詢緩 沖;Qcache_free_blocks,如果該值非常大,則表明緩衝區中碎片很多。

tmp_table_size = 256M

max_connections = 768

#指定MySQL允許的最大連接進程數。如果在訪問論壇時經常出現Too Many Connections的錯誤提 示,則需要增大該參數值。

max_connect_errors = 1000

wait_timeout = 10

#指定一個請求的最大連接時間,對於4GB左右內存的服務器可以設置為5-10。

thread_concurrency = 8

#該參數取值為服務器邏輯CPU數量*2,在本例中,服務器有2顆物理CPU,而每顆物理CPU又支持H.T超線程,所以實際取值為4*2=8;這個目前也是雙四核主流服務器配置。

skip-networking

#開啟該選項可以徹底關閉MySQL的TCP/IP連接方式,如果WEB服務器是以遠程連接的方式訪問MySQL數據庫服務器則不要開啟該選項!否則將無法正常連接!

table_cache=1024

#物理內存越大,設置就越大。默認為2402,調到512-1024最佳

innodb_additional_mem_pool_size=4M

#默認為2M

innodb_flush_log_at_trx_commit=1

#設置為0就是等到innodb_log_buffer_size列隊滿後再統一儲存,默認為1

innodb_log_buffer_size=2M

#默認為1M

innodb_thread_concurrency=8

#你的服務器CPU有幾個就設置為幾,建議用默認一般為8

key_buffer_size=256M

#默認為218,調到128最佳

tmp_table_size=64M

#默認為16M,調到64-256最掛

read_buffer_size=4M

#默認為64K

read_rnd_buffer_size=16M

#默認為256K

sort_buffer_size=32M

#默認為256K

thread_cache_size=120

#默認為60

query_cache_size=32M

※值得注意的是:

很多情況需要具體情況具體分析

一、如果Key_reads太大,則應該把my.cnf中Key_buffer_size變大,保持Key_reads/Key_read_requests至少1/100以上,越小越好。

二、如果Qcache_lowmem_prunes很大,就要增加Query_cache_size的值。

   很多時候我們發現,通過參數設置進行性能優化所帶來的性能提升,可能並不如許多人想像的那樣產生質的飛躍,除非是之前的設置存在嚴重不合理的情況。我們 不能將性能調優完全依託於通過DBA在數據庫上線後進行的參數調整,而應該在系統設計和開發階段就儘可能減少性能問題。

【51CTO獨家特稿】如果單MySQL的優化始終還是頂不住壓力時,這個時候我們就必須考慮MySQL的高可用架構(很多同學也愛說成是MySQL集群)了,目前可行的方案有:

一、MySQL Cluster

優勢:可用性非常高,性能非常好。每份數據至少可在不同主機存一份拷貝,且冗餘數據拷貝實時同步。但它的維護非常複雜,存在部分Bug,目前還不適合比較核心的線上系統,所以這個我不推薦。

二、DRBD磁盤網絡鏡像方案

   優勢:軟件功能強大,數據可在底層快設備級別跨物理主機鏡像,且可根據性能和可靠性要求配置不同級別的同步。IO操作保持順序,可滿足數據庫對數據一致 性的苛刻要求。但非分佈式文件系統環境無法支持鏡像數據同時可見,性能和可靠性兩者相互矛盾,無法適用於性能和可靠性要求都比較苛刻的環境,維護成本高於 MySQL Replication。另外,DRBD也是官方推薦的可用於MySQL高可用方案之一,所以這個大家可根據實際環境來考慮是否部署。

三、MySQL Replication

   在實際應用場景中,MySQL Replication是使用最為廣泛的一種提高系統擴展性的設計手段。眾多的MySQL使用者通過Replication功能提升系統的擴展性後,通過 簡單的增加價格低廉的硬件設備成倍 甚至成數量級地提高了原有系統的性能,是廣大MySQL中低端使用者非常喜歡的功能之一,也是許多MySQL使用者選擇MySQL最為重要的原因。

比較常規的MySQL Replication架構也有好幾種,這裡分別簡單說明下

MySQL Replication架構一:常規複製架構–Master-slaves,是由一個Master複製到一個或多個Salve的架構模式,主要用於讀壓力大的應用數據庫端廉價擴展解決方案,讀寫分離,Master主要負責寫方面的壓力。

MySQL Replication架構二:級聯複製架構,即Master-Slaves-Slaves,這個也是為了防止Slaves的讀壓力過大,而配置一層二級 Slaves,很容易解決Master端因為附屬slave太多而成為瓶勁的風險。

MySQL Replication架構三:Dual Master與級聯複製結合架構,即Master-Master-Slaves,最大的好處是既可以避免主Master的寫操作受到Slave集群的複製帶來的影響,而且保證了主Master的單點故障。

以上就是比較常見的MySQL replication架構方案,大家可根據自己公司的具體環境來設計 ,Mysql 負載均衡可考慮用LVS或Haproxy來做,高可用HA軟件我推薦Heartbeat。

   MySQL Replication的不足:如果Master主機硬件故障無法恢復,則可能造成部分未傳送到slave端的數據丟失。所以大家應該根據自己目前的網絡 規劃,選擇自己合理的Mysql架構方案,跟自己的MySQL DBA和程序員多溝涌,多備份(備份我至少會做到本地和異地雙備份),多測試,數據的事是最大的事,出不得半點差錯,切記切記。

linux服務器mysql數據庫怎麼配置

linux服務器mysql數據庫配置

mysql最流行的關係型數據庫之一,目前隸屬於oracle公司,因體積小、速度快、總體擁有成本低,開放源代碼這一特點,所以是我們日常開發的首選。

工具/原料

mysql5.6

cnetos

方法/步驟

查找以前是否安裝有mysql,使用下面命令:

rpm -qa|grep -i mysql

如果顯示有如下包則說明已安裝mysql

mysql-4.1.12-3.RHEL4.1

mysqlclient10-3.23.58-4.RHEL4.1

如果已安裝,則需要刪除已安裝的數據庫,使用以下命令來刪除數據庫

刪除命令:rpm -e –nodeps 包名

( rpm -ev mysql-4.1.12-3.RHEL4.1 )

刪除老版本mysql的開發頭文件和庫

命令:rm -fr /usr/lib/mysql

rm -fr /usr/include/mysql

注意:卸載後/var/lib/mysql中的數據及/etc/my.cnf不會刪除,如果確定沒用後就手工刪除

rm -f /etc/my.cnf

rm -fr /var/lib/mysql

下載mysql的rpm包

可以通過wget下載具體的地址因為不能用鏈接請大家去官網去找

(1)MySQL-server-5.6.10-1.rhel5.x86_64.rpm:MySQL服務器;

(2)MySQL-client-5.6.10-1.rhel5.x86_64.rpm:MySQL客戶端;

(3)MySQL-devel-5.6.10-1.rhel5.x86_64.rpm:Mysql開發依賴包。

下載後放到Liunx服務器中,如圖所示

安裝MySQL Server的rpm包

rpm -ivh MySQL-server-5.6.21-1.linux_glibc2.5.x86_64.rpm

安裝過程如圖所示

安裝完成後會生成root用戶的隨機密碼,請使用「cat /root/.mysql_secret」或類似命令進行查看。

安裝MySQL客戶端

rpm -ivh MySQL-client-5.6.21-1.linux_glibc2.5.x86_64.rpm

安裝MySQL開發依賴包

rpm -ivh MySQL-devel-5.6.21-1.linux_glibc2.5.x86_64.rpm

啟動msyql

安裝完成後mysql是沒有啟動的,運行mysql命令會提示如下錯誤:

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

可使用如下命令啟動MySQL:

service mysql start

或者使用如下命令:

/etc/init.d/mysql start

可使用SET PASSWORD命令修改root用戶的密碼,參考如下:SET PASSWORD = PASSWORD(‘root123456’);

建mysql數據庫服務器

需要用到集群,負載均衡及mysql 複製(replication);

下面提供一個系統模型你可以參考一下:

集群的結構為一個主MySQL服務器(Master)服務器與多個從屬MySQL服務器(Slave)建立複製(replication)連接,主服務器與從屬服務器實現一定程度上的數據同步,多個從屬服務器存儲相同的數據副本,實現數據冗餘,提供容錯功能。部署開發應用系統時,對數據庫操作代碼進行優化,將寫操作(如UPDATE、INSERT)定向到主服務器,把大量的查詢操作(SELECT)定向到從屬服務器,實現集群的負載均衡功能。如果主服務器發生故障,從屬服務器將轉換角色成為主服務器,使應用系統為終端用戶提供不間斷的網絡服務;主服務器恢復運行後,將其轉換為從屬服務器,存儲數據庫副本,繼續對終端用戶提供數據查詢檢索服務。

北大青鳥java培訓:mysql數據庫的優化方法?

我們都知道,服務器數據庫的開發一般都是通過java或者是PHP語言來編程實現的,而為了提高我們數據庫的運行速度和效率,數據庫優化也成為了我們每日的工作重點,今天,福建IT培訓就一起來了解一下mysql服務器數據庫的優化方法。

為什麼要了解索引真實案例案例一:大學有段時間學習爬蟲,爬取了知乎300w用戶答題數據,存儲到mysql數據中。

那時不了解索引,一條簡單的「根據用戶名搜索全部回答的sql「需要執行半分鐘左右,完全滿足不了正常的使用。

案例二:近線上應用的數據庫頻頻出現多條慢sql風險提示,而工作以來,對數據庫優化方面所知甚少。

例如一個用戶數據頁面需要執行很多次數據庫查詢,性能很慢,通過增加超時時間勉強可以訪問,但是性能上需要優化。

索引的優點合適的索引,可以大大減小mysql服務器掃描的數據量,避免內存排序和臨時表,提高應用程序的查詢性能。

索引的類型mysql數據中有多種索引類型,primarykey,unique,normal,但底層存儲的數據結構都是BTREE;有些存儲引擎還提供hash索引,全文索引。

BTREE是常見的優化要面對的索引結構,都是基於BTREE的討論。

B-TREE查詢數據簡單暴力的方式是遍歷所有記錄;如果數據不重複,就可以通過組織成一顆排序二叉樹,通過二分查找算法來查詢,大大提高查詢性能。

而BTREE是一種更強大的排序樹,支持多個分支,高度更低,數據的插入、刪除、更新更快。

現代數據庫的索引文件和文件系統的文件塊都被組織成BTREE。

btree的每個節點都包含有key,data和只想子節點指針。

btree有度的概念d=1。

假設btree的度為d,則每個內部節點可以有n=[d+1,2d+1)個key,n+1個子節點指針。

樹的大高度為h=Logb[(N+1)/2]。

索引和文件系統中,B-TREE的節點常設計成接近一個內存頁大小(也是磁盤扇區大小),且樹的度非常大。

這樣磁盤I/O的次數,就等於樹的高度h。

假設b=100,一百萬個節點的樹,h將只有3層。

即,只有3次磁盤I/O就可以查找完畢,性能非常高。

索引查詢建立索引後,合適的查詢語句才能大發揮索引的優勢。

另外,由於查詢優化器可以解析客戶端的sql語句,會調整sql的查詢語句的條件順序去匹配合適的索引。

mysql數據庫最大能支持多少並發量

MySQL服務器的最大並發連接數是16384。

受服務器配置,及網絡環境等制約,實際服務器支持的並發連接數會小一些。主要決定因素有:

1、服務器CPU及內存的配置。

2、網絡的帶寬。互聯網連接中上行帶寬的影響尤為明顯。

擴展資料:

優化數據庫結構:

組織數據庫的schema、表和字段以降低I/O的開銷,將相關項保存在一起,並提前規劃,以便隨着數據量的增長,性能可以保持較高的水平。

設計數據表應盡量使其佔用的空間最小化,表的主鍵應儘可能短。·對於InnoDB表,主鍵所在的列在每個輔助索引條目中都是可複製的,因此如果有很多輔助索引,那麼一個短的主鍵可以節省大量空間。

僅創建需要改進查詢性能的索引。索引有助於檢索,但是會增加插入和更新操作的執行時間。

InnoDB的ChangeBuffering特性:

InnoDB提供了changebuffering的配置,可減少維護輔助索引所需的磁盤I/O。大規模的數據庫可能會遇到大量的表操作和大量的I/O,以保證輔助索引保持最新。當相關頁面不在緩衝池裏面時,InnoDB的changebuffer將會更改緩存到輔助索引條目。

從而避免因不能立即從磁盤讀取頁面而導致耗時的I/O操作。當頁面被加載到緩衝池時,緩衝的更改將被合併,更新的頁面之後會刷新到磁盤。這樣做可提高性能,適用於MySQL5.5及更高版本。

參考資料來源:百度百科-MySQL數據庫

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/309814.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-04 19:31
下一篇 2025-01-04 19:31

相關推薦

  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • 服務器安裝Python的完整指南

    本文將為您提供服務器安裝Python的完整指南。無論您是一位新手還是經驗豐富的開發者,您都可以通過本文輕鬆地完成Python的安裝過程。以下是本文的具體內容: 一、下載Python…

    編程 2025-04-29
  • STUN 服務器

    STUN 服務器是一個網絡服務器,可以協助網絡設備(例如 VoIP 設備)解決 NAT 穿透、防火牆等問題,使得設備可以正常地進行數據傳輸。本文將從多個方面對 STUN 服務器做詳…

    編程 2025-04-29
  • 解決docker-compose 容器時間和服務器時間不同步問題

    docker-compose是一種工具,能夠讓您使用YAML文件來定義和運行多個容器。然而,有時候容器的時間與服務器時間不同步,導致一些不必要的錯誤和麻煩。以下是解決方法的詳細介紹…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python怎麼導入數據庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的數據庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • 如何選擇MySQL服務器文件權限

    MySQL是一種流行的關係型數據庫管理系統。在安裝MySQL時,選擇正確的文件權限是保證安全和性能的重要步驟。以下是一些指導您選擇正確權限的建議。 一、權限選擇 MySQL服務器需…

    編程 2025-04-27
  • Think-ORM數據模型及數據庫核心操作

    本文主要介紹Think-ORM數據模型建立和數據庫核心操作。 一、模型定義 Think-ORM是一個開源的ORM框架,用於簡化在PHP應用中(特別是ThinkPHP)與關係數據庫之…

    編程 2025-04-27

發表回復

登錄後才能評論