記錄一下自己在 CentOS7 下二進位制安裝 MySQL5.7.26 的過程,之前使用 Linux(CentOS7)下rpm安裝MySQL8.0.16 之後發現 rpm 方式安裝不利於維護,也不利於單機安裝 MySQL 多例項,所以這裡記錄一下二進位制安裝過程,理論上8.0二進位制安裝按此方法也沒問題,畢竟官方文件 5.7和8.0 版本的安裝文件步驟都一致。

一、準備工作

1. 下載MySQL所需要的安裝包

MySQL官網 下載,上傳至 CentOS 系統 /usr/local/ 目錄下,當然你也可以使用 wget 命令直接下載至 CentOS,此處使用的 5.7.26 版本。

2. 檢查是否存在自帶mariadb

CentOS7 開始不自帶 MySQL,替換成了 mariadb,但是我們安裝 MySQL 的時候會衝突,所以需要先解除安裝 mariadb。

# 查詢是否存在自帶mariadb
rpm -qa | grep mariadb # 如果存在則解除安裝, 比如我查找出來的名稱為mariadb-libs-5.5.60-1.el7_5.x86_64
rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64 --nodeps

3. 檢查是否安裝過MySQL

# 檢查是否安裝過mysql
rpm -qa | grep mysql # 如果存在則解除安裝, 比如名稱為mysql-libs-5.1.52.x86_64
rpm -e mysql-libs-5.1.52.x86_64 --nodeps

4. 檢查是否開啟MySQL使用埠

我使用的預設埠 3306

# 檢視想開的埠是否已開,若此提示FirewallD is not running, 表示為不可知的防火牆 需要檢視狀態並開啟防火牆, 如果是雲伺服器還需要去控制檯配置安全組訪問
firewall-cmd --query-port=3306/tcp # 開啟埠, success代表成功
firewall-cmd --add-port=3306/tcp --permanent
# 重新整理配置, 使配置生效
firewall-cmd --reload

二、安裝及配置MySQL

安裝參考 MySQL 二進位制安裝官方文件:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html

1. 建立使用者和使用者組

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

2. 將二進位制包進行解壓設定軟連結

# 解壓
tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz # 設定軟連結
ln -s mysql-5.7.26-linux-glibc2.12-x86_64 mysql

3. 編輯my.cnf

編輯配置檔案 /etc/my.cnf,新增如下內容,配置檔案用不到的地方可以刪除。

[client]                                    # 客戶端設定,即客戶端預設的連線引數
port = 3306 # 預設連線埠
socket = /usr/local/mysql/data/mysql.sock # 用於本地連線的socket套接字,mysqld守護程序生成了這個檔案 [mysqld] # 服務端基本設定
# 基本設定
user = mysql # 使用mysql使用者啟動MySQL
server-id = 1 # Mysql服務的唯一編號 每個mysql服務Id需唯一
port = 3306 # MySQL監聽埠
basedir = /usr/local/mysql # MySQL安裝根目錄
datadir = /usr/local/mysql/data # MySQL資料檔案所在位置
socket = /usr/local/mysql/data/mysql.sock # 為MySQL客戶端程式和伺服器之間的本地通訊指定一個套接字檔案
pid-file = /usr/local/mysql/data/mysql.pid # pid檔案所在目錄
skip_name_resolve = 1 # 只能用IP地址檢查客戶端的登入,不用主機名
character-set-server = utf8mb4 # 資料庫預設字符集,主流字符集支援一些特殊表情符號(特殊表情符佔用4個位元組)
lower_case_table_names = 1 # 是否對sql語句大小寫敏感,1表示不敏感
max_connections = 500 # 最大連線數
max_connect_errors = 1000 # 最大錯誤連線數
explicit_defaults_for_timestamp = true # TIMESTAMP如果沒有顯示宣告NOT NULL,允許NULL值
max_allowed_packet = 128M # SQL資料包傳送的大小,如果有BLOB物件建議修改成1G
interactive_timeout = 1800 # MySQL連線閒置超過一定時間後(單位:秒)將會被強行關閉
wait_timeout = 1800 # MySQL預設的wait_timeout值為8個小時, interactive_timeout引數需要同時配置才能生效
tmp_table_size = 16M # 內部記憶體臨時表的最大值 ,設定成128M;比如大資料量的group by ,order by時可能用到臨時表;超過了這個值將寫入磁碟,系統IO壓力增大
max_heap_table_size = 128M # 定義了使用者可以建立的記憶體表(memory table)的大小
query_cache_size = 0 # 禁用mysql的快取查詢結果集功能;後期根據業務情況測試決定是否開啟;大部分情況下關閉下面兩項
query_cache_type = 0 # 使用者程序分配到的記憶體設定,每個session將會分配引數設定的記憶體大小
read_buffer_size = 2M # MySQL讀入緩衝區大小。對錶進行順序掃描的請求將分配一個讀入緩衝區,MySQL會為它分配一段記憶體緩衝區
read_rnd_buffer_size = 8M # MySQL的隨機讀緩衝區大小
sort_buffer_size = 8M # MySQL執行排序使用的緩衝大小
binlog_cache_size = 1M # 一個事務,在沒有提交的時候,產生的日誌,記錄到Cache中;等到事務提交需要提交的時候,則把日誌持久化到磁碟。預設binlog_cache_size大小32K
back_log = 150 # 在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆疊中;官方建議back_log = 50 + (max_connections / 5),封頂數為900
# 日誌設定
log_error = /usr/local/mysql/data/mysql-error.log # 資料庫錯誤日誌檔案
slow_query_log = 1 # 慢查詢sql日誌設定
long_query_time = 1 # 慢查詢時間;超過1秒則為慢查詢
slow_query_log_file = /usr/local/mysql/data/mysql-slow.log # 慢查詢日誌檔案
# log_queries_not_using_indexes = 1 # 檢查未使用到索引的sql
# log_throttle_queries_not_using_indexes = 5 # 用來表示每分鐘允許記錄到slow log的且未使用索引的SQL語句次數。該值預設為0,表示沒有限制
# min_examined_row_limit = 100 # 檢索的行數必須達到此值才可被記為慢查詢,查詢檢查返回少於該引數指定行的SQL不被記錄到慢查詢日誌
expire_logs_days = 30 # MySQL binlog日誌檔案儲存的過期時間,過期後自動刪除
# Innodb設定
innodb_open_files = 500 # 限制Innodb能開啟的表的資料,如果庫裡的表特別多的情況,請增加這個。這個值預設是300
innodb_buffer_pool_size = 64M # InnoDB使用一個緩衝池來儲存索引和原始資料,一般設定物理儲存的60% ~ 70%;這裡你設定越大,你在存取表裡面數據時所需要的磁碟I/O越少
innodb_log_buffer_size = 2M # 此引數確定寫日誌檔案所用的記憶體大小,以M為單位。緩衝區更大能提高效能,但意外的故障將會丟失資料。MySQL開發人員建議設定為1-8M之間
innodb_flush_method = O_DIRECT # O_DIRECT減少作業系統級別VFS的快取和Innodb本身的buffer快取之間的衝突
innodb_write_io_threads = 4 # CPU多核處理能力設定,根據讀,寫比例進行調整
innodb_read_io_threads = 4
innodb_lock_wait_timeout = 120 # InnoDB事務在被回滾之前可以等待一個鎖定的超時秒數。InnoDB在它自己的鎖定表中自動檢測事務死鎖並且回滾事務。InnoDB用LOCK TABLES語句注意到鎖定設定。預設值是50秒
innodb_log_file_size = 32M # 此引數確定資料日誌檔案的大小,更大的設定可以提高效能,但也會增加恢復故障資料庫所需的時間
# sql_mode
sql_mode = STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_IN_DATE,NO_ZERO_DATE

