要在 CentOS 7 上安裝 MySQL 8.0.40,按照以下步驟操作:
下載安裝包。
https://dev.mysql.com/downloads/mysql/
下載之前查看系統c++版本
解壓安裝包
首先,解壓下載的 .tar.xz
安裝包。
cd /path/to/your/downloads
tar -xvf mysql-8.0.40-linux-glibc2.28-x86_64.tar.xz
解壓后,會得到一個 mysql-8.0.40-linux-glibc2.28-x86_64
目錄。
移動到合適的位置
接下來,你可以將解壓后的目錄移動到你希望安裝 MySQL 的位置,通常是 /usr/local
。
sudo mv mysql-8.0.40-linux-glibc2.28-x86_64 /usr/local/mysql
創建 MySQL 用戶和組
為了安全性,MySQL 應該運行在專用的用戶和組下。
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
創建 MySQL 數據目錄
接下來,創建數據存儲目錄,并給 MySQL 用戶設置適當的權限。
sudo mkdir /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql
配置環境變量
為了方便使用 MySQL 命令,你需要將 MySQL 的 bin
目錄添加到 PATH
環境變量中。編輯 /etc/profile
文件。
sudo vi /etc/profile
在文件末尾添加以下內容:
export PATH=$PATH:/usr/local/mysql/bin
保存并退出編輯器。然后執行以下命令使改動生效:
source /etc/profile
創建配置文件
touch /etc/my.cnf
[mysqld]
port=3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
max_connect_errors=10
character-set-server=utf8mb4
default-storage-engine=INNODB
user=root
#skip-grant-tables [client]
port=3306
socket=/usr/local/mysql/data/mysql.sock
default-character-set=utf8mb4
備注:不要有空格,否則會找不到socket連接
初始化 MySQL 數據目錄
使用 MySQL 自帶的 mysqld
工具初始化數據目錄:
sudo /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --console --user=root
初始化成功后,會有一個臨時密碼
[root@localhost mysql]# ./bin/mysqld --defaults-file=/etc/my.cnf --initialize --console --user=root
2024-12-03T10:56:54.844764Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.40) initializing of server in progress as process 11446
2024-12-03T10:56:54.852440Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-12-03T10:56:55.144832Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-12-03T10:56:56.594319Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: FhN9Yk=/Cdus
刪除 mysql/data目錄即可重新初始化
創建 mysql.sock文件(重要,非常重要的一步)
cd data/
touch mysql.sock
啟動mysql 服務
sudo /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
查看mysql是否啟動
執行命令 ps -ef | grep mysql
登錄 mysql 數據庫
sudo /usr/local/mysql/bin/mysql --socket=/usr/local/mysql/data/mysql.sock -u root -p
完成!
到此為止,你已經成功安裝 MySQL 8.0.40。
常用命令(擴展)
# 初始化
sudo /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --console --user=root#啟動服務
sudo /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &#停止服務
sudo /usr/local/mysql/bin/mysqladmin -u root -p shutdown
#停止服務(二)
ps aux|grep mysql
kill <mysql有關的pid># 登錄mysql
sudo /usr/local/mysql/bin/mysql --socket=/usr/local/mysql/data/mysql.sock -u root -p
創建賬號并授權
# 進入mysql
use mysql# 用如下語句查看MySQL當前加密方式
select host,user,plugin from user;# 創建賬號test01、密碼test01, 設置密碼插件模式mysql_native_password,并允許該用戶從任何主機(即 %)進行連接
CREATE USER 'test01'@'%' IDENTIFIED WITH mysql_native_password BY 'test01';
# 如果你只希望該用戶能從本地(localhost)連接,可以將 '%' 改為 'localhost':
CREATE USER 'test01'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test01';# 授予權限。為 用戶授予合適的權限。如果你希望該用戶具有所有權限,可以使用以下命令:
GRANT ALL PRIVILEGES ON *.* TO 'test01'@'%' WITH GRANT OPTION;
忘記密碼,找回
- kill mysql服務
- 進入/etc/my.cnf
- 添加 在 [mysqld] 下面,添加一行 skip-grant-tables
- 重啟mysql:sudo /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
- 無密碼,進入mysql。將登陸密碼設置為空。將密碼設置為空(此時還不能直接修改密碼,必須先設置為空,否則會報錯。 skip-grant-tables 模式下無法修改其他密碼,只能修改為空 )
use mysql; (使用mysql數據表)
update user set authentication_string='' where user='root';(將密碼置為空)
quit; (然后退出Mysql)
- kill mysql服務。 將/etc/my.cnf 添加的一行skip-grant-tables去掉, 再次啟動。
- 再次無密碼登錄
- 更新密碼,要使用mysql_native_password 插件模式,否則navicat可能鏈接不上
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1234';
FLUSH PRIVILEGES;
修改加密模式
update user set plugin='mysql_native_password' where user='root';
進入mysql,use mysql,直接update加密模式,退出來,原密碼就無法登錄了
在Mysql 8版本中,必須分兩步來實現設置用戶權限
在Mysql 8版本中,不能使用
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'WITH GRANT OPTION;
這一行命令來設置用戶權限,必須分兩步來實現設置用戶權限【先創建用戶、在對該用戶分配用戶權限】,最后刷新權限
CREATE USER 'test2'@'%' IDENTIFIED WITH mysql_native_password BY 'test2';
GRANT ALL PRIVILEGES ON *.* TO 'test2'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
或者
CREATE USER 'test3'@'%' IDENTIFIED BY 'test3';
GRANT ALL PRIVILEGES ON *.* TO 'test3'@'%' WITH GRANT OPTION;
update user set plugin='mysql_native_password' where user='test3';
FLUSH PRIVILEGES;
然后外部就可以通過賬戶密碼訪問了。