MySQL在Linux下載安裝及部署

MySQL官網下載

MySQL官網下載:https://dev.mysql.com/downloads/mysql/

進入以後,默認頁是MySQL的最新版本,如果選擇之前版本,就點擊  Looking for previous GA versions?

我這裏下載的是 mysql 5.7 的二進制版本

Linux-Generic是通用版

 

一、將下載好的壓縮包丟到服務器上任意一個你能找到的地方

二、在/usr路徑下創建一個文件夾mysql

mkdir /usr/mysql

三、找到之前丟服務器上的壓縮包,通過命令將其解壓到 /usr/mysql 目錄下

tar -zxvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz -C /usr/mysql/

四、進入到 /usr/mysql 目錄下,並修改文件夾名字

mv mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz mysql-5.7.27

五、檢查用戶組、用戶

#查看所有用戶組信息是否存在mysql組,不存在則創建,存在則直接新建用戶 

cat /etc/group | grep mysql

# 查看是否存在mysql用戶

cat /etc/passwd |grep mysql

cat 命令是linux下的一個文本輸出命令,通常是用於觀看某個文件的內容的;

六、創建用戶組、用戶

# 創建用戶組

groupadd mysql

# 創建用戶

useradd -r -g mysql mysql

七、創建mysql的data數據目錄

mkdir /usr/local/mysql-5.7.27/data

八、授權目錄、用戶

# 將 /usr/local/mysql/mysql-5.7.27 的所有者及所屬組改爲mysql

cd /usr/local/mysql/mysql-5.7.27
chown -R mysql:mysql ./

九、修改 my.cnf 配置

vim /etc/my.cnf

 按 i 鍵進入 my.cnf 的編輯模式,關於my.cnf 的詳細配置在文章結尾處有詳細介紹

[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/mysql/mysql-5.7.27
datadir=/usr/mysql/mysql-5.7.27/data
socket=/tmp/mysql.sock
log-error=/usr/mysql/mysql-5.7.27/data/mysql-err.log
pid-file=/usr/mysql/mysql-5.7.27/data/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0

十、安裝 libaio

yum install -y libaio

十一、初始化數據庫

# 進入bin目錄

cd /usr/mysql/mysql-5.7.27/bin

# 初始化數據庫

./mysqld --initialize --user=mysql --basedir=/usr/mysql/mysql-5.7.27 --datadir=/usr/mysql/mysql-5.7.27/data

命令執行完後,命令最後會得到一個數據庫初始密碼,也可以從 /usr/mysql/mysql-5.7.27/data/mysql-err.log 中查看密碼(這個路徑是在配置文件中配置的 log-error),一定要記住這個密碼!!!

十二、將啓動腳本放到初始化目錄

cp /usr/mysql/mysql-5.7.27/support-files/mysql.server /etc/init.d/mysql

十三、啓動mysql服務

service mysql start

十四、修改mysql初始密碼

進入 /usr/mysql/mysql-5.7.27/ 目錄下

cd /usr/mysql/mysql-5.7.27/

./bin/mysql -u root -p

然後輸入初始化密碼登錄,登錄成功後修改密碼,修改完成並刷新

mysql> set password=password('123456');
mysql> grant all privileges on *.* to root@'%' identified by '123456';
mysql> flush privileges;

十五、重啓MySQL

service mysql restart

十六、關於my.cnf配置詳解

my.cnf 的配置信息的原鏈接:https://blog.csdn.net/l1028386804/article/details/87996449

 

[client]
#客戶端設置
port    = 3306
socket    = /data/mysql/data/mysql.sock
default-character-set = utf8mb4
 
[mysqld]
#mysql啓動時使用的用戶
user    = mysql
#默認連接端口
port    = 3306
#爲MySQL客戶端程序和服務器之間的本地通訊指定一個套接字文件
socket    = /data/mysql/data/mysql.sock
#數據庫服務器id,這個id用來在主從服務器中標記唯一mysql服務器
server-id = 1
#端口綁定的ip地址,0.0.0.0表示允許所有遠程訪問,127.0.0.1表示只能本機訪問,默認值爲*
bind-address = 0.0.0.0
#默認名爲 主機名.pid,在數據庫/mysql/data/主機名.pid,記錄mysql運行的process id
#如果存在,再次start時會報已經啓動
pid-file = /data/mysql/data/mysql.pid
 
#安裝目錄
basedir    = /usr/local/mysql
#數據庫存放目錄
datadir    = /data/mysql/data/
 
#系統數據庫編碼設置,排序規則
character_set_server = utf8mb4
collation_server = utf8mb4_bin
 
#secure_auth 爲了防止低版本的MySQL客戶端(<4.1)使用舊的密碼認證方式訪問高版本的服務器。MySQL 5.6.7開始secure_auth 默認爲啓用值1
secure_auth = 1
 
#可能的連接數
#指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中。
back_log = 1024
 
#########################################
#################其他設置################
#########################################
 
#顯式指定默認時間戳,即定義表中的timestamp時間戳的列時需要顯示指定默認值
#默認爲OFF,
#如果第一個TIMESTAMP列,沒有顯式設置DEFAULT,將自動分配DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP屬性
#timestamp列不能設置爲NULL,第二列及以後的timestamp列都默認爲"0000-00-00 00:00:00"
#如果設置爲ON,
#第一個timestamp列可以設置爲NULL,不會默認分配DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP屬性
#聲明爲NOT NULL且沒有顯式DEFAULT子句,在嚴格模式下會報錯。
explicit_defaults_for_timestamp = ON
 
#linux下要嚴格區分大小寫,windows下不區分大小寫
#1表示不區分大小寫,0表示區分大小寫。
#lower_case_table_names = 0
lower_case_table_names = 0
 
#默認sql模式,嚴格模式
#sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,
#NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#ONLY_FULL_GROUP_BY 
#NO_ZERO_IN_DATE 不允許年月爲0
#NO_ZERO_DATE 不允許插入年月爲0的日期
#ERROR_FOR_DIVISION_BY_ZERO 在INSERT或UPDATE過程中,如果數據被零除,則產生錯誤而非警告。如 果未給出該模式,那麼數據被零除時MySQL返回NULL
#NO_ENGINE_SUBSTITUTION 不使用默認的存儲引擎替代
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
 
 
########################################################
############各種緩衝區及處理數據的最大值設置############
########################################################
 
#是MySQL執行排序使用的緩衝大小。如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引而不是額外的排序階段
#如果不能,可以嘗試增加sort_buffer_size變量的大小
sort_buffer_size = 16M
 
#應用程序經常會出現一些兩表(或多表)Join的操作需求,MySQL在完成某些 Join 需求的時候(all/index join),
#爲了減少參與Join的“被驅動表”的讀取次數以提高性能,需要使用到 Join Buffer 來協助完成 Join操作。
#當 Join Buffer 太小,MySQL 不會將該 Buffer 存入磁盤文件,而是先將Join Buffer中的結果集與需要 Join 的表進行 Join 操作
#然後清空 Join Buffer 中的數據,繼續將剩餘的結果集寫入此 Buffer 中,
#如此往復。這勢必會造成被驅動表需要被多次讀取,成倍增加 IO 訪問,降低效率。
#若果多表連接需求大,則這個值要設置大一點。
join_buffer_size = 16M
 
#索引塊的緩衝區大默認16M
key_buffer_size = 15M
# 消息緩衝區會用到該列,該值太小則會在處理大包時產生錯誤。如果使用大的text,BLOB列,必須增加該值
max_allowed_packet = 32M
 
# mysql服務器最大連接數值的設置範圍比較理想的是:服務器響應的最大連接數值佔服務器上限連接數值的比例值在10%以上
# Max_used_connections / max_connections * 100% 
max_connections = 512
# 阻止過多嘗試失敗的客戶端,如果值爲10時,失敗(如密碼錯誤)10次,mysql會無條件阻止用戶連接
max_connect_errors = 1000000
 
#表描述符緩存大小,可減少文件打開/關閉次數,一般max_connections*2。
table_open_cache = 1024
#MySQL 緩存 table 句柄的分區的個數,每個cache_instance<=table_open_cache/table_open_cache_instances
table_open_cache_instances = 32
#mysql打開最大文件數
open_files_limit = 65535
 
 
#InnoDB表中,表更新後,查詢緩存失效,事務操作提交之前,所有查詢都無法使用緩存。影響查詢緩存命中率
#查詢緩存是靠一個全局鎖操作保護的,如果查詢緩存配置的內存比較大且裏面存放了大量的查詢結果,
#當查詢緩存失效的時候,會長時間的持有這個全局鎖。
#因爲查詢緩存的命中檢測操作以及緩存失效檢測也都依賴這個全局鎖,所以可能會導致系統僵死的情況
#在高併發,寫入量大的系統,建義把該功能禁掉
query_cache_size = 0
#決定是否緩存查詢結果。這個變量有三個取值:0,1,2,分別代表了off、on、demand。
query_cache_type = 0
#指定單個查詢能夠使用的緩衝區大小,缺省爲1M
query_cache_limit = 1M
 
 
##############################################
#################線程相關配置#################
##############################################
 
#線程緩存;主要用來存放每一個線程自身的標識信息,線程棧大小
thread_stack = 256K
 
#thread_cahe_size線程池,線程緩存。用來緩存空閒的線程,以至於不被銷燬,
#如果線程緩存在的空閒線程,需要重新建立新連接,則會優先調用線程池中的緩存,很快就能響應連接請求。
#每建立一個連接,都需要一個線程與之匹配。
thread_cache_size = 384
 
#External-locking用於多進程條件下爲MyISAM數據表進行鎖定
#服務器訪問數據表時經常需要等待解鎖,因此在單服務器環境下external locking開啓會讓MySQL性能下降
 
#單服務器環境,使用skip-external-locking,關閉外部鎖定,
#多服務器使用同一個數據庫目錄時,必須開啓external-locking,也就是說註釋掉skip-external-locking
skip-external-locking
 
 
#最大的空閒等待時間,默認是28800,單位秒,即8個小時
#通過mysql客戶端連接數據庫是交互式連接,通過jdbc連接數據庫是非交互式連接
#交互式連接超時時間,超過這個時間自動斷開連接
interactive_timeout = 600
#非交互式連接超時時間,超過這個時間自動斷開連接
wait_timeout = 600
 
#它規定了內部內存臨時表的最大值,每個線程都要分配。(實際起限制作用的是tmp_table_size和max_heap_table_size的最小值。)
#如果內存臨時表超出了限制,MySQL就會自動地把它轉化爲基於磁盤的MyISAM表,存儲在指定的tmpdir目錄下
tmp_table_size = 96M
max_heap_table_size = 96M
 
 
############################
##########日誌設置##########
############################
 
# 日誌時間戳,mysql5.7.2版本之後纔有的屬性,控制寫入到文件上顯示日誌的時間,
# 不會影響general log 和 slow log 寫到表(mysql.general_log, mysql.slow_log)中的日誌的時間
# 可以設置的有:UTC 和 SYSTEM,默認UTC,即0時區的時間,比北京時間慢8小時,所以要設置爲SYSTEM
log_timestamps = SYSTEM
 
#日誌的輸出位置一般有三種方式:file(文件),table(表),none(不保存)
#其中前兩個輸出位置可以同時定義,none表示是開啓日誌功能但是不記錄日誌信息。
#file就是通過general_log_file=/mydata/data/general.log 等方式定義的,
#而輸出位置定義爲表時查看日誌的內容:mysql.general_log表
 
##二進制日誌設置
#默認不開啓二進制日誌
log_bin = OFF
#log-bin = /data/mysqldata/3307/binlog/mysql-bin 設置二進制路徑時,如果沒有生命log_bin=OFF,會開啓日誌
#二進制日誌緩衝大小
#我們知道InnoDB存儲引擎是支持事務的,實現事務需要依賴於日誌技術,爲了性能,日誌編碼採用二進制格式。那麼,我們如何記日誌呢?有日誌的時候,就直接寫磁盤?
#可是磁盤的效率是很低的,如果你用過Nginx,,一般Nginx輸出access log都是要緩衝輸出的。因此,記錄二進制日誌的時候,我們是否也需要考慮Cache呢?
#答案是肯定的,但是Cache不是直接持久化,於是面臨安全性的問題——因爲系統宕機時,Cache中可能有殘餘的數據沒來得及寫入磁盤。因此,Cache要權衡,要恰到好處:
#既減少磁盤I/O,滿足性能要求;又保證Cache無殘留,及時持久化,滿足安全要求。
binlog_cache_size = 16M
 
 
##慢查詢,開發調式階段才需要開啓慢日誌功能。上線後關閉
slow_query_log = OFF
#慢日誌文件路徑
slow_query_log_file = /data/mysql/logs/slow_query.log
#該值是ON,則會記錄所有沒有利用索引來進行查詢的語句,前提是slow_query_log 的值也是ON
log_queries_not_using_indexes = ON
#記錄管理語句
log-slow-admin-statements
#如果運行的SQL語句沒有使用索引,
#則mysql數據庫同樣會將這條SQL語句記錄到慢查詢日誌文件中。調試時候使用
#log-queries-not-using-indexes
#設定每分鐘記錄到日誌的未使用索引的語句數目,超過這個數目後只記錄語句數量和花費的總時間
#log_throttle_queries_not_using_indexes = 60
 
#MySQL能夠記錄執行時間超過參數 long_query_time 設置值的SQL語句,默認是不記錄的。超過這個時間的sql語句會被記錄到慢日誌文件中
long_query_time = 2
 
##錯誤日誌:記錄啓動,運行,停止mysql時出現的信息
log-error = /data/mysql/logs/error.log
 
##一般查詢日誌,記錄建立的客戶端連接用戶的所有操作,增上改查等,
#不是爲了調式數據庫,建議不要開啓,0關閉,1開啓
general_log = OFF
general_log_file = /data/mysql/logs/general.log
 
#log-long-format 擴展方式記錄有關事件
#它是記錄激活的更新日誌、二進制更新日誌、和慢查詢日誌的大量信息。例如,所有查詢的用戶名和時間戳將記錄下來
#log-short-format,相反,記錄少量的信息
 
 

############################
######數據庫存儲引擎########
############################
 
#默認使用InnoDB存儲引擎
default_storage_engine = InnoDB
 
############################
######innoDB setting########
############################
 
#控制打開.ibd文件的數量。
#如果未啓用innodb_file_per_table,則默認值爲300
#否則取決於300和innodb_open_files中的較大值
innodb_file_per_table = 1
innodb_open_files = 350
#表定義緩存(數據字典)數量400-2000,默認爲400 + (table_open_cache / 2),小網站可以設置爲最低
table_definition_cache = 400
#InnoDB 用來高速緩衝數據和索引內存緩衝大小。更大的設置可以使訪問數據時減少磁盤 I/O。
innodb_buffer_pool_size = 64M
 
#單獨指定數據文件的路徑與大小
#默認會在datadir目錄下創建ibdata1,表空間tablespace
#如果想爲innodb tablespace指定不同目錄下的文件,必須指定innodb_data_home_dir,home目錄
innodb_data_file_path = ibdata1:32M:autoextend
#對於多核的CPU機器,可以修改innodb_read_io_threads和innodb_write_io_threads來增加IO線程,來充分利用多核的性能。默認4
#innodb_write_io_threads = 4
#innodb_read_io_threads = 4
 
#併發線程數的限制值,表示默認0情況下不限制線程併發執行的數量
innodb_thread_concurrency = 0
#開始碎片回收線程。這個應該能讓碎片回收得更及時而且不影響其他線程的操作,
#默認值1表示innodb的purge操作被分離到purge線程中,master thread不再做purge操作。
#innodb_purge_threads = 1
 
#配置MySql日誌何時寫入硬盤的參數,默認爲1
#0:log buffer將每秒一次地寫入log file中,並且log file的flush(刷到磁盤)操作同時進行。該模式下在事務提交的時候,不會主動觸發寫入磁盤的操作。
#1:每次事務提交時MySQL都會把log buffer的數據寫入log file,並且flush(刷到磁盤)中去
#2:每次事務提交時mysql都會把log buffer的數據寫入log file,但是flush(刷到磁盤)操作並不會同時進行。該模式下,MySQL會每秒執行一次 flush(刷到磁盤)操作
#通常設置爲 1,意味着在事務提交前日誌已被寫入磁盤, 事務可以運行更長以及服務崩潰後的修復能力。
innodb_flush_log_at_trx_commit = 1
 
#InnoDB 將日誌寫入日誌磁盤文件前的緩衝大小。理想值爲 1M 至 8M。大的日誌緩衝允許事務運行時不需要將日誌保存入磁盤而只到事務被提交(commit)。
#因此,如果有大的事務處理,設置大的日誌緩衝可以減少磁盤I/O。
innodb_log_buffer_size = 2M
#日誌組中的每個日誌文件的大小(單位 MB)。如果 n 是日誌組中日誌文件的數目,那麼理想的數值爲 1M 至下面設置的緩衝池(buffer pool)大小的 1/n。較大的值,
#可以減少刷新緩衝池的次數,從而減少磁盤 I/O。但是大的日誌文件意味着在崩潰時需要更長的時間來恢復數據。
innodb_log_file_size = 128M
#指定有三個日誌組
innodb_log_files_in_group = 3
#innodb_max_dirty_pages_pct作用:控制Innodb的髒頁在緩衝中在那個百分比之下,值在範圍1-100,默認爲90.這個參數的另一個用處:
#當Innodb的內存分配過大,致使swap佔用嚴重時,可以適當的減小調整這個值,使達到swap空間釋放出來。建義:這個值最大在90%,最小在15%。
#太大,緩存中每次更新需要致換數據頁太多,太小,放的數據頁太小,更新操作太慢。
innodb_max_dirty_pages_pct = 75
#在回滾(rooled back)之前,InnoDB 事務將等待超時的時間(單位 秒)
innodb_lock_wait_timeout = 120
 
#Innodb Plugin引擎開始引入多種格式的行存儲機制,目前支持:Antelope、Barracuda兩種。其中Barracuda兼容Antelope格式。
#innodb_file_format = Barracuda
#限制Innodb能打開的表的數量
#innodb_open_files = 65536
 
 
#分佈式事務
#innodb_support_xa = FALSE
 
#innodb_buffer_pool_size 一致 可以開啓多個內存緩衝池,把需要緩衝的數據hash到不同的緩衝池中,這樣可以並行的內存讀寫。
#innodb_buffer_pool_instances = 4
#這個參數據控制Innodb checkpoint時的IO能力
#innodb_io_capacity = 500
#作用:使每個Innodb的表,有自已獨立的表空間。如刪除文件後可以回收那部分空間。
#分配原則:只有使用不使用。但DB還需要有一個公共的表空間。
#innodb_file_per_table = 1
 
#當更新/插入的非聚集索引的數據所對應的頁不在內存中時(對非聚集索引的更新操作通常會帶來隨機IO),會將其放到一個insert buffer中,
#當隨後頁面被讀到內存中時,會將這些變化的記錄merge到頁中。當服務器比較空閒時,後臺線程也會做merge操作
#innodb_change_buffering = inserts
#該值影響每秒刷新髒頁的操作,開啓此配置後,刷新髒頁會通過判斷產生重做日誌的速度來判斷最合適的刷新髒頁的數量;
#innodb_adaptive_flushing = 1
 
#數據庫事務隔離級別 ,讀取提交內容
#transaction-isolation = READ-COMMITTED
 
#innodb_flush_method這個參數控制着innodb數據文件及redo log的打開、刷寫模式
#InnoDB使用O_DIRECT模式打開數據文件,用fsync()函數去更新日誌和數據文件。
#innodb_flush_method = O_DIRECT
#默認設置值爲1.設置爲0:表示Innodb使用自帶的內存分配程序;設置爲1:表示InnoDB使用操作系統的內存分配程序     
#innodb_use_sys_malloc = 1
 
############################
######myisam setting########
############################
bulk_insert_buffer_size = 8M
myisam_sort_buffer_size = 8M
# MySQL重建索引時所允許的最大臨時文件的大小
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
#忽略表名大小寫
lower_case_table_names=1
 
#數據庫全量備份
[mysqldump]
#強制mysqldump從服務器一次一行地檢索表中的行
quick
#可接收數據包大小
max_allowed_packet = 16M
 
#在mysqld服務器不使用的情況下修復表或在崩潰狀態下恢復表
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M
 
# https://lnmp.org/  linux nginx mysql php一鍵安裝配置

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章