mysql(4)-linux環境centos7安裝mysql8.0.19詳細安裝步驟




Centos7  Linux 上安裝 MySQL8.0.19  

首先下載安裝包
官網地址:https://dev.mysql.com/downloads/mysql/
下載地址(64位):https://dev.mysql.com/downloads/file/?id=480751
需要 32 位的可以去官網地址找。

 

1. 安裝&解壓壓縮包到目標位置
下載的文件應該是一個 mysql*.tar.xz 格式的壓縮包,這里需要先對 .xz 解壓

解壓:tar xvJf ***.tar.xz   (注意:J是大寫的字母 )

將解壓出來的文件移動到 /usr/local/   且修改原來的名字mysql-8.0.19-linux-glibc2.12-x86_64修改為mysql
mv mysql-8.0.19-linux-glibc2.12-x86_64   /usr/local/

cd  /usr/local/

mv mysql-8.0.19-linux-glibc2.12-x86_64   mysql      (給mysql-8.0.19-linux-glibc2.12-x86_64重命名)

到這里我們就得到 MySQL的文件夾了,並且將他移動到了 /usr/local 目錄下改名為 mysql 。

 

 

2.  新建mysql用戶、組及目錄

在這里我們新建一個 mysql 用戶組和用戶用來運行 mysql,作用:可以提高系統的安全行性。

groupadd mysql
useradd -M -g mysql -s /sbin/nologin mysql
passwd mysql

理解:上面的命令第1句是新建一個用戶組,第2句再新建一個用戶並且不可以登錄,不創建家目錄,第3句命令給 mysql 用戶修改密碼。

 

3. 創建mysql數據倉庫目錄

注意在根目錄下新建

cd /

mkdir  /data/mysql   數據倉庫目錄  (新建data文件夾以及mysql文件夾,用來存放mysql的數據倉庫)

sudo chown -R mysql.mysql /data   

理解:創建 /data 目錄並且將目錄屬主設置為 mysql.  (注意是mysql.   是點)

或者

sudo mkdir -p /data/mysql
sudo chown -R mysql.mysql /data


4.接下來創建 mysql 的配置文件 /etc/my.cnf    (備注:/etc/下我本來的文件是沒有my.cnf的  這是我新建的)
sudo vim /etc/my.cnf

 

原有的

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

 

 

 

 

 

 

 1 # MySQL 配置文件,
 2 #參考:http://blog.51cto.com/zhangxinqi/2178407  
 3 # https://www.cnblogs.com/lyq863987322/p/8074749.html

 

替換成以下內容:

# 數據庫目錄 /data/mysql
[client]
port=3306
# mysql socket 文件存放地址
socket=/tmp/mysql.sock
# 默認字符集
default-character-set=utf8

 
         

[mysqld]
server-id=1
# 端口
port=3306
# 運行用戶
user=mysql
# 最大連接
max_connections=200
socket=/tmp/mysql.sock
# mysql 安裝目錄(解壓后文件的目錄)
basedir=/usr/local/mysql
# 數據目錄(這里放在我們新建的 /data/mysql 下)
datadir=/data/mysql
pid-file=/data/mysql/mysql.pid
init-connect='SET NAMES utf8'
character-set-server=utf8
# 數據庫引擎
default-storage-engine=INNODB
log_error=/data/mysql/mysql-error.log
slow_query_log_file=/data/mysql/mysql-slow.log

 
         

# 跳過驗證密碼(想跳過驗證密碼就放開即不注釋 不想跳過即會輸入密碼,那就注釋掉)
#skip-grant-tables

 
         

[mysqldump]
quick
max_allowed_packet=16M
EOF

到這里配置文件就建好了,上面是我自己的配置,在 mysql 啟動的時候就會自動讀取這個配置文件。
可能會有好幾個地方有 mysql 的配置文件,它的讀取順序是這樣的

/etc/my.cnf
basedir/my.cnf
datadir/my.cnf
–defaults-extra-file        #在讀取全局配置文件之后,讀取用戶配置文件 (~/.my.cnf)之前,讀取extra指定的參數文件
~/.my.cnf
所以我們在 /etc 下的配置文件 my.cnf 是第一個讀取的文件,讀到這個文件后就不會在讀后面路勁中的配置文件。

 

5.mysql 初始化:

現在讓我們進入解壓后的 mysql 目錄,進行mysql 初始化:

cd /usr/local/mysql   (進入解壓后的 mysql 目錄)

bin/mysqld --initialize

安裝的結果是這樣的:

 

 

 

在橘色線框中的部分,是自動生成的 root 密碼,待會兒我們要用這個密碼進行登錄。

 

----遇到問題:但是我是先卸載了centos7自帶的數據庫,又卸載了之前安裝的數據庫,所以在我重裝 mysql 的時候,
我遇到了初始化的時候沒有任何輸出,也就是初始化完畢沒有輸入一個初始化密碼讓我保存,也沒有找到日志文件,
結果不知道root的初始密碼是什么,只能通過跳過登錄驗證的方式重置密碼(方法:vi  /etc/my.cnf   #skip-grant-tables  想跳過驗證密碼就放開即不注釋)

 

6.mysql啟動

啟動 MySQL

cd /usr/local/mysql/support-files/

./mysql.server  restart
./mysql.server start

OK,啟動成功---------------------
-------------------------我啟動的時候還遇到了其他問題 
-------------------------1. 啟動mysql報錯The server quit without updating PID file!https://www.cnblogs.com/yiyaxuan/p/12559885.html  

-------------------------2.

 

 


7. 使用命令行登錄 MySQL

方法1:
cd /usr/local/mysql/support-files/

mysql -u root -proot    (這是登錄的命令  如果有密碼就用mysql -uroot -proot   第一個root是用戶,第二個root是密碼)
mysql -u root -p       (這是登錄的命令  如果沒有密碼就用mysql -uroot -p   第一個root是用戶 此時配置文件需要打開skip-grant-tables

然后輸入剛剛自動生成的 root 密碼即可(上面輸出了密碼就使用剛剛的密碼,上面如果沒有輸出密碼,就打開 skip-grant-tables 然后登錄成功 然后給root設置個密碼

然后修改初始密碼,出現報錯:

 

方法2:

用這句命令的時候bin/mysql -u root -p 


遇到報錯1:

[root@localhost bin]# mysql -uroot -p
bash: mysql: 未找到命令...

 

解決方法:

原因:這是由於系統默認會查找/usr/bin下的命令,如果這個命令不在這個目錄下,當然會找不到命令,我們需要做的就是映射一個鏈接到/usr/bin目錄下,相當於建立一個鏈接文件。
首先得知道mysql命令或mysqladmin命令的完整路徑,比如mysql的路徑是:/usr/local/mysql/bin/mysql,我們則可以這樣執行命令:

# ln -s /usr/local/mysql/bin/mysql /usr/bin

以下是補充:

linux下,在mysql正常運行的情況下,輸入mysql提示:
mysql command not found

遇上-bash: mysql: command not found的情況別着急,這個是因為/usr/local/bin目錄下缺失mysql導致,只需要一下方法建立軟鏈接,即可以解決:
把mysql安裝目錄,比如MYSQLPATH/bin/mysql,映射到/usr/local/bin目錄下:
# cd /usr/local/bin
# ln -fs /MYSQLPATH/bin/mysql mysql

還有其它常用命令mysqladmin、mysqldump等不可用時候都可按用此方法解決。
注:其中MYSQLPATH是mysql的實際安裝路徑

原文參考:https://www.jb51.net/article/34622.htm

 

因為我root沒有給我密碼,所以先跳過驗證,重啟mysql

mysql -u root -p 回車鍵2次,進入修改,可以直接看后面的

1. 先把root的localhost改成%,設置遠程登錄:update user set host='%' where user='root';

2.修改加密規則

ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 

3.更新 root 用戶密碼

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; 

flush privileges;

 

然后修改為不跳過驗證,重啟mysql,然后使用navicat連接,完美結束!

 

 

 

 

 

 

 

 

 


遇到報錯2:

[root@localhost mysql]# bin/mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

解決方法:
1. mysql -u root -p (命令未找到使用: ln -s /usr/local/mysql/bin/mysql /usr/bin)

2.cd /usr/local/mysql

[root@localhost mysql]# bin/mysql -u root -p

輸入之前設置的密碼-------進入命令行------------

開始去執行一句語句:bin/mysql -u root -p  ,,然后修改初始密碼,繼續出現報錯3:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

解決方法:

最后執行以下三個命令之一成功。
下面三個命令任選其一

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new password'; (new password=root  也就是我的root用戶密碼為root

alter user 'root'@'localhost' identified by 'new password';
ALTER USER USER() IDENTIFIED BY 'new password';

 

 

 

 

 

 

 8. 使用Navicat工具去連接MySQL

 

1. 遇到第一個問題:Client does not support authentication protocol requested by server;

 

命令如下:

1、use mysql;

2、alter user 'root'@'localhost' identified with mysql_native_password by '********';

'root'@'localhost'

'root'@'localhost' 是你通過登錄mysql然后輸入select Host,User  from user; 看下你自己的root對應的Host那里是%還是localhost ,我的是% 所以我用的是:alter user 'root'@'%' identified with mysql_native_password by '********';

思考:怎么把localhost改成%?在文章后面

3、flush privileges;

 

 

2. 然后繼續測試連接,遇到第2個問題:Access denied for user 'root'@'DESKTOP-8RFO9MH' (using pasword:YES)

Flush privileges;

CREATE USER 'root'@'%' IDENTIFIED BY 'root';
ERROR 1396 (HY000): Operation CREATE USER failed for 'root'@'%'-------------因為我已經新建了root用戶,所以此句不再執行

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

select Host,User from user;

ALTER USER 'root'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'root' PASSWORD EXPIRE NEVER;

select Host,User from user;

重點執行以上標紅色的三條語句。

然后重新連接Navicat,連接成功。

 

 

 

 

 

思考:怎么把localhost改成%?
MySQL8.0本地訪問設置為遠程訪問權限

1.登錄MySQL

mysql -u root -p

輸入您的密碼

2.選擇 mysql 數據庫

1
2
use mysql;
show variables like  '%skip_networking%' ;   //查數據庫編碼

3.在 mysql 數據庫的 user 表中查看當前 root 用戶的相關信息

1
2
select  host,user  from  user  where  user= 'root' ;   //mysql 8.0
select  host, user, authentication_string, plugin  from  user;

執行完上面的命令后會顯示一個表格

查看表格中 root 用戶的 host,默認應該顯示的 localhost,只支持本地訪問,不允許遠程訪問。

創建用戶

1
CREATE USER 'root'@'%' IDENTIFIED BY '111111';
改密碼 
1
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '111111';

設置為遠程登錄

1
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

 已有用戶設置遠程登錄

1
update user set host='%' where user='root' ;    //mysql 8.0

GRANT ALL ON 表示所有權限,% 表示通配所有 host,可以訪問遠程。

5.刷新權限

所有操作后,應執行

flush privileges;

6.查看 root 用戶的 host

再次執行步驟 2,你會發現 root 用戶的 host 已經變成 %,說明我們的修改已經成功,可以遠程訪問了。

7.訪問數據庫

遠程訪問數據庫的可視化工具比較多如:Navicat、SQLyog、MySQL workbench 等,我這里使用 Navicat

輸入訪問的 host 和密碼,報 2059 錯誤,這是因為 MySql8.0 版本 和 5.0 的加密規則不一樣,而現在的可視化工具只支持舊的加密方式。

此問題有兩種方法,一種是更新 Navicat 驅動來解決此問題,另一種是將 MySQL 用戶登錄的加密規則修改為 mysql_native_password,第一種方法我試過了沒有起作用,我這里采用第二種方法。

8.修改加密規則

ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 

9.更新 root 用戶密碼

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; 

flush privileges;

use database_name;告訴mysql你要使用那個數據庫;

service mysqld start/restart/stop  啟動服務/重啟服務/停止服務

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM