本文參考https://blog.csdn.net/wudinaniya/article/details/81094578
一 查看linux操作系統版本和系統內核版本
1 [root@nfs_client ~]# cat /etc/redhat-release 查看操作系統版本 2 CentOS Linux release 7.5.1804 (Core) 3 [root@nfs_client ~]# uname -r 查看系統內核版本 4 3.10.0-862.el7.x86_64 5
二 下載對應版本的MySQL安裝文件
1、下載地址;https://dev.mysql.com/downloads/mysql/
2、選擇對應的Linux版本和x86/x64進行下載
可以選擇 RPM Bundle,下載完記得解壓 tar -xvf xxx.tar
三 卸載舊版本的MySql (沒有的話,則跳過此步驟)
1、查看舊版本MySql
rpm -qa | grep mysql
rpm -e --nodeps {-file-name}
有的系統可能不太一樣,沒有mysql-libs,而是mariadb-libs,此時要移除的則是mariadb-libs
rpm -qa|grep mariadb
yum remove mariadb-libs
四 安裝MySql
解壓之后的文件
使用命令rpm -ivh {-file-name}進行安裝操作。
按照依賴關系依次安裝rpm包 依賴關系依次為common→libs→client→server
注:ivh中, i-install安裝;v-verbose進度條;h-hash哈希校驗
在安裝 mysql-community-libs-5.7.22-1.el7.x86_64.rpm 時有可能會報錯:mysql依賴錯誤
解決:清除yum里所有mysql依賴包
[root@nfs_client tools]# rpm -qa|grep mysql [root@nfs_client tools]# yum remove mysql-libs 注意: 有的系統可能不太一樣,沒有mysql-libs,而是mariadb-libs,此時要移除的則是mariadb-libs [root@nfs_client tools]# rpm -qa|grep mariadb [root@nfs_client tools]# yum remove mariadb-libs
注意細節:
1> 執行 yum remove mysql-libs 命令后,會自動刪除掉 /etc/ 下的 my.cnf 文件
2> 對於安裝mysql組件,只有安裝了 mysql-community-server-5.7.22-1.el7.x86_64.rpm 組件,才會:
a). 在 /etc/下生成 my.cnf 文件 和 my.cnf.d 文件夾
b). 在/var/lib/下生產以下三個文件夾
c). 在/var/log/ 下生成 mysqld.log 文件
d). 在/var/run/ 下生成 mysqld 目錄
個別情況:
個別情況1:
在阿里雲ECS雲服務器上安裝mysql5.7,當安裝 mysql-community-server-5.7.22-1.el7.x86_64.rpm 時報錯,報錯如下:
[root@i3467544tdsxfrZ ~]# rpm -ivh mysql-community-server-5.7.22-1.el7.x86_64.rpm
warning: mysql-community-server-5.7.22-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
libaio.so.1()(64bit) is needed by mysql-community-server-5.7.22-1.el7.x86_64
libaio.so.1(LIBAIO_0.1)(64bit) is needed by mysql-community-server-5.7.22-1.el7.x86_64
libaio.so.1(LIBAIO_0.4)(64bit) is needed by mysql-community-server-5.7.22-1.el7.x86_64
真正原因:
真正的原因是 MySQL依賴libaio,所以先要安裝libaio,我們通過 rpm -qa|grep libaio 命令查看一下,如圖:
經過對比發現,無法正常安裝mysql-community-server-5.7.22-1.el7.x86_64的服務器的確沒有安裝libaio
所以,解決法案就是:
安裝libaio
[root@iZbp1845cet96se1qmb5ekZ ~]# yum -y install libaio
安裝libaio后,再重新安裝一次mysql-community-server-5.7.22-1.el7.x86_64.rpm,此時就能正常安裝了
個別情況2:
比如解決了“個別情況1”,但在啟動mysql的時候,啟動不起來,或啟動后,去查找臨時密碼,使用命令沒反應。查看日志mysqld.log(可在/etc/my.cnf中查找到mysqld.log的配置位置),報如下錯誤,此時怎么解決?
[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
此時,1>先通過rpm -e --nodeps xxx 卸載掉server,卸載后刪除datadir目錄,2>卸載后查看 /etc/my.cnf 中,datadir的配置情況,將datedir目錄刪除,3>最后通過命令rpm -ivh xxx 重新安裝server,此時就能正常使用mysql了
命令代碼如下:
[root@izbp1845cet96se1qmb5ekz ~]# rpm -e --nodeps mysql-community-server-5.7.22-1.el7.x86_64
[root@izbp1845cet96se1qmb5ekz ~]# cat /etc/my.cnf
xxxxxxxxxxxxx
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sockxxxxxxxxxxxxxxx
[root@izbp1845cet96se1qmb5ekz ~]# cd /var/lib
[root@izbp1845cet96se1qmb5ekz lib]# rm -rf mysql
[root@izbp1845cet96se1qmb5ekz ~]# rpm -ivh mysql-community-server-5.7.22-1.el7.x86_64.rpm
[root@izbp1845cet96se1qmb5ekz ~]# systemctl start mysqld.service
[root@izbp1845cet96se1qmb5ekz ~]# ps -ef|grep mysql
root 3306 1068 0 14:34 pts/0 00:00:00 mysql -uroot -p
mysql 27009 1 1 15:26 ? 00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
root 27038 26239 0 15:27 pts/6 00:00:00 grep --color=auto mysql
五 登錄並創建MySql密碼
1 啟動MySql
安裝完后,使用命令 service mysqld start 或 systemctl start mysqld.service 啟動MySQL服務。(如果mysql服務無法啟動,就重啟一下系統)
systemctl start mysqld.service 啟動mysql
systemctl status mysqld.service 查看mysql狀態
systemctl stop mysqld.service 關閉mysql
查看mysql進程 ps -ef|grep mysql
查看3306端口 netstat -anop|grep 3306
2 登陸mysql修改root密碼
由於MySQL5.7.4之前的版本中默認是沒有密碼的,登錄后直接回車就可以進入數據庫,進而進行設置密碼等操作。其后版本對密碼等安全相關操作進行了一些改變,在安裝過程中,會在安裝日志中生成一個臨時密碼。
怎么找到這個臨時密碼呢?
使用:
grep 'temporary password' /var/log/mysqld.log
即可查詢到類似於如下的一條日志記錄:
#o(YH0ff;i30即為登錄密碼。使用這個隨機密碼登錄進去,然后修改密碼,使用命令:
mysql -uroot -p
輸入密碼
執行下面的命令修改MySql root密碼
在5.6后,mysql內置密碼增強機制,低強度密碼會報錯:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
可能出現密碼不符合策略或過於簡單等提示,建議先使用如下密碼,稍后更改策略再換
step1:更改策略和修改密碼長度
set global validate_password.policy=0; set global validate_password.length=1;
不管設置 validate_password_length=1,還是2,3,4 ,‘有效密碼長度’這個參數的實際值都是4。超過4后設置是多少實際就是多少。
step2:從新設置密碼
alter user root@localhost identified by '123456';
step3: 授予root用戶遠程訪問權限:
此時,雖然防火牆我時關着的,但root用戶只能用於本機訪問,不能用於遠程訪問,否則會報以下錯誤。因此,接下來要做的是授予root用戶遠程訪問權限。
查看當前授予過的權限:
use mysql; select user,host from user;
不推薦直接使用root用戶通過外部訪問數據庫,建議創建用戶給予對應所需權限即可
step4.添加一個新用戶
create user '新用戶名'@'localhost' identified by '密碼'; //允許所有ip連接(用通配符%表示) create user '新用戶名'@'%' identified by '密碼';授權用戶
step5.授權用戶
格式:GRANT privileges ON databasename.tablename TO ‘username’@‘host’ 例:給admin用戶授權study數據庫中所有表的所有操作權限 GRANT ALL ON *.* TO 'admin'@'%';
databasename.tablename:表示用戶的權限能用在哪個庫的哪個表中,如果想要用戶的權限很作用於所有
的數據庫所有的表,則填 .,*是一個通配符,表示全部。
’username‘@‘host’:表示授權給哪個用戶。
firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload
我用的DataGrip連接會報錯
我看網上很多人都在說加上serverTimezone=UTC,我的加上不行,最后我發現我要加上useSSL=false&allowPublicKeyRetrieval=true就可以了