前言
最近在折騰性能測試,在測試一個接口的時候發現少量的並發數時會報錯,CPU有很大的iowait比例,大量用戶並發時反而沒有報錯。該接口應用代碼沒有復雜邏輯,分析初步定為數據庫。數據庫用的是mysql,需要安裝MysqlReport來查看數據庫的各項數據,於是在自己的阿里雲測試環境進行安裝和測試。
安裝步驟
1.下載
打開官方下載地址:https://dev.mysql.com/downloads/mysql/5.7.html,根據自己對應是系統進行選擇,這里演示的是Linux系統的安裝,選擇如下圖(文件有600多M,下載需要等待一定時間)
方便大家學習,安裝包放百度網盤上:鏈接:https://pan.baidu.com/s/1hXKUSe3RY7-A0IeW0ihfCg 提取碼:v6cj
如果嫌注冊賬號麻煩,可以跳過賬號注冊,直接點擊下面的just start my download即可下載,這里用的是windows系統下載,下載完成通過ftp或者rz命令進行文件上傳到Linux,當然也可以在Linux系統中用wget方式進行下載,命令是:wget https://dev.mysql.com/downloads/file/?id=494229
2.解壓,並放入用戶安裝目錄
在linux根目錄下創建文件夾,將文件上傳到該文件夾下,此文件夾為臨時文件夾,后面會將解壓的文件目錄放入/usr/local目錄下
解壓安裝包:
解壓完成后可以看到如下圖文件夾:
將文件夾移動到/usr/local目錄下並重命名為mysql
3.安裝准備
3.1 創建mysql組及mysql用戶,並授權
創建mysql組:
創建mysql用戶:
3.2 創建數據存放目錄並授權(注意,這里是在根目錄下創建/data/mysql目錄,不要搞錯了,我是因為沒在根目錄下創建,所有后面初始化時失敗了多次,慘痛的教訓,希望后來人不要重蹈覆轍)
回到根目錄下創建數據存放目錄/data/mysql:
查看目錄是否創建成功:
3.3 配置my.cnf文件
根目錄下執行:vim /etc/my.cnf
打開后將下面配置代碼粘貼進去,按:wq后按Enter鍵保存退出:
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
如果安裝的是新版(這里是mysql-5.7.33),my.cnf會有默認內容,如下,則需要你手動修改datadir、socket、log-error、pid-file幾個參數
3.4 初始化數據庫
進入mysql的bin目錄:cd /usr/local/mysql/bin
執行初始化並查看mysql賬戶密碼:
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
cd /
cat /data/mysql/mysql.err
4. 啟動mysql
4.1 將mysql.server放置到/etc/init.d/mysql中
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
4.2 啟動mysql,並查看是否啟動成功
如果啟動成功了,表示mysql安裝成功了!!!
---------------------------------------------------------------------------------------------------------------------------------------------------------------
遇到的問題:
問題1:初始化時提示:--initialize specified but the data directory has files in it. Aborting.
原因分析:是因為根目錄下data目錄下有文件
解決辦法:在根目錄下使用rm -rf data,將data文件夾刪掉,重新創建一個/data/mysql文件目錄即可,命令為:mkdir -p /data/mysql
問題2:初始化時提示:log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'.
原因分析:沒有/var/log目錄下沒有mariadb目錄和mariadb.log文件
解決辦法:創建文件目錄和文件,然后給Mysql用戶賦權即可
mkdir /var/log/mariadb
touch /var/log/mariadb/mariadb.log
chown -R mysql:mysql /var/log/mariadb/
5. 修改密碼
5.1 進入mysql的bin目錄:cd /usr/local/mysql/bin
5.2 執行./mysql -u root -p,輸入的密碼為初始化數據庫時的密碼,詳見上述步驟3.4,執行后顯示mysql>即表示進入mysql成功
5.3 執行下述3個命令,修改密碼並刷新權限
SET PASSWORD = PASSWORD('123456');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;
5.4 重新登錄
這時如果使用(navicat等工具)遠程登錄,會發現無法連接如下圖
navicat下載:
鏈接:https://pan.baidu.com/s/1aknIUwy2L1Ws2uYL88COng
提取碼:og7l
執行以下3個命令(先登錄數據庫)
use mysql #訪問mysql庫
update user set host = '%' where user = 'root'; #使root能再任何host訪問
FLUSH PRIVILEGES;
(如果不是使用阿里雲雲服務,到這里可以使用遠程工具連接數據庫成功)
因為我是在阿里雲ECS上安裝的mysql,所以必須要先去阿里雲ECS實例上去打開3306端口,如下圖、
授權對象寫自己電腦的Ip地址即可
然后測試連接,連接成功,如下圖
好了,到此,mysql就可以通過navicat或其它遠程工具登錄使用了。
只能說該踩的坑一個沒少踩,希望后面的小伙伴少踩點坑,順利安裝成功!
題外話:
1.如果不希望每次都到bin目錄下使用mysql命令則執行以下命令
ln -s /usr/local/mysql/bin/mysql /usr/bin
2.查看mysql日志文件命令(要先登錄mysql):
show variables like 'general_log_file';
3.重啟mysql,報錯,提示:ERROR! The server quit without updating PID file (/data/mysql/localhost.localdomain.pid).
查看了這個目錄,發現並沒有localhost.localdomain.pid這個文件
百度了一下這個文件的作用,以下是別人的解決辦法:
1.localhost.localdomain.pid 保存的是MySQL所啟動的后台服務進程的PID值,如果這個文件丟了,可以創建一些,然后把一個數字放入其中。 2./tmp/mysql.sock 文件的作用是 MySQL通過這個unix socket 文件來與本地的客戶端進行通信的。如果此文件丟了,可以通過重新啟動服務器來重新創建它。 不建議將此文件放到 /tmp目錄下。 丟失后在mysql的安裝目錄是沒有*.pid,mysql.sock文件造成mysql無法重啟,解決方法是重新創建hostname.pid文件 (1)ps -ef |grep mysql 找出mysql的進程,如:6225; (2)vi hostname.pid寫入6225 (3)重新啟動mysql正常.
於是新建localhost.localdomain.pid這個文件,然后重啟,注意:新建后不能保存一個空文件,需要在里面輸入一些數字
參考資料: