Linux系統下自行編譯安裝MySQL及基礎配置全過程解析
安裝依賴:
CentOS:
?
1 | # yum -y install wget gcc-c++ cmake make bison ncurses-devel perl unzip |
Ubuntu:(使用ubuntu下面有不少需要root許可權,請注意)
複製程式碼 程式碼如下:
# sudo apt-get install -y g++ gcc make libpcre3 zlib1g libbz2-dev automake cmake perl libncurses5-dev bison
新增MySQL系統使用者
?
12 |
# groupadd mysql # useradd -r -g mysql mysql
|
提前建立好相關目錄
?
12 |
# mkdir /data/logs/mysql # mkdir /data/mysql
|
下載MySQL原始碼:
?
1 | # wget |
配置
?
1 | # cmake |
?
-DCMAKE_INSTALL_PREFIX=/usr/local/server/mysql-5.6.12 -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1
|
配置釋義:
-DCMAKE_INSTALL_PREFIX=/usr/local/server/mysql-5.6.12 設定安裝目錄
-DMYSQL_DATADIR=/data/mysql 設定資料庫存放目錄
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock 設定UNIX socket 目錄
-DMYSQL_USER=mysql 設定執行使用者
-DDEFAULT_CHARSET=utf8 設定預設字符集,預設latin1
-DEFAULT_COLLATION=utf8_general_ci 設定預設校對規則,預設latin1_general_ci
-DWITH_INNOBASE_STORAGE_ENGINE=1 新增InnoDB引擎支援
-DENABLE_DOWNLOADS=1 自動下載可選檔案,比如自動下載谷歌的測試包
-DMYSQL_TCP_PORT=3306 設定伺服器監聽埠,預設3306
-DSYSCONFDIR=/data/etc 設定my.cnf所在目錄,預設為安裝目錄
更多引數執行 # cmake . -LH 或者檢視官方說明
Note:
執行過程中會出現:
?
12 |
CMake Error: Problem with tar_extract_all(): Invalid argument CMake Error: Problem extracting tar: /usr/local/src/mysql-5.6.12/source_downloads/gmock-1.6.0.zip
|
解決方法:
cd mysql目錄下面會發現有一個source_downloads目錄,需要解壓unzip gmock-1.6.0.zip,然後再重新執行上述配置過程。當然你也可以去掉-DENABLE_DOWNLOADS=1這個選項,不編譯谷歌的測試包也沒有什麼問題,但是之前的某些版本會出現無法編譯的問題。
編譯安裝
?
1 | # make && make install |
建立連結檔案,方便以後使用和升級:
?
1 | # ln -s /usr/local/server/mysql-5.6.12 /usr/local/server/mysql |
設定許可權:
?
1234 |
# chown -R mysql:mysql /usr/local/server/mysql # chown -R mysql:mysql /usr/local/server/mysql-5.6.12 # chown -R mysql:mysql /data/mysql # chown -R mysql:mysql /data/logs/mysql
|
初始化資料庫
複製程式碼 程式碼如下:
# /usr/local/server/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/server/mysql --collation-server=utf8_general_ci
這時候會出現以下警告,下面配置my.cnf會解決這個問題
詳情請檢視 MySQL 5.6 中 TIMESTAMP 的變化
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
配置啟動專案:
?
1 | # cp /usr/local/server/mysql/support-files/mysql.server /etc/init.d/mysql |
修改安裝目錄下my.cnf,部分引數需要結合實際情況進行修改
?
[mysqld] datadir = /data/mysql socket = /tmp/mysql.sock pid-file = /data/logs/mysql/mysql.pid user = mysql port = 3306 default_storage_engine = InnoDB # InnoDB #innodb_buffer_pool_size = 128M #innodb_log_file_size = 48M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT # MyISAM #key_buffer_size = 48M # character-set character-set-server=utf8 collation-server=utf8_general_ci # name-resolve skip-host-cache skip-name-resolve # LOG log_error = /data/logs/mysql/mysql-error.log long_query_time = 1 slow-query-log slow_query_log_file = /data/logs/mysql/mysql-slow.log # Others explicit_defaults_for_timestamp=true #max_connections = 500 open_files_limit = 65535 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [client] socket = /tmp/mysql.sock port = 3306 Note:
|
被註釋掉的部分語句,需要結合業務和硬體資源進行修改,所以先佔位,使用預設值即可。my.cnf檔案中不能出現拼寫錯誤,否則,接下來啟動會出現很多意想不到的錯誤,如果出現無法啟動請參看:mysql-error.log檔案。許可權設定不當也會導致啟動失敗。
啟動前,再次確認一遍許可權:
很有可能現在my.cnf的許可權不是mysql,同時檢查一下/etc/my.cnf是否存在,如果存在則刪除!!!
?
1 | # chown -R mysql:mysql /usr/local/server/mysql-5.6.12 |
啟動mysql:
?
1 | # service mysql start |
新增環境變數
?
1 | #echo 'export PATH=$PATH:/usr/local/server/mysql/bin'>> /etc/profile |
安全設定(設定初始密碼,移除匿名使用者,移除測試資料庫):
?
1 | # /usr/local/server/mysql/bin/mysql_secure_installation |
新增開機啟動
CentOS:
?
1 | # chkconfig mysql on |
Ubuntu:
?
1 | # sudo update-rc.d mysql defaults |
配置須知:
MySQL有大量可以修改的配置選項,通常只需要把基本的項配置正確,應該將更多的時間花在schema的最佳化、索引上,以及查詢設計上。正確地配置MySQL的基本配置項後,再花力氣去修改其他配置選項的收益通常就比較小了。
過度最佳化的伺服器導致的潛在風險很大,容易頻繁崩潰、執行緩慢。
MySQL大多數預設配置選項已經是最佳配置了,所以最好不要做太多的改動,上文設定的引數對於大多數人已經夠多了。
沒有一勞永逸的配置,隨著資料庫內資料、使用者數量的變化,過一段時間後,可以有選擇地調整資料庫的配置。
基本配置選項詳解:
?
12 |
socket = /tmp/mysql.sock pid_file = /data/logs/mysql/mysql.pid
|
socket和pid_file 檔案如果不指定位置,放在預設編譯位置,在不同的MySQL版本里可能會導致一些錯誤
?
1 | default_storage_engine = InnoDB |
設定預設儲存引擎,建立表的時候最好顯式進行儲存引擎的配置
?
1234 |
innodb_buffer_pool_size = 2G innodb_log_file_size = 128M innodb_file_per_table = 1 innodb_flush_method = 0_DIRECT
|
InnoDB最重要的兩個選項為緩衝池大小
innodb_buffer_pool_size和 日誌檔案大小innodb_log_file_size,預設值一般都太小。
如果大部分表都是InnoDB表,InnoDB緩衝池的設定或許比其他任何東西都需要記憶體。InnoDB並不僅僅快取索引:它還會快取資料、自適應哈系索引、插入緩衝(Insert Buffer)、鎖,以及其他內部資料結構。InnoDB還使用緩衝池來幫助延遲寫入,合併多個寫入操作,一起順序寫回。總之,InnoDB嚴重依賴緩衝池,必須分配足夠記憶體。
Note:
緩衝池越大,預熱和關閉都需要很長時間。
InnoDB使用日誌來減少事務提交的開銷。因為日誌已經記錄了事務,就無須在每個事務提交時把緩衝池的脹快重新整理到磁碟中。InnoDB用日誌把隨機I/O變成順序I/O。一旦日誌安全寫到磁碟,事務就持久化了。如果斷電,InnoDB可以重放日誌並且恢復已經提交的事務。
整體日誌大小受控於innodb_log_file_size和innodb_log_file_in_group兩個引數之乘積。一般需要設定幾百MB甚至上GB。作為經驗法則,一般日誌檔案全部大小,應該足夠容納伺服器一小時的活動內容。
緩衝池大小設定方法:
從伺服器總記憶體開始
減去作業系統佔用記憶體和其他服務佔用記憶體(如果還有其他服務的話)
減去MySQL自身需要記憶體,例如為每個查詢操作分配一些緩衝。
減去足夠讓作業系統快取InnoDB日誌檔案的記憶體,至少是足夠快取最近經常訪問的部分。再減去一些可以快取二進位制日誌的最後一部分,以防止複製產生了延遲,備庫可能讀取主庫上舊的二進位制日誌檔案,給主庫記憶體造成壓力。
減去其他MySQL緩衝和快取需要的記憶體,如MyISAM鍵快取(key_buffer_size),或者查詢快取(query cache)
處以105%,向下取捨一個合理值。
Note:設定不需要很精確,而且寧可謹慎,而不要設定過大,如果設定少了20%可能只產生很小的影響,但是如果大了20%則可能造成很嚴重的問題:記憶體交換、磁碟抖動、記憶體耗盡和當機。
?
12 |
#MyISAM key_buffer_size = 128M
|
MyISAM自身只快取索引,不快取資料(依賴作業系統快取資料)。如果大部分為MyISAM表,就應該分配較大key_buffer_size。
再分配多大記憶體前,首先了解一下,MyISAM佔用了多大的空間,肯定不需要分配比需要快取的索引資料還大的記憶體(有時候為資料量擴增預留一些,會設定比較大)。
有兩個方法計算索引大小:
使用SQL語句,查詢INFORMATION——SCHEMA表的INDEX_LENGTH欄位,把他們相加即可。
?
12 |
SELECT SUM ( INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE= 'MYISAM' ;
|
使用的UNIX系統,則使用以下命令
?
1 | # du -sch `find /mysqldatadir -name “*.MYI”` |
鍵快取需要儲存多大的值?
不要超過索引總大小,也不要超過為作業系統快取保留的總大小。取兩者較小值。
緩衝區使用率計算,透過SHOW STATUS和SHOW VARIABLES命令檢視以下變數:
?
1 | 100 - ( ( Key_blocks_unused * key_cache_block_size) * 100 / key_buffer_size ) |
如果伺服器執行很長一段時間之後,還是沒有使用完所有緩衝鍵,就可以把緩衝鍵調小一點。
鍵緩衝命中率
從經驗上來講,每秒未命中次數更有用,假定一個磁碟每秒可以產生100個隨機讀,每秒5次快取未命中則不會導致I/O繁忙,每秒80次則可能導致I/O繁忙。計算公式:
?
1 | Key_reads / Uptime |
設定預設字符集和編碼
?
123 |
# character-set-server character-set-server=utf8 collation-server=utf8_general_ci
|
以下選項設定僅使用IP來連結MySQL伺服器,省略了DNS查詢時間
閱讀材料:http://dev.mysql.com/doc/refman/5.6/en/host-cache.html
?
123 |
# name-resolve skip-name-resolve skip-host-cache
|
設定錯誤日誌和慢查詢日誌。大於1s的為慢查詢
?
# LOG log_error = /data/logs/mysql/mysql-error.log long_query_time = 1 slow_query_log slow_query_log_file = /data/logs/mysql/mysql-slow.log # Others #timestamp預設設定,5.6.6後不設定會報錯 explicit_defaults_for_timestamp=true
|
設定同時處理的最大連結,保證應用激增產生而不堪重負,當查詢不能執行,那開啟一個連結沒有任何好處,所以被“太多連結”的錯誤拒絕是一個快速而代價下的失敗方式。具體設定需要參考預想的最大併發數和本機配置。
?
1 | max_connections = 500 |
table_open_cache was known as table_cache in MySQL 5.1.2 and earlier.
table_open_cache應該設定足夠大,避免總是重新開啟和解析表定義。如果Open_tables的值每秒變化很大,那麼table_open_cache可能設定偏小。這個值從max_connections的10倍開始設定比較好,但是,大部分情況下不要超過10000.
?
1 | table_open_cache = 5000 |
如果在段時間內不斷有錯誤連結,比如:許可權錯誤,應用配置出錯等。客戶端達到max_connect_errors設定次數,就會被加入黑名單,無法連線,直到再次重新整理主機快取。(如何操作?)可以有效防止暴力破解密碼。
?
1 | max_connect_errors = 2000 |
在典型的Linux系統上我們把open_files_limit設定的儘可能大。現代作業系統中開啟檔案控制程式碼開銷都較小。如果這個引數設定不夠大,會出現經典的24號錯誤:”too many open files”。
?
1 | open_files_limit = 65535 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/430/viewspace-2805869/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Mysql安裝及基礎配置MySql
- redhat 5.4下安裝MYSQL全過程RedhatMySql
- 【MySQL安裝】Linux下安裝MySQL(預編譯)MySqlLinux編譯
- centos 安裝MySQL全過程CentOSMySql
- Mysql安裝過程中CMAKE編譯出錯MySql編譯
- MySQL下載安裝全過程(包含Navicat破解)MySql
- TDP for SQL安裝配置全過程SQL
- Linux上安裝GCC編譯器過程(轉)LinuxGC編譯
- 【MySQL】Linux 5.1作業系統安裝成功之後配置MySQL資料庫過程MySqlLinux作業系統資料庫
- 原始碼編譯MySQL Cluster7.2.15安裝過程原始碼編譯MySql
- Linux CentOS6.5下編譯安裝MySQL 5.6LinuxCentOS編譯MySql
- linux下編譯安裝mysql5.5以上版本Linux編譯MySql
- Linux下通過原始碼編譯安裝程式Linux原始碼編譯
- 原始碼編譯安裝MySQL5.6.12詳細過程原始碼編譯MySql
- MDK編譯過程及檔案型別全解編譯型別
- cesium原始碼編譯除錯及呼叫全過程原始碼編譯除錯
- Linux下編譯安裝BOOSTLinux編譯
- DNS解析全過程及原理DNS
- 編譯安裝最新的Linux系統核心編譯Linux
- Ubuntu 16.04 安裝 MySQL 8.0 全過程UbuntuMySql
- linux中安裝JDK linux中安裝Tomcat linux中安裝Mysql 及故障解析 linux系統安裝redisLinuxJDKTomcatMySqlRedis
- 尤拉系統初體驗與編譯安裝FFmpeg的過程記錄編譯
- Linux下原始碼編譯方式安裝MySQL5.5Linux原始碼編譯MySql
- Ubuntu 18.04系統編譯安裝MySQL 5.7教程。Ubuntu編譯MySql
- 在solrais下編譯安裝MySQL(轉)SolrAI編譯MySql
- C語言編譯全過程C語言編譯
- Linux編譯安裝MySQL5.6及修改字符集Linux編譯MySql
- mysql dba系統學習(1)mysql各版本編譯安裝MySql編譯
- Linux系統下載mysql與安裝LinuxMySql
- 編譯安裝mysql編譯MySql
- Linux Centos下編譯安裝RedisLinuxCentOS編譯Redis
- MySQL免編譯安裝及登入(5.6.36)MySql編譯
- linux mysql5.6版本的安裝配置過程LinuxMySql
- Mysql--Linux系統下mysql 5.5.31安裝MySqlLinux
- 基於Linux的MySQL5.7原始碼編譯安裝LinuxMySql原始碼編譯
- CentOS 7 安裝、配置、使用 PostgreSQL 10 安裝及基礎配置CentOSSQL
- Linux下安裝java及配置(yum安裝)LinuxJava
- Linux下編譯安裝Mysql 5.5的簡單步驟Linux編譯MySql