由於個人能力有限,配置檔案中不足之處歡迎指正

4. 初始化資料目錄

授權

cd /usr/local/mysql

mkdir mysql-files

chown mysql:mysql mysql-files

chmod 750 mysql-files

初始化資料目錄,包含了 MySQL 資料庫初始表。

bin/mysqld --initialize --user=mysql

執行後會生成一個隨機密碼在日誌/usr/local/mysql/data/mysql-error.log中,最後一行有如下的字樣,記住這個隨機密碼,例如:

[Note] A temporary password is generated for root@localhost: GddatQQp/5kK

GddatQQp/5kK 就是密碼,後面MySQL初次登入使用來修改密碼,不然無法進行其他操作。

5. 設定環境變數

# 開啟檔案
vim /etc/profile # 末尾新增內容
export PATH=$PATH:/usr/local/mysql/bin # 重新整理配置
source /etc/profile

6. 啟動MySQL

/usr/local/mysql/support-files/mysql.server start

看到 Starting MySQL. SUCCESS! 即可登入測試了。

7. 測試

隨機密碼登入,修改密碼。

# 使用隨機密碼登入,含特殊字元最好加''包裹
mysql -uroot -p'GddatQQp/5kK' # 修改密碼
set password=password('123456'); # 退出重新登入
exit
mysql -uroot -p123456

建立使用者,授權遠端登入,重新整理許可權。

GRANT ALL PRIVILEGES ON *.* TO 'SunnyBear'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

8. 開機自啟

開機自啟有很多種辦法,個人是在 /etc/rc.d/init.d 寫了個 autoStart.sh 指令碼用來管理需要自啟的程式,當然簡單的方式就是直接把 /usr/local/mysql/support-files/mysql.server 複製一份到 /etc/rc.d/init.d 下面加入系統服務嘍。

# 複製啟動指令碼到資源目錄
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld # 增加mysqld服務控制指令碼執行許可權
chmod +x /etc/rc.d/init.d/mysqld # 將mysqld服務加入到系統服務
chkconfig --add mysqld # 檢查mysqld服務是否已經生效
chkconfig --list mysqld

都讀到這裡了,來個 點贊、評論、關注、收藏 吧!

文章作者:IT王小二

首發地址:https://www.itwxe.com/posts/b1846d73/

版權宣告:文章內容遵循 署名-非商業性使用-禁止演繹 4.0 國際 進行許可,轉載請在文章頁面明顯位置給出作者與原文連結。