天天看點

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

1、MySQL 曆史簡介

1999年至 2000 年,Monty 成立了MySQL AB 這個公司。 2000 年,MySQL 公布了自己的源代碼,并采用了 GPL 許可協定,正式進入開源的世界,這讓 MySQL 迅速發展。2005 年 10 月 MySQL 釋出了一個裡程碑式的版本 MySQL 5.0 。

MySQL 5.0版本加入了很多新特性,包括存儲過程、伺服器遊标、觸發器、視圖、分布式事務、查詢優化器等,5.0 也奠定了高性能資料庫的基礎。 2008 年 1 月 16 日 Sun 公司用10億美元收購了 MySQL, 在一年多後的時間裡 MySQL 開源資料庫又被閉源的 Oracle 公司收購,Oracle 于 2009 年 4 月 20 日以每股 9.5 美元的價格收購Sun,交易總價值約為 74 億美元。從此,MySQL 變成了 Oracle 旗下的産品。

MySQL在2016年 9 月 12 日釋出了 8.0 版本,标志着一個新的裡程碑,在 2019 年 2 月 1 日釋出了 8.0.15 版本,兩年多的時間裡又出了 8.0 的十幾個版本,如下圖所示。

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

2、MySQL 5.7 下載下傳

今天主要講解的是 Linux 系統下 MySQL5.7 的安裝,8.0 不再本次的範圍内。

打開浏覽器輸入以下網址:

https://dev.mysql.com/downloads/mysql/5.7.html

找到 MySQL Community Server 5.7 點選進入。

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

選擇正确的系統和版本,選擇下載下傳,如下圖。

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

這裡需要 Oracle SSO 賬号登陸才可下載下傳,有賬号的登陸就可以直接下載下傳了,沒有的也可以去注冊,但是下載下傳速度不是很快,這裡我已經下載下傳好了 Windows 和 Linux 版本 ,本公衆号背景回複【MySQL下載下傳】即可擷取,還有超詳細的 Windows 下安裝教程。

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

賬号登陸之後,第一次需填寫如下調查,填寫後可直接下載下傳了。

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

選擇儲存檔案的位置,等待下載下傳。

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

下載下傳完之後,由于伺服器一般都屬于内網環境,無法上網,則通過 SFTP 上傳至伺服器 /opt 目錄,然後檢驗 MD5 值,保證軟體下載下傳過程中沒有損壞,可正常使用,下圖中檢驗出來的 MD5 值與上圖下載下傳中的一緻,說明軟體可正常使用。

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

3、MySQL 5.7 安裝

3.1 首先安裝前要進行環境檢測

為了能夠很順利的安裝軟體,環境檢測是必不可少的一項,安裝大型資料庫 Oracle 時也是需要對作業系統進行檢測的,以便能夠更好的去安裝軟體。

(1)需要關閉 SELINUX 和 作業系統防火牆 iptables

設定 selinux 為 disable 并重新開機作業系統;用 chkconfig iptables off 指令關閉防火牆,如下圖所示。

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

(2)IO排程預設為 cfq 模式,牆裂建議使用 deadline 模式。

使用如下指令檢視IO排程是否為 cfq 模式

cat /sys/block/sda/queue/scheduler

在 /etc/grub.conf 檔案中添加一行:

elevator=deadline
模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

(3)swap 分區設定

swappiness 的大小直接影響 swap 分區,它有兩個極端值 0 和100,0 代表着最大限度地使用實體記憶體,然後才會使用 swap 分區,這樣會導緻記憶體的溢出 OOM 的錯誤。設定成 100 是積極的使用 swap 分區,把記憶體上的資料及時搬家到 swap 分區裡,這也不推薦。使用如下指令可檢視。

[root@rhel67 opt]# cat /proc/sys/vm/swappiness

若此值不是 60 牆裂建議 使用vi /etc/sysctl.conf 檔案,加入 vm.swappiness = 60 即可。修改之前建議先備份此檔案,然後重新開機作業系統。

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

(4)檔案系統的選擇

這裡建議大家使用 xfs 檔案系統,相比 ext4 它管理更友善,支援動态擴容,删除檔案也很友善。XFS 檔案系統是擴充檔案系統 (extent file system)的一個擴充。XFS 是64 位高性能日志檔案系統。對 XFS 的支援大概在 2002年合并到了 Linux 核心,到了 2009 年,紅帽企業版 Linux 5.4 也支援了 XFS 檔案系統。對于 64 位檔案系統,XFS 支援最大檔案系統大小為 8 exbibytes。XFS 檔案系統有一些缺陷,例如它不能壓縮,删除大量檔案時性能低下。目前RHEL 7.0 檔案系統預設使用 XFS。

(5)作業系統的限制

資源限制裡主要看 open files 和 max user processes 這兩個參數,當 open files 設定不合理時,而目前伺服器的連接配接過多或者表過多時,就會有可能出現打不開表或者通路不了表的現象,預設情況下最大的句柄數為 1024 個,表示單個程序最多可以通路 1024 個檔案句柄。如果超過預設值就會出現檔案句柄超過限制的錯誤 “ too many open files”.

max user processes 最大會話連接配接,當作業系統有多個執行個體時,但發現連接配接不了,報錯為“resource temporarily unaviable”的錯誤,則表示沒有足夠的資源。

當出現這樣的問題就需要修改系統的軟硬資源限制,備份檔案後編輯如下檔案并重新開機作業系統。

vi /etc/security/limits.conf
模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

(6)numa 需要關閉

numa 是一種關于多個cpu 如何通路記憶體的架構模型,現在的 cpu 基本都是numa 架構,Linux 核心2.5 開始支援 numa。numa 架構簡單點兒說就是,一個實體 cpu(一般包含多個邏輯 cpu 或者說多個核心)構成一個 node,這個 node 不僅包括cpu,還包括一組記憶體插槽,也就是說一個實體 cpu 以及一塊記憶體構成了一個 node。

關閉 numa 功能,可以更好的配置設定記憶體,不需要采用 swap 的方式來擷取記憶體,有經驗的 DBA 知道使用 swap 導緻的資料庫性能下降有多麼的惡心,關閉方法也分在 BIOS、作業系統中關閉,或者是在資料庫啟動過程中關閉。

numa --interleave=all /usr/local/mysql/bin/mysqld_safe-defaults-file=/etc/my.cnf &

3.2 建立使用者群組等

[root@rhel67 ~]# groupadd mysql

[root@rhel67 ~]# useradd-g mysql mysql -s /sbin/nologin

移動軟體至 /usr/local 目錄,并解壓軟體。

[root@rhel67 local]# mv/opt/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz /usr/local/

[root@rhel67 local]# tar -zxvfmysql-5.7.25-linux-glibc2.12-x86_64.tar.gz

做一個軟連結友善管理與更新,并授權目錄

[root@rhel67 local]# ln -smysql-5.7.25-linux-glibc2.12-x86_64 mysql

[root@rhel67 local]# chown -R mysql:mysql mysql

[root@rhel67 local]# chmod -R 775 mysql

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

3.3 建立資料庫目錄并授權

[root@rhel67 opt]# mkdir -p /opt/mysql/

[root@rhel67opt]# chown -R mysql:mysql /opt/mysql

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

3.4 參數編輯

由于是二進制檔案安裝,資料庫參數檔案需要自己配置,以下内容可複制,很多參數均是生産環境中實踐而來的,後期在說明參數的意義。

vim /etc/my.cnf

[client]

port = 3306

default-character-set=utf8

socket=/tmp/mysql.sock

[mysql]

prompt="\u@db \R:\m:\s [\d] "

no-auto-rehash

[mysqld]

user = mysql

port = 3306

basedir = /usr/local/mysql

datadir =/opt/mysql

socket= /tmp/mysql.sock

character-set-server = utf8mb4

skip_name_resolve = 1

open_files_limit = 65535

back_log = 1024

max_connections = 512

max_connect_errors = 100000

table_open_cache = 1024

table_definition_cache = 1024

table_open_cache_instances = 64

thread_stack = 512K

external-locking = FALSE

max_allowed_packet =32M

sort_buffer_size =4M

join_buffer_size =4M

thread_cache_size = 768

query_cache_size = 0

query_cache_type = 0

interactive_timeout = 600

wait_timeout = 600

tmp_table_size = 32M

max_heap_table_size = 32M

slow_query_log = 1

slow_query_log_file = /opt/mysql/slow.log

log-error = /opt/mysql/error.log

long_query_time = 0.5

server-id = 3306100

log-bin =/opt/mysql/mysql-binlog

sync_binlog =1

binlog_cache_size = 4M

max_binlog_cache_size = 128M

max_binlog_size = 1024M

expire_logs_days = 7

master_info_repository = TABLE

relay_log_info_repository = TABLE

gtid_mode = on

enforce_gtid_consistency = 1

log_slave_updates

binlog_format = row

relay_log_recovery = 1

relay-log-purge =1

key_buffer_size = 32M

read_buffer_size = 8M

read_rnd_buffer_size = 4M

bulk_insert_buffer_size = 64M

lock_wait_timeout = 3600

explicit_defaults_for_timestamp = 1

innodb_thread_concurrency = 0

innodb_sync_spin_loops =100

innodb_spin_wait_delay = 30

transaction_isolation =REPEATABLE-READ

