一、先前往官網下載mysql8
下載地址:
https://dev.mysql.com/downloads/
選擇Linux
二、刪除Linux中的mysql(如果有的話),上傳安裝包
1、先查看mysql是否存在,命令如下:
rpm -qa|grep -i mysql
如果使用這個命令之后沒有出現任何內容,表示沒有安裝過mysql,如果有出現,則刪除。
2、如果存在,那么停止mysql,刪除所有的服務
使用如下命令:
find / -name mysql
刪除出現的所有文件(如圖)
三、解壓安裝MySQL
1、解壓MySQL壓縮包
tar xvJf “你的安裝包名稱”,我這里是
tar xvJf mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz
2、重命名解壓后的MySQL
覺得解壓之后的MySQL文件夾名稱太長了,可以 mv “原文件名稱” “新文件名稱”,重命名一下,注意如果是在當前文件中重命名,新文件名中不能包含斜桿“/”,這是我的
mv mysql-8.0.31-linux-glibc2.12-x86_64 mysql-8.0.31
3、進入MySQL根目錄,創建data文件夾
進入根目錄
cd mysql-8.0.31/
創建data文件
mkdir data
四、創建mysql組和用戶
這個我沒發現有什么用,但很多教程都這么做,我這里也創建一下。
1、創建mysql組
groupadd mysql
2、創建mysql用戶
useradd -g mysql mysql
出現這樣的提示表示已經創建過mysql組和用戶了。
3、將安裝的MySQL權限給mysql用戶
命令,chown -R “mysql組名”.“mysql用戶名” “mysql安裝根目錄”
chown -R mysql.mysql /usr/MYSQL/mysql-8.0.31
五、MySQL初始化
1、初始化
在初始化之前提一嘴,Linux中的MySQL默認是區分表明大小寫的,如果你是安裝的也是MySQL8,那么不區分大小需要在數據庫初始化時設置,不然初始化后,在配置文件在設置重啟時是會報錯的。
進入MySQL的bin目錄進行初始化
./mysqld --user=mysql --basedir=/usr/MYSQL/mysql-8.0.31 --datadir=/usr/MYSQL/mysql-8.0.31/data --lower-case-table-names=1 --initialize
–lower-case-table-names=1 即設置不區分表明大小寫,最后面的 dwW3</EIewj 為初始化生產的臨時密碼。
2、初始化失敗(2023-11-9更新,初始化成功可以不看)
進入bin目錄報如下錯:
./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
原因:
這是一個與運行MySQL數據庫相關的問題。出現這個錯誤的原因是系統缺少了名為libaio.so.1的共享庫文件。
使用命令查看是否已安裝libaio軟件包,命令如下:
rpm -qa|grep libaio
可以看到并沒有安裝libaio軟件包。
解決辦法:
先安裝numactl軟件包,命令如下:
yum -y install numactl.x86_64
然后安裝libaio開發包,命令如下:
yum install libaio-devel.x86_64
再次查看是否安裝成功libaio軟件包
rpm -qa|grep libaio
可以看到安裝成功了,再次初始化應該就可以成功了。
六、修改MySQL配置文件
初次進入時配置是空的,進入命令
vim /etc/my.cnf
[mysqld]
port=3306
basedir=/usr/MYSQL/mysql-8.0.31/ # MySQL根目錄
datadir=/usr/MYSQL/mysql-8.0.31/data/ # MySQL的data目錄
socket=/tmp/mysql.sock
character-set-server=UTF8MB4
symbolic-links=0#解決“java.sql.SQLException: Expression #1 of ORDER BY clause is not in SELECT list,references column”
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
保存退出
七、添加服務到系統
進入MySQL根目錄,直接復制粘貼命令即可。
cp -a ./support-files/mysql.server /etc/init.d/mysql
八、授權以及添加服務
這里授權和添加服務都是在MySQL的根目錄中操作。
1、授權
chmod +x /etc/init.d/mysql
2、添加服務
chkconfig --add mysql
九、啟動MySQL
1、啟動MySQL命令
service mysql start
2、查看MySQL狀態
service mysql status
3、踩坑(2023-4-12更新,成功啟動的可以不看)
如果啟動時報如下錯
一個原因是上面新建的data目錄沒有權限,使用如下命令加上:
chmod -R 755 /usr/local/mysql/mysql-8.0.32/data
此處一定注意:將data目錄改為你的data目錄,然后再使用
然后再啟動mysql
可以看到報錯比上面少了,接下來看看上面報錯的日志,使用命令
cat /usr/local/mysql/mysql-8.0.32/data/iZ7xvbz75ed3prrdah1kceZ.err
前面在初始化時設置了表明大小寫不敏感,這里要在mysql的配置文件中顯示設置一下
保存退出,然后重啟mysql
成功啟動。
十、將MySQL命令添加到服務
1、添加服務
命令: ln -s “你的MySQL根目錄/bin/mysql” /usr/bin ,這一步是為了能在任何地方通過用戶名和密碼登錄MySQL,這是我的
ln -s /usr/MYSQL/mysql-8.0.31/bin/mysql /usr/bin
2、踩坑(2023-4-12更新,成功登錄mysql可以不看)
直到上一步都沒有出錯,在登錄mysql時報如下錯:
可能是掛載的路徑錯了,到掛載目錄查看,命令如下:
cd /usr/bin
可以看到mysql服務是紅色的,并且一直在閃,正常的應該是綠色的。
我當前的mysql根目錄是8.0.32,添加的時候寫成了8.0.31,怪不得會報錯。
解決辦法:刪除當前mysql的服務,重新添加。
先刪除,命令如下:
rm -rf /usr/bin/mysql
重新添加:
ln -s /usr/local/mysql/mysql-8.0.32/bin/mysql /usr/bin
可以看到mysql服務添加成功,可以登錄mysql了。
十一、修改密碼
1、先使用前面初始化拿到的臨時密碼登錄
mysql -uroot -p
輸入的密碼是不顯示的
2、切換到mysql數據庫
切換mysql命令
use mysql
如果切換mysql數據庫時出現這樣的錯就直接修改密碼:
查詢用戶表命令
select Host, User from user;
可以看到允許訪問root的host有哪些,%表示所有,這里只有localhost,修改密碼不成功可以看一下root對應的host的值。
注意:本人在此處出現了一個錯誤。
mysql報錯:You must reset your password using ALTER USER statement before executing this statement.
這是因為新安裝mysql后,登錄后,執行任何命令都會報錯:
You must reset your password using ALTER USER statement before executing this statement.
【解決辦法】
MySQL版本5.7.6版本以前用戶可以使用如下命令:
mysql> SET PASSWORD = PASSWORD('Admin2022!'); --此處后面跟隨的是用戶名一般是root
MySQL版本5.7.6版本開始的用戶可以使用如下命令:
mysql> ALTER USER USER() IDENTIFIED BY 'root';
【出現原因】
出現這種情況的原因:
MySQL版本5.6.6版本起,添加了password_expired功能,它允許設置用戶的過期時間。這個特性已經添加到mysql.user數據表,但是它的默認值是”N”,可以使用ALTER USER語句來修改這個值。
3、修改密碼
修改密碼的命令為:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'
修改之后需要刷新,使密碼生效
flush privileges;
下面講一下遠程授權和防火墻開放端口
在服務器上登錄MYSQL后,use mysql,依次執行如下兩句SQL
第一步:更新域屬性,'%'表示允許任意IP地址訪問:
輸入指令:
update user set host='%' where user ='root';
第二步:執行以上語句之后再執行:
輸入指令:
FLUSH PRIVILEGES;
第三步:再執行授權語句:
輸入指令:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
可以重啟MYSQL
service mysql restart
防火墻需要開放對應端口
首先,查詢端口是否開啟
firewall-cmd --list-ports
如發現此處輸出列表中沒有3306端口,可以使用以下命名開放3306端口:
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
此處接口使用Navacate連接數據庫