MySQL從0到1學習002--Linux安裝MySQL8.0

7small7發表於2023-04-12

上一篇,提到了我為什麼要寫MySQL系列教程的原因。這一篇,我們就來開始MySQL系列學習的第一篇,MySQL的安裝。MySQL的安裝有很多中方式,本文重點實踐在Centos作業系統上實現原始碼的安裝。這裡也總結一下,我個人知道的一些安裝方式。

1、如果是在Mac作業系統,你可以直接到官方網站下載.dmg格式的安裝包進行安裝,也可以使用包管理命令(port、brew)進行安裝。同時也你可以使用docker進行安裝。

2、如果你是Windows,你可以直接到官方網站下載.msi格式的安裝包進行安裝,也可以使用一些整合環境,例如PHPStudy。同時你也可以使用docker進行安裝。

3、如果你是Linux,你可以使用包管理工具(yum)安裝,或者使用.rpm包安裝,同時你也可以使用二進位制檔案安裝,或者使用docker進行安裝。

不同的安裝方式,優缺點其實也有所不同。

1、例如你用包管理命令安裝,這種方式非常簡單,包管理工具一般會自動幫你解決依賴問題,不需要手動的處理這些問題。同時解除安裝也比較方便。

2、如果你是Linux安裝,採用的.rpm格式,這種稍微麻煩一些,需要你手動的處理包依賴,同時你解除安裝也比較繁瑣,你要手動的去解除安裝一些依賴包。也不推薦使用這種方式。

3、由於docker、k8s的廣泛使用,現在流行的安裝方式,應該是這種了。直接寫好.dockerfile檔案,可以實現跨平臺的安裝。

4、本章主要是學習MySQL的安裝,因此我們採用二進位制的方式進行安裝,熟悉整個安裝流程。

本系列教程採用的是MySQL8.0的版本。這一點可能需要大家注意一下。

對於MySQL8.0的安裝,本文演示兩種安裝方式,一種是二進位制方式安裝,另外一種是採用docker安裝。

Linux安裝

Linux我採用的是centos7的版本,本地搭建的一個虛擬機器。你需要根據自己的情況,去搭建這樣的一套學習環境,這裡就演示安裝虛擬機器的過程了。如果遇到什麼問題,你也可以單獨找我,協助解決。我下載的centos7,內建了MariaDB,因此我們實現需要把MariaDB解除安裝了。

解除安裝mariadb

你可以使用如下的命令,檢視本地是否安裝了MariaDB。如果沒有顯示下面的檔案,表示沒有安裝,省略掉下面的解除安裝命令即可。

# 檢視MariaDB是否安裝
[root@192 yum.repos.d]# rpm -qa|grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64

# 解除安裝MariaDB
[root@192 yum.repos.d]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

# 檢測解除安裝結果,輸出的內容是空則表示解除安裝成功
[root@192 yum.repos.d]# rpm -qa|grep mariadb

下載二進位制檔案

要下載二進位制檔案,可以直接到MySQL官方進行下載,具體的地址是。在介面上根據下圖的示例,進行下載即可。
你也可以使用下面的連結進行下載,這也是我本地使用的連結地址。

cd ~ && wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.30-el7-x86_64.tar

下載好之後,把該檔案複製到/usr/local目錄下面,然後對其解壓。

# cp mysql-8.0.30-el7-x86_64.tar /usr/local

# 解壓
tar -xvf mysql-8.0.30-el7-x86_64.tar

# 檢視解壓檔案
-rw-r--r--. 1 7161 31415 492490461 7月   7 2022 mysql-8.0.30-el7-x86_64.tar.gz
-rw-r--r--. 1 7161 31415  22006040 7月   7 2022 mysql-router-8.0.30-el7-x86_64.tar.gz
-rw-r--r--. 1 7161 31415 305543348 7月   7 2022 mysql-test-8.0.30-el7-x86_64.tar.gz

透過解壓,我們會得到上面的3個壓縮包,重點我們關注mysql-8.0.30-el7-x86_64.tar.gz這個檔案即可,其他的兩個,我們暫且不管。

解壓好之後,我們再對mysql-8.0.30-el7-x86_64.tar.gz檔案進行解壓。

# 解壓
tar -xvf mysql-8.0.30-el7-x86_64.tar.gz

# 對資料夾進行重新命名
mv mysql-8.0.30-el7-x86_64 mysql

# 檢視檔案目錄
cd mysql && ll
drwxr-xr-x.  2 7161 31415   4096 7月   7 2022 bin
drwxr-xr-x.  2 7161 31415     55 7月   7 2022 docs
drwxr-xr-x.  3 7161 31415   4096 7月   7 2022 include
drwxr-xr-x.  6 7161 31415    201 7月   7 2022 lib
-rw-r--r--.  1 7161 31415 287624 7月   7 2022 LICENSE
drwxr-xr-x.  4 7161 31415     30 7月   7 2022 man
-rw-r--r--.  1 7161 31415    666 7月   7 2022 README
drwxr-xr-x. 28 7161 31415   4096 7月   7 2022 share
drwxr-xr-x.  2 7161 31415     77 7月   7 2022 support-files

# 建立資料目錄(一定注意data目錄是放在mysql目錄下的)
mkdir data

使用者許可權

對MySQL的基本操作,我們就先執行到這裡,接下來建立MySQL使用者組、使用者。

1、建立MySQL使用者組。

groupadd mysql

2、建立MySQL使用者。

useradd -r -g mysql mysql

3、更改mysql目錄的使用者組和使用者許可權。

chown -R mysql:mysql mysql
chmod -R 755 mysql

初始化安裝

透過上面一系列的操作,MySQL安裝的基本操作也都準備好了,接下來我們就正式進入到MySQL的安裝環境。這幾步操作,需要格外的注意。

直接使用如下的命令,來初始化服務,在這個過程中MySQL會生成一個預設的密碼,這個密碼需要記住,後續登入到MySQL會使用到。

[root@192 bin]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
2023-04-07T17:14:35.743452Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.30) initializing of server in progress as process 8353
2023-04-07T17:14:35.753503Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-04-07T17:14:36.629899Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-04-07T17:14:38.277736Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: D(v>gZT0nOFb

透過上面的命令,如果沒出什麼錯誤,就表示初始化完成。注意到最後一行的末尾,root@localhost: D(v>gZT0nOFb。MySQL為我們生成了一個初始密碼,密碼是D(v>gZT0nOFb,你在初始化的時候不一定是這個密碼,根據自己的實際情況來。

建立配置檔案

MySQL初始化完成之後,接下來我們建立一個配置檔案(vim /etc/my.cnf)。配置檔案的內容如下,你可以根據自己的情況來編寫,推薦直接使用下面的配置。

[client]
port = 3306
socket = /usr/local/mysql/data/mysql.sock
default-character-set = utf8mb4

[mysql]  
default-character-set = utf8mb4

[mysqld]  
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'

port = 3306
socket = /usr/local/mysql/data/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
datadir = /usr/local/mysql/data
lower_case_table_names=1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

建立好之後,需要對該檔案進行配置許可權,否則MySQL沒許可權執行該檔案。

chmod 777 /etc/my.cnf

為了後續更加的方便操作MySQL,可以為其建立軟連線。

ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/mysql.sock /var/mysql.sock

設定開機啟動

為了減少伺服器重啟之後,每次都要手動的去啟動MySQL,這裡設定開機啟動。依次執行下面的每一條命令。

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 345 mysqld on
chkconfig --list
注:該輸出結果只顯示 SysV 服務,並不包含
原生 systemd 服務。SysV 配置資料
可能被原生 systemd 配置覆蓋。

      要列出 systemd 服務,請執行 'systemctl list-unit-files'。
      檢視在具體 target 啟用的服務請執行
      'systemctl list-dependencies [target]'。

mysqld             0:關    1:關    2:開    3:開    4:開    5:開    6:關
netconsole         0:關    1:關    2:關    3:關    4:關    5:關    6:關
network            0:關    1:關    2:開    3:開    4:開    5:開    6:關
如果看到3、4和5選項都顯示開,表示設定成功。

服務管理

下面羅列對MySQL服務的管理命令,由於centos7和centos6,在服務管理的命令有所改變,6的版本是使用service,7的版本是使用systemctl,這裡需要注意一下。

1、啟動服務。

# 6版本
service mysql start
# 7版本
systemctl start mysql

2、重啟服務

# 6版本
service mysql restart
# 7版本
systemctl restart mysql

3、停止服務

# 6版本
service mysql stop
# 7版本
systemctl stop mysql

4、檢視服務狀態

# 6版本
service mysql status
# 7版本
systemctl status mysql

操作mysql

接下來,我們就正式登入到MySQL,去執行一些基礎操作。

1、啟動服務

systemctl restart mysql

2、登入MySQL服務

[root@192 bin]# mysql -uroot -p
mysql: [Warning] World-writable config file '/etc/my.cnf' is ignored.
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.30 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
這裡預設的密碼,就是上面在初始化安裝過程中MySQL自動生成的密碼,輸入密碼即可。

3、修改預設的密碼

alter user 'root'@'localhost' identified by '123456';
set password for root@localhost = '123456';
上面的兩種方式,任意選一種即可。

4、設定遠端連線

如果你想開啟MySQL中的root賬戶遠端連線全新啊,你可以使用如下的方式。這裡不推薦開啟,root是MySQL中的超級管理員,開啟可能會存在安全風險,這裡為了做演示,故開啟遠端連線模式。

mysql>use mysql;
msyql>update user set user.Host='%' where user.User='root';
mysql>flush privileges;

5、示例建立

這裡透過建立一個資料庫和資料表,用來演示。

mysql> create database demo;
Query OK, 1 row affected (0.05 sec)

mysql> use demo;
Database changed
mysql> create table demo ( id int primary key, name varchar(32) not null);
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+----------------+
| Tables_in_demo |
+----------------+
| demo           |
+----------------+
1 row in set (0.00 sec)

到此為止,MySQL在Linux上的安裝也就正式完成啦。後續的章節,也都是基於該環境進行操作。

Docker安裝

上面演示完對Linux安裝,接下來就簡單演示一下使用docker安裝,推薦使用官網提供的Docker映象安裝。由於官方映象的使用文件寫的非常詳細了,我這裡就不具體展示,做一個簡單的演示即可。

1、建立一個docker-compose.yml的檔案。並寫入如下內容:

version: '3.1'

services:

  db:
    image: mysql
    # NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
    # (this is just an example, not intended to be a production configuration)
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8081:8080

2、執行docker-compose.yml,啟動服務

$ docker-compose up -d
[+] Running 2/2
 ⠿ Container root-db-1       Running 0.0s
 ⠿ Container root-adminer-1  Started 1.0ss

3、檢視服務啟動狀態

$ docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                    NAMES
7310e996a435   adminer          "entrypoint.sh php -…"   5 seconds ago    Up 3 seconds    0.0.0.0:8081->8080/tcp   root-adminer-1
透過命令輸出的結果,可以看到容器已經啟動成功了。

課後練習

1、MySQL如果忘記root賬戶密碼,該怎麼解決?

2、MySQL配置檔案啟動的順序是什麼樣的?

3、MySQL服務啟動的方式有哪幾種?每種方式之間有什麼區別?

相關文章