innodb_buffer_pool_size = 1024M

innodb_buffer_pool_instances = 8

innodb_buffer_pool_load_at_startup=1 innodb_buffer_pool_dump_at_shutdown =1

innodb_data_file_path = ibdatal:1G:autoextend #innodb_flush_1og_at_trx_commit =1

innodb_log_buffer_size = 32M

innodb_log_file_size = 2G

innodb_log_files_in_group = 2

innodb_io_capacity = 2000

innodb_io_capacity_max = 4000

innodb_flush_neighbors = 0

innodb_write_io_threads = 8

innodb_read_io_threads = 8

innodb_purge_threads = 4

innodb_page_cleaners = 4

innodb_open_files = 65535

innodb_max_dirty_pages_pct = 50

innodb_flush_method = O_DIRECT

innodb_lru_scan_depth = 4000

innodb_checksum_algorithm = crc32

innodb_lock_wait_timeout = 10

innodb_rollback_on_timeout = 1

innodb_print_all_deadlocks = 1

innodb_file_per_table = 1

innodb_online_alter_log_max_size = 4G

internal_tmp_disk_storage_engine = InnoDB

innodb_stats_on_metadata = 0

innodb_status_file = 1

innodb_status_output = 0

innodb_status_output_locks = 0

#performance_schema

performance_schema=1

performance_schema_instrument = '%=on'

#innodb monitor

innodb_monitor_enable = "module_innodb"

innodb_monitor_enable = "module_innodb"

innodb_monitor_enable = "module_server"

innodb_monitor_enable = "module_dml"

innodb_monitor_enable = "module_ddl"

#innodk_monitor_enable = "module_trx"

innodb_monitor_enable = "module_os"

innodk_monitor_enable = "module_purge"

innodb_monitor_enable = "module_log"

innodb_monitor_enable = "module_lock"

innodb_monitor_enable = "module_buffer"

innodb_monitor_enable = "module_index"

innodb_monitor_enable = "module_ibuf_system"

innodb_monitor_enable = "module_buffer_page"

innodb_monitor_enable = "module_adaptive_hash"

[mysqldump]

quick

max_allowed_packet = 32M

[root@rhel67 ~]# chown -R mysql:mysql/usr/local/mysql

[root@rhel67 ~]# chown -R mysql:mysql /opt/mysql

3.5 初始化資料庫

使用mysqld 指令初始化資料庫

[root@rhel67 ~]# cd /usr/local/mysql/bin

[root@rhel67 bin]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir =/usr/local/mysql --datadir=/opt/mysql --user=mysql --initialize

[root@rhel67 bin]#

初始化後需檢視 /opt/mysql/error.log ,無關鍵錯誤即可。

注意:若出現如下錯誤,需要删除 /opt/mysql/ 目錄下的内容,重新初始化。
模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

3.6 啟動資料庫并設定密碼

[root@rhel67 bin]# pwd /usr/local/mysql/bin

[root@rhel67bin]#

[root@rhel67 bin]# ./mysqld_safe --defaults-file=/etc/my.cnf &

[1]14163

[root@rhel67 bin]# 2017-10-29T18:11:58.775800Z mysqld_safe Logging to'/opt/mysql/error.log'. 2017-10-29T18:11:58.833798Z mysqld_safe Starting mysqlddaemon with databases from /opt/mysql

當資料庫啟動成功後,進入資料庫的初始化密碼會在/opt/mysql/error.log裡面,使用下面指令即可檢視密碼:

cat /opt/mysql/error.log | grep password
模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

找到密碼,使用如下指令登陸 MySQL 并設定密碼為 root 且永不過期。

./mysql -u root -p set password ='root';

alter user 'root'@'localhost' password expire never;

flush privileges;

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

3.7 優化連接配接

每次登陸 MySQL時都要進入到 MySQL 的目錄下,有點麻煩,于是編輯 /etc/profile 定義一個别名,直接登入即可。使用指令如下:

vi /etc/profile

aliasmysql='/usr/local/mysql/bin/mysql'

source /etc/profile

模拟真實環境下超簡單超詳細的 MySQL 5.7 安裝

如上,MySQL5.7 算是安裝完畢,可以正常使用了,這裡簡單說明一下環境:OS: RHEL6.7 64 bit,之前安裝過 Oracle 11.2.0.4,其他基本上沒有差別,需要 Windows 版本的 MySQL5.7.25 資料庫安裝包,本公衆号【JiekeXu_IT】背景回複【MySQL下載下傳】即可擷取,還有超詳細的 Windows 下安裝教程和軟體,關注本公衆号即可獲得 Oracle 和 MySQL 資料庫入門、進階、精通視訊資料,還有更多視訊資料趕快行動吧!