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 啟動服務/重啟服務/停止服務