程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Linux體系下自行編譯裝置MySQL及基本設置裝備擺設全進程解析

Linux體系下自行編譯裝置MySQL及基本設置裝備擺設全進程解析

編輯:MySQL綜合教程

Linux體系下自行編譯裝置MySQL及基本設置裝備擺設全進程解析。本站提示廣大學習愛好者:(Linux體系下自行編譯裝置MySQL及基本設置裝備擺設全進程解析)文章只能為提供參考,不一定能成為您想要的結果。以下是Linux體系下自行編譯裝置MySQL及基本設置裝備擺設全進程解析正文


裝置依附:

CentOS:

# 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體系用戶

# groupadd mysql
# useradd -r -g mysql mysql

提早樹立好相干目次

# mkdir /data/logs/mysql
# mkdir /data/mysql

下載MySQL源代碼:

# wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.12.tar.gz

設置裝備擺設

# 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:

履行進程中會湧現:

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這個選項,不編譯谷歌的測試包也沒有甚麼成績,然則之前的某些版本會湧現沒法編譯的成績。

編譯裝置

# make && make install

樹立鏈接文件,便利今後應用和進級:

# ln -s /usr/local/server/mysql-5.6.12 /usr/local/server/mysql

設置權限:

# 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).
設置裝備擺設啟動項目:

# 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能否存在,假如存在則刪除!!!

# chown -R mysql:mysql /usr/local/server/mysql-5.6.12

啟動mysql:

# service mysql start

添加情況變量

#echo 'export PATH=$PATH:/usr/local/server/mysql/bin'>> /etc/profile

平安設置(設定初始暗碼,移除匿名用戶,移除測試數據庫):

# /usr/local/server/mysql/bin/mysql_secure_installation

添加開機啟動

CentOS:

# chkconfig mysql on

Ubuntu:

# sudo update-rc.d mysql defaults

設置裝備擺設須知:

MySQL有年夜量可以修正的設置裝備擺設選項,平日只須要把根本的項設置裝備擺設准確,應當將更多的時光花在schema的優化、索引上,和查詢設計上。准確地設置裝備擺設MySQL的根本設置裝備擺設項後,再花力量去修正其他設置裝備擺設選項的收益平日就比擬小了。
過度優化的辦事器招致的潛伏風險很年夜,輕易頻仍瓦解、運轉遲緩。
MySQL年夜多半默許設置裝備擺設選項曾經是最好設置裝備擺設了,所以最好不要做太多的修改,上文設置的參數關於年夜多半人曾經夠多了。
沒有與日俱增的設置裝備擺設,跟著數據庫內數據、用戶數目的變更,過一段時光後,可以有選擇地調劑數據庫的設置裝備擺設。
根本設置裝備擺設選項詳解:

socket = /tmp/mysql.sock
pid_file = /data/logs/mysql/mysql.pid

socket和pid_file 文件假如不指定地位,放在默許編譯地位,在分歧的MySQL版本裡能夠會招致一些毛病

default_storage_engine = InnoDB

設定默許存儲引擎,創立表的時刻最好顯式停止存儲引擎的設置裝備擺設

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%則能夠形成很嚴重的成績:內存交流、磁盤發抖、內存耗盡和逝世機。

#MyISAM
key_buffer_size = 128M

MyISAM本身只緩存索引,不緩存數據(依附操作體系緩存數據)。假如年夜部門為MyISAM表,就應當分派較年夜key_buffer_size。
再分派多年夜內存前,起首懂得一下,MyISAM占用了多年夜的空間,確定不須要分派比須要緩存的索引數據還年夜的內存(有時刻為數據量擴增預留一些,會設置比擬年夜)。
有兩個辦法盤算索引年夜小:
應用SQL語句,查詢INFORMATION——SCHEMA表的INDEX_LENGTH字段,把他們相加便可。

SELECT SUM( INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES
WHERE ENGINE='MYISAM';

應用的UNIX體系,則應用以下敕令

# du -sch `find /mysqldatadir -name “*.MYI”`

鍵緩存須要存儲多年夜的值?
不要跨越索引總年夜小,也不要跨越為操作體系緩存保存的總年夜小。取二者較小值。

緩沖區應用率盤算,經由過程SHOW STATUS和SHOW VARIABLES敕令檢查以下變量:

100 - ( ( Key_blocks_unused * key_cache_block_size) * 100 / key_buffer_size )

假如辦事器運轉很長一段時光以後,照樣沒有應用完一切緩沖鍵,便可以把緩沖鍵調小一點。

鍵緩沖射中率
從經歷下去講,每秒未射中次數更有效,假定一個磁盤每秒可以發生100個隨機讀,每秒5次緩存未射中則不會招致I/O忙碌,每秒80次則能夠招致I/O忙碌。盤算公式:

Key_reads / Uptime

設定默許字符集和編碼

# 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

# 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

設定同時處置的最年夜鏈接,包管運用激減產生而不勝重負,當查詢不克不及履行,那翻開一個鏈接沒有任何利益,所以被“太多鏈接”的毛病謝絕是一個疾速而價值下的掉敗方法。詳細設定須要參考料想的最年夜並發數和本機設置裝備擺設。

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.

table_open_cache = 5000

假如在段時光內赓續有毛病鏈接,好比:權限毛病,運用設置裝備擺設失足等。客戶端到達max_connect_errors設定次數,就會被參加黑名單,沒法銜接,直到再次刷新主機緩存。(若何操作?)可以有用避免暴力破解暗碼。

max_connect_errors = 2000

在典范的Linux體系上我們把open_files_limit設置的盡量年夜。古代操作體系中翻開文件句柄開支都較小。假如這個參數設置不敷年夜,會湧現經典的24號毛病:”too many open files”。

open_files_limit = 65535

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved