本文介紹MySQL和PostgreSQL的一些特性對比,讓大家瞭解二者的優劣,更好的做出選擇。當前國內的現狀,互聯網公司使用MySQL的較多,PostgreSQL的使用比例反而不高,但相信看到PG的新特性後,你會愛上她。當然MySQL作為最流行的資料庫,依然會吸引大部分人的眼球。 PostgreSQ ...
一,資料庫概述
1.為什麼要使用資料庫
-
將數據持久化。
-
持久化主要作用:是將記憶體中的資料庫存儲在關係型資料庫中,本質也就是存儲在磁碟文件中。
-
資料庫在橫向上的存儲數據的條數,以及在縱向上存儲數據的豐富度,都要好於其他介質。
2.資料庫與資料庫管理系統
1.資料庫的相關概念
-
DB:資料庫(Database)即為存儲數據的 “倉庫”,其本質是一個文件系統。
-
DBMS:資料庫管理系統。是一種操作和管理資料庫的大型軟體。用於建立,使用和維護資料庫,對資料庫進行統一管理和控制。用戶通過資料庫管理系統訪問資料庫中表內的數據。
-
SQL:結構化查詢語言,專門用來與資料庫通信的語言。
2.DB 與 DBMS 的關係
資料庫管理系統(DBMS)可以管理多個資料庫,一個管理系統對應一個或多個資料庫,一個資料庫對應多個表,一張表對應多條數據,一條數據對應多個欄位。
3.常見的資料庫管理系統排名(DBMS)
查看排名的網站:https://db-engines.com/en/ranking
3 關係型數據於非關係型資料庫
1.關係型資料庫 - RDBMS
- 該類型資料庫是 "最古老" 的資料庫類型,是將複雜的數據結構,歸結為簡單的二維表格形式。
- 關係型資料庫,是以 "行-row" 和 "列-column" 的形式存儲數據。一系列的 "行" 和 "列" 稱為 “表” ,一組表組成一個 "庫-database"。
- 表與表之間的數據記錄是有關係的。關係型資料庫,也就是建立在 "關係模型" 基礎上的資料庫。
- 使用 SQL 語言查詢數據。
- 優勢:
- 複雜查詢:使用 SQL 語句方便在一個表或多個表之間做非常複雜的數據查詢。
- 事務支持:資料庫安全性高,等...
2.非關係型資料庫 - N-RDBMS
非關係型資料庫,是傳統關係型資料庫,捨得版本。基於鍵值對存儲數據,不需要經過 SQL 語言的解析,"性能非常高"。同時,通過減少不常用的功能,從而提供性能。
- 非關係型資料庫的種類:
- 鍵值型資料庫:Redis。
- 文檔型資料庫:MongoDB。
- 搜索引擎資料庫:Elasticsearch。
- 列式資料庫:HBase。
- 圖形資料庫:Neo4J。
- 其他類型的非關係資料庫等...
4.關係型資料庫設計規則
- 關係型資料庫的典型數據結構就是 "數據表" ,這些 "數據表" 組成都是結構化的。
- 將數據放到表中,表再放到庫中。
- 一個資料庫中可以有多個表,每個表都有一個名字,用來標識自己。表名要具有唯一性。
- 表具有一些特性,這些特性定義了數據在表中如何存儲,類似就 JAVA 和 Python 中 "類" 的設計
1.表,行,列
ORM-面向對象思想(對象關係映射):
- 資料庫中的一個表 <----對應----> JAVA 中的一個類。
- 表中的一條數據 <----對應----> 類的一個對象實例。
- 表中的一個列 <----對應----> 類中的一個屬性,成員變數。
2.表的關聯關係
表與表之間的數據記錄是存在關係的,一般這種使用 "關係模型" 來表示。常見的有以下四種關聯關係:
- 一對一關聯(一個人員對應一個用戶)。
- 一對多關聯(一個圖層對應多個點位)。
- 多對多關聯(一個用戶對應多個角色,一個角色對應多個用戶)。
- 自我引用(類別表)。
1.一對一關聯
- 可用於優化查詢數據。
當一張表中的欄位(列)太多時,在查詢時會造成大量記憶體冗餘。查詢效率低。因此我們可以根據(常用欄位或者說常用業務)將表拆為兩張或多張表,表之間的關係是:"一對一的關係",從而提高查詢效率。
- 兩種建表原則:
- 外鍵唯一:"主表" 的主鍵對應 "從表" 的外鍵(唯一),形成主外鍵關係,外鍵唯一。
- 外鍵是主鍵:"主表" 的主鍵和 "從表" 的主鍵,形成主外鍵關係。
2. 一對多關聯
- 可用於存儲數據關係為一對多的數據,例如:圖層表對應多條點位數據。
建表原則:在 "從表-圖層表" 創建一個欄位,該欄位作為外鍵指向 "主表-點位表" 的主鍵,建立一對多的關係。
3.多對多關聯
建表原則:要表示多對多關係,必須創建第三張表,該表通常稱為 "聯接表/中間表",該表將多對多關係劃分為兩個一對多關係,將這兩個表的主鍵都插入到第三個表中,從而建立關係。這個 "多" 在 "中間表" 中體現。
4.自我引用
- 可用於存儲數據結構為樹形結構的數據,例如:戶籍中父子關係,公司中部門關係等...
建表原則:在表中創建一個 "自我引入" 欄位引用表中其他數據的主鍵,建立關係。
前言
常見的 MySQL 安裝共有五種方式,分別是:
-
軟體倉庫(yum 或 apt)安裝。
-
rpm 或 deb 文件安裝。
-
通用二進位文件安裝。
-
Docker 安裝。
如有需要使用 "Docker" 安裝 MySQL 的話,請參閱:https://hub.docker.com/r/mysql/mysql-server/
- 源代碼編譯(定製化)。
如有需要 "定製化" 或 "自主擴展" MySQL 的話,請參閱:https://dev.mysql.com/doc/refman/8.0/en/source-installation.html
說明:本文章中只介紹 "通用二進位文件安裝" 以及 "rpm 文件安裝",這兩種方式安裝。
二,Linux中卸載MySQL資料庫
說明:第一次安裝請略過!
1.檢查是否安裝 MySQL
使用一下命令查看當前安裝MySQL的情況,是否安裝了 MySQL
rpm -qa|grep -i mysql
顯示一下內容說明安裝了:
MySQL-client-5.5.25a-1.rhel5 MySQL-server-5.5.25a-1.rhel5 ...
停止MySQL服務,刪除卸載安裝的 MySQL。命令:rpm -e –-nodeps
包名
rpm -ev MySQL-client-5.5.25a-1.rhel5 rpm -ev MySQL-server-5.5.25a-1.rhel5
2.查找MySQL的目錄
查找 MySQL 目錄(提示:現在很多都是使用編譯的 MySQL 安裝包進行安裝的,所以查找文件是必須的)
find / -name mysql
具體要根據個人的情況,刪除對應的 mysql 目錄(註意:寧可不刪,不可亂刪!)。
註意:/etc/my.cnf 不會刪除,需要進行手工刪除。
rm -rf /etc/my.cnf
3.檢查是否卸載成功
再次查找機器是否安裝 MySQL(註意:再次檢查文件是必須的)
- 檢查安裝情況
rpm -qa|grep -i mysql
- 檢查 MySQL 配置文件情況
find / -name /etc/my.cnf
無結果說明卸載(刪除)成功!
三,Linux下安裝MySQL資料庫 - 二進位文件
- 基本介紹:
本次是在Linux下安裝MySQL資料庫。無需編譯安裝,解壓後初始化即可使用。
本次演示的MySQL版本為: MySQL Community Server 8.0.20
1.查看環境信息
- 查看 linux 內核版本的命令:
uname -a
uname 命令選項:
- -a 或 --all:顯示所有信息;
- -n 或 --nodename:只列印對外主機名;
- -r 或 --release:只列印內核版本;(下載文件時能用到)
- -p 或 --processor:列印系統架構,比如X86_64;
- -o 或 --operating-system:列印操作系統名稱;
本文章是:GNU/Linux 的 x86_64 位操作系統。
- 查看Linux操作系統版本的命令:
# 查看Linux系統版本的命令 lsb_release -a # 或者 cat /etc/redhat-release
本文章使用的是:CentOS Linux release 7.6.1810 (Core) 操作系統版本
擴展 - Redhat系的Linux系統請使用:
cat /etc/issue
2.下載 MySQL
打開官方下載地址:https://downloads.MySQL.com/archives/community/ 或者 https://dev.mysql.com/downloads/MySQL/ 根據自己對應是系統,以及版本進行選擇,這裡演示的是Linux系統的安裝 MySQL 8.0.20(本文章是:GNU/Linux 的 x86_64 位操作系統)。
直接點擊下麵的 Download 即可下載,下載完成將文件上傳到Linux。
當然也可以在Linux系統中用 wget 方式進行下載:
wget https://cdn.MySQL.com/archives/MySQL-8.0/MySQL-8.0.20-linux-glibc2.12-x86_64.tar.xz
3.上傳安裝包並解壓
- 創建安裝文件夾
mkdir -p /usr/local/mysql
- 將 MySQL 安裝文件上傳到 "/usr/local/mysql" 文件夾下,並解壓:
註意:從 MySQL 8.0 開始下載的安裝包是 ".xz" 結尾的了,需要先使用 xz 命令處理。
xz -d mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
解壓 tar壓縮包 命令:
tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar
- 文件解壓後重命名(提示:該步驟根據個人習慣)
mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql
- 看一下現在的 MySQL 安裝文件的名稱和所在路徑。
pwd
名稱:"mysql",安裝路徑:"/usr/local/mysql"。這些信息很重要哦!
4.安裝前準備
- 檢查 libaio 庫是否安裝。
說明:MySQL 依賴 libaio 庫,如果未在本地安裝此庫,則資料庫初始化和後續的伺服器啟動步驟將會失敗。
如果未安裝,在初始化時可能遇到下麵的報錯:
./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directoryx
libaio 檢查命令:
whereis libaio.so.1
出現以上結果說明 libaio 庫已經安裝。
如果沒有找到 "libaio.so.1" 文件,就要手動安裝 libaio 庫。
方式1:yum 安裝。
yum install -y libaio
註意:此時,使用 yum 命令安裝,電腦網路必須保證是正常的。
方式2:離線安裝。
下載地址:https://centos.pkgs.org/7/centos-x86_64/libaio-0.3.109-13.el7.i686.rpm.html 網站或鏡像地址 http://mirror.centos.org/centos-7/7/os/x86_64/Packages/。
將安裝包上傳到伺服器執行以下命令安裝。
rpm -ivh libaio-0.3.109-13.el7.i686.rpm
安裝之後請再次執行 "whereis libaio.so.1" 命令再次檢查是否安裝成功。
- 檢查 和 卸載系統自帶的 Mariadb
rpm -qa|grep mariadb
出現以上結果說明系統中安裝了 mariadb。
# 強制卸載 mariadb rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
卸載之後請再次執行 "rpm -qa|grep mariadb" 檢查是否卸載成功。
- 創建 mysql 組 及 mysql 用戶,並授權。
- 創建 mysql 組命令。
groupadd mysql
- 創建 mysql 用戶以及加入到 mysql 組中。
useradd -r -g mysql mysql
說明:所有的文件和目錄都應該在 mysql 用戶下(擴展:useradd 中的 "-r" 表示建立為系統帳號)。
- 創建 "數據" 存放目錄並授權(設置擁有者為 mysql)
mkdir -p /usr/local/mysql/data
- 為 mysql 用戶授於 "數據目錄(/usr/local/mysql/data)" 許可權:
chown -R mysql:mysql /usr/local/mysql/data
- 為 mysql 用戶授於 "MySQL 安裝目錄(/usr/local/mysql/mysql)" 許可權:
chown -R mysql:mysql /usr/local/mysql/mysql
- 配置 "my.cnf" 文件
說明:"my.cnf" 文件是 MySQL 的預設配置文件,位於 "/etc/my.cnf"。
vi /etc/my.cnf
打開 "my.cnf" 文件將下麵配置粘貼進去。
[mysqld] bind-address=0.0.0.0 port=3306 user=mysql basedir=/usr/local/mysql/mysql #指定的是MySQL安裝目錄 datadir=/usr/local/mysql/data #指定的是MySQL數據目錄 socket=/tmp/mysql.sock # MySQL 的socket文件 log-error=/usr/local/mysql/data/mysql.err #錯誤日誌存放文件 pid-file=/usr/local/mysql/data/mysql.pid # MySQL 服務進程的pid文件 #skip_ssl #關閉SSL加密連接 character_set_server=utf8mb4 # 設置全局的字元集類型 symbolic-links=0 # 開啟數據軟連接 explicit_defaults_for_timestamp=true lower_case_table_names=1 # 設置表名大小不敏感。(MySQL在windows下,預設是對錶名大小寫不敏感的,但是在Linux下是大小寫敏感的) # 修改使用 "mysql_native_password"(之前的密碼認證插件)插件作為認證加密方式 # default_authentication_plugin=mysql_native_password # MySQL8.0 預設認證加密方式為 "caching_sha2_password" #skip-grant-tables #免密碼登陸,註意這時候是沒有埠的
basedir:指定的是 MySQL 的 "安裝目錄"。
datadir:指定的是 MySQL 的 "數據目錄"。
socket:MySQL 的socket文件(註意:建議指向"/tmp/mysql.sock",不然的話可能會在連接 MySQL 時會出現錯誤!)。
錯誤信息:
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2
- skip_ssl : 關閉 SSL 加密連接。
- character_set_server=utf8mb4:設置全局的字元集類型。
- lower_case_table_names=1:設置表名大小不敏感(MySQL在windows下,預設是對錶名大小寫不敏感的,但是在Linux下是大小寫敏感的)。
- skip-grant-tables :免密碼登陸 。註意:設置免密碼選項後,這時候的 MySQL 服務沒有埠(0),除本機外其他客戶端無法連接。
# MySQL8.0 預設認證加密方式為 "caching_sha2_password" ,為了和之前的版本匹配,需要修改為 "mysql_native_password" 插件作為認證加密方式 default_authentication_plugin=mysql_native_password
5.初始化資料庫
- 進入MySQL 安裝目錄中的 bin目錄下:
cd /usr/local/mysql/mysql/bin
- 執行初始化 MySQL 命令:
./mysqld --defaults-file=/etc/my.cnf --initialize
- --defaults-file:表示初始化時收使用的配置文件。
特別註意:在初始化和啟動 MySQL 的命令中,指定的 "系統變數" 的優先順序是大於 "my.cnf" 文件的。個人建議:my.cnf 配置文件中有的 "系統變數" 就不要在初始化時指定了。
- 將啟動腳本 "mysql.server" 複製為 "/etc/init.d/mysql"
cp /usr/local/mysql/mysql/support-files/mysql.server /etc/init.d/mysql
- 為 MySQL 配置 PATH 環境變數(執行 MySQL 等命令時不需要帶路徑)
- 打開環境變數 "/root/.bash_profile" 文件:
vi /root/.bash_profile
- 添加 MySQL 的環境變數:
:/usr/local/mysql/mysql/bin # MySQL的 "安裝目錄/bin" 添加到 PATH 之後,說明這裡已":"號為分隔符
- 刷新配置文件,使配置生效:
source /root/.bash_profile
6.啟動和停止 MySQL
- 啟動 MySQL,並查看 MySQL 服務狀態。
service mysql start
# 或者
systemctl start mysql
- 查詢 MySQL 伺服器的狀態:
service mysql status # 或者 systemctl status mysql
- 查詢 MySQL 服務狀態命令
ps -ef|grep mysql
- 擴展命令 - 埠(3306)信息查詢命令:
lsof -i:3306
- 停止 MySQL 服務:
service mysql stop
# 或者
systemctl stop mysql
7.登錄 MySQL 並修改密碼
- 查看初始化時生成的密碼(說明:在 "錯誤日誌" 中,就是 log-error 參數指向的文件,如果不指定 log-error 選項,預設為 "數據目錄"/主機名稱.err)。
more /usr/local/mysql/data/mysql.err | grep "A temporary password"
- 進入 MySQL 安裝目錄中的bin目錄下:
cd /usr/local/mysql/mysql/bin
- 執行 mysql 命令登錄到 MySQL 資料庫,密碼為初始化資料庫時的密碼。
./mysql -u root -p
- 修改 root 密碼
alter user 'root'@'localhost' identified with mysql_native_password by 'supconit-mysql';
擴展 - 常見修改用戶信息的方式:
- 使用 "set password for" 修改用戶密碼:
set password for 'root'@'localhost' = 'supconit-mysql';
- 使用 "alter user" 修改當前用戶的密碼:
alter user user() identified by 'supconit-mysql';
- 使用 "update" 修改用戶的ip訪問許可權:
update mysql.user set host = '%' where user = 'root' and host = 'localhost';
註意:使用 DML 語句修改用戶密碼,必須執行 "刷新許可權" 命令也能生效。
flush privileges;
- 使用(navicat等工具)遠程登錄登錄
navicat下載:鏈接:https://pan.baidu.com/s/1aknIUwy2L1Ws2uYL88COng 提取碼:og7l
特別註意:在使用遠程工具遠程登錄時連接不上。這時就有可能是伺服器的防火牆沒有關閉導致的!
- 關閉防火牆
service firewalld stop
# 或者
systemctl stop firewalld
查看伺服器的防火牆狀態命令:
service firewalld status # 或者 systemctl status firewalld
- 防火牆開啟時的狀態:
說明:Active: active (running) "活動(正在運行)的"。
- 防火牆關閉時的狀態:
說明:Active: inactive (dead) "不活動(死)的"。
擴展 - 開啟防火牆的命令:
service firewalld start # 或者 systemctl start firewalld
- 再次登錄(使用遠程工具)
8.遇到的問題
- 問題1 - 初始化時錯誤:--initialize specified but the data directory has files in it. Aborting.
原因分析:指定的 "數據目錄" 下有文件(即 datadir 選項指向的目錄中有文件)。
解決辦法:
方式1:刪除 "數據目錄" 下的所有文件。
方式2:重新創建一個新的 "數據目錄",將 datadir 選項指向新的 "數據目錄"。
- 問題2 - 初始化時提示:log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'.
原因分析:沒有找到指定的日誌文件(即:沒有找到 /var/log/mariadb/mariadb.log 文件)。
解決辦法:創建文件夾和文件,然後給 mysql 用戶授權。mkdir /var/log/mariadb
touch /var/log/mariadb/mariadb.log
chown -R mysql:mysql /var/log/mariadb/
- 問題3 - MySQL 啟動時錯誤:ERROR! The server quit without updating PID file (/data/mysql/localhost.localdomain.pid).
原因分析:沒有找到指定的 "*.pid" 文件(即沒有找到 /data/mysql/localhost.localdomain.pid 文件)。
百度了一下這個文件的作用:
localhost.localdomain.pid 文件中保存的是 MySQL 服務進程的 pid,如果這個文件丟了或者啟動時沒有找到,就會啟動失敗。可以創建一個新的,然後放入一些數字。
註意:不建議將此文件放到 /tmp 目錄下。
解決辦法:在指定的文件夾下創建 localhost.localdomain.pid 文件,然後把 MySQL 的服務進程的 pid 寫入到該文件中。
- 查詢 MySQL 服務進程的 pid 。
ps -ef |grep mysql
- 在指定的文件夾下創建文件。
vi /data/mysql/localhost.localdomain.pid
註意:新創建的文件不能保存一個空文件,需要在裡面輸入一些數字。
~ MySQL 問題的解決思路
當 MySQL 啟動不了,以及在日常的使用中出現了錯誤,一定要學會看 MySQL 錯誤日誌。畢竟每個人所遇的情況不一定都是一樣的,造成 MySQL 啟動不了和錯誤的原因是真的很多。錯誤日誌路徑:my.cnf (Windows是my.ini)文件中的 log-error 選擇所指向的文件。
如果配置文件中未指定該選項,則 Windows 系統下 MySQL 錯誤日誌預設路徑為:"數據目錄/你的主機名稱.err", Linux 系統下錯誤日誌預設路徑為:"/var/log/mysqld.log"。
SQL 命令查找方法:
show variables like 'log_error';
肉還是別人家的香 - MySQL 通用二進位文件安裝網上參考資料:https://blog.csdn.net/qq_37598011/article/details/93489404
四,Linux下安裝MySQL資料庫 - rpm 文件
基本介紹:
本次是在Linux下安裝MySQL資料庫。rpm 安裝包安裝。
本次演示的MySQL版本為: MySQL Community Server 8.0.20
1.查看環境信息
- 查看 linux 內核版本的命令:
uname -a
uname 命令選項:
- -a 或 --all:顯示所有信息;
- -n 或 --nodename:只列印對外主機名;
- -r 或 --release:只列印內核版本;(下載文件時能用到)
- -p 或 --processor:列印系統架構,比如X86_64;
- -o 或 --operating-system:列印操作系統名稱;
本文章是:GNU/Linux 的 x86_64 位操作系統。
- 查看Linux操作系統版本的命令:
# 查看Linux系統版本的命令 lsb_release -a # 或者 cat /etc/redhat-release
本文章使用的是:CentOS Linux release 7.6.1810 (Core) 操作系統版本
擴展 - Redhat系的Linux系統請使用:
cat /etc/issue
2.需要安裝基礎工具
如果你的伺服器可以連接外網,並且 yum 可以正常使用,直接運行下麵一條命令即可。
yum install -y net-tools perl libaio openssl gcc pcre-devel zlib-devel openssl vim openssl-devel
那如果你非常的不幸,要網沒網 yum 庫還中用的話!祝你好運!所有 rpm 安裝包都有的網址:https://pkgs.org/ 直接在頁面上搜索即可得到你想要的安裝包。
- 檢查 - 安裝 gcc 工具庫:
gcc -v
註意:如果你的電腦上沒有 gcc 的話,就需要安裝一個。否則 MySQL 肯定會安裝失敗!
知識擴展:
根據MySQL官網的資料:https://dev.MySQL.com/doc/refman/8.0/en/source-installation-prerequisites.html
從MySQL 8.0.27開始,MySQL 8.0源代碼允許使用C++17功能。若要在所有受支持的平臺上啟用良好的 C++17 支持級別,Linux環境gcc版本最好在7.1以上,所以先升級gcc版本(gcc7.5.0)。
- 知識擴展 -升級 gcc 版本:
說明:不升級也不會影響 MySQL 安裝。以下安裝方式是使用源碼安裝,解壓後需要 "編譯"-"安裝"。
下載需要的 gcc 版本 :下載網址:http://ftp.gnu.org/gnu/gcc/ 。
上傳 gcc-7.5.0.tar.xz 到伺服器的 "/usr/local/gcc" 下。
mkdir /usr/local/gcc
進入目錄 "/usr/local/gcc" 解壓 gcc-7.5.0.tar.xz。
xz -d gcc-7.5.0.tar.xz
tar -xvf gcc-7.5.0.tar
進入解壓目錄 /gcc-7.5.0,下載依賴(自動下載依賴)。註意:此時,電腦網路必須保證是正常的。
cd gcc-7.5.0
./contrib/download_prerequisites
建立文件夾 build,併進入配置,生成 Makefile 文件即安裝配置文件
mkdir /usr/local/gcc/gcc-7.5.0/build
cd /usr/local/gcc/gcc-7.5.0/build
./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
編譯安裝
make & make install
刪除老版本,為新版本創建軟鏈接
rm -rf /usr/bin/gcc rm -rf /usr/bin/g++ rm -rf /usr/lib64/libstdc++.so.6
創建文件夾映射鏈接 -- 註意這裡要按你們自己的配置來
ln -sf /usr/local/bin/gcc /usr/bin/gcc ln -sf /usr/local/bin/g++ /usr/bin/g++
動態庫軟鏈接
ln -sf /usr/local/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6 ln -sf /usr/local/include/c++/7.5.0 /usr/include/c++/7.5.0
註意:文件鏈接的設置根據實際的情況配置。
重啟伺服器,再次查看gcc版本
reboot
gcc -v
- 檢查 - 安裝 openssl-devel 工具庫:
openssl version
可以看到是有的,並且系統自帶的版本是 openssl-1.0.2k。
註意:如果你的電腦上沒有 openssl-devel 的話,就需要安裝一個。否則可能會導致 MySQL 安裝失敗!
- 安裝 openssl 說明:
說明:以下安裝方式是使用源碼安裝,解壓後需要 "編譯"-"安裝"。
- 方式一: 使用 yum 安裝
yum install openssl openssl-devel
註意:該方式必須保證 yum 命令正常(有外網)的情況下使用。
- 方式二:下載安裝包安裝(離線安裝)
說明:以下安裝方式是使用源碼安裝,解壓後需要 "編譯"-"安裝"。
下載需要的 ncurses 版本,下載地址:https://www.openssl.org/source/old/
上傳 ncurses-5.9.tar.gz 到伺服器的 "/usr/local/openssl" 下
mkdir /usr/local/openssl
進入目錄 "/usr/local/openssl" 解壓 openssl-1.1.1.tar.gz
tar -zxvf openssl-1.1.1.tar.gz
進入解壓目錄 openssl-1.1.1(完整路徑為:/usr/local/openssl/openssl-1.1.1)
cd openssl-1.1.1/
根據系統環境製作安裝配置文件
./config --prefix=/usr/local/openssl
安裝配置文件
./config -t
編譯安裝
make & make install
- 知識擴展 -升級 openssl 版本:
備份舊版本:
mv /usr/bin/openssl /usr/bin/openssl.bak mv /usr/include/openssl /usr/include/openssl.bak
建立新版本的軟鏈接:
# 命令目錄軟鏈接 ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl ln -s /usr/local/openssl/include/openssl /usr/include/openssl
# 動態庫軟鏈接 ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1 ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
將 openssl 的 lib 目錄追加到 "ld.so.conf" 文件中
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
刷新動態鏈接庫:
ldconfig -v
說明:如需使用新版本,則需替換原來的軟鏈接指向,即替換原動態庫,進行版本升級。
- 檢查 - 安裝 cmake 工具庫:
cmake -version
可以看到是有的,並且系統自帶的版本是 2.0.12.2 的。
- 安裝 cmake 說明(離線安裝):
說明:以下安裝方式是使用源碼安裝,解壓後需要 "編譯"-"安裝"。
gcc 等必備程式包,如果沒有 gcc 請先安裝 gcc 等程式包。
yum install -y gcc gcc-c++ make automake
註意:該方式必須保證 yum 命令正常(有外網)的情況下使用。
獲取 cmake 源碼包(下載需要的版本)
下載需要的 cmake 版本,下載地址:https://cmake.org/files/ 或者 https://cmake.org/download/
上傳 cmake-2.8.10.2.tar.gz 到伺服器的 "/usr/local/cmake" 下。
mkdir /usr/local/cmake
進入目錄 "/usr/local/cmake" 解壓 cmake-2.8.10.2.tar.gz
cd /usr/local/cmake
tar -zxvf cmake-2.8.10.2.tar.gz
進入解壓目錄 cmake-2.8.10.2(完整路徑為:/usr/local/cmake/cmake-2.8.10.2),運行 "bootstrap" 或者 "configure" 文件。
cd cmake-2.8.10.2/
安裝配置文件
./bootstrap # 或者 ./configure
編譯安裝(這步時間有點長)
gmak & gmake install
再次查看 cmake 版本
cmake -version
- 知識擴展 -升級 cmake 版本:
說明:以下安裝方式是使用通用 "二進位文件安裝",解壓即用。
下載需要的 cmake 版本,下載地址:https://cmake.org/files/ 或者 https://cmake.org/download/
上傳 cmake-3.15.5-Linux-x86_64.tar.gz 到伺服器的 "/usr/local/cmake" 下
mkdir /usr/local/cmake
進入目錄(/usr/local/cmake)解壓 cmake-3.15.5-Linux-x86_64.tar.gz
tar -zxvf cmake-3.15.5-Linux-x86_64.tar.gz
刪除老版本,為新版本的文件鏈接:
# 刪除老的 cmake rm -rf /usr/bin/cmake
# 通過建立鏈接 -替換 cmake ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake
再次查看 cmake 版本
cmake -version
- 檢查 - 安裝 ncuress-devel 工具庫:
**查看電腦上是否安裝了 ncurses **
rpm -qa | grep ncurses
註意:如果你的電腦上沒有 ncuress-devel 的話,就需要安裝一個。否則可能會導致 MySQL 安裝失敗!
ncuress-devel 安裝說明:
- 方式一: 使用 yum 安裝
yum install ncurses-devel
註意:該方式必須保證 yum 命令正常(有外網)的情況下使用。
- 方式二:下載 rpm 包安裝 ncuress-devel(離線安裝)
下載需要的 ncurses-devel 版本,下載地址:https://pkgs.org/download/ncurses 或者 http://mirror.centos.org/centos/7/os/x86_64/Packages/ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm
將 ncurses-devel 的安裝包上傳到伺服器
安裝命令:
rpm -ivh ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm
- 方式三:下載安裝包安裝(離線安裝)
說明:以下安裝方式是使用源碼安裝,解壓後需要 "編譯"-"安裝"。
下載需要的 ncurses 版本,下載地址:https://ftp.gnu.org/gnu/ncurses/
上傳 ncurses-5.9.tar.gz 到伺服器的 "/usr/local/ncurses" 下
mkdir /usr/local/ncurses
進入目錄 "/usr/local/ncurses" 解壓 ncurses-5.9.tar.gz
tar -zxvf ncurses-5.9.tar.gz
進入解壓目錄 /ncurses-6.1(完整路徑為:/usr/local/ncurses/ncurses-5.9)
cd ncurses-5.9/
安裝配置文件
./configure
編譯
make
安裝
make install
**看到界面最後輸出:表示 ncurses-devel 依賴就裝好了。 **
installing ./cursesapp.h in /home/wlf/ncurses/include/ncurses installing ./cursesf.h in /home/wlf/ncurses/include/ncurses installing ./cursesm.h in /home/wlf/ncurses/include/ncurses installing ./cursesp.h in /home/wlf/ncurses/include/ncurses installing ./cursesw.h in /home/wlf/ncurses/include/ncurses installing ./cursslk.h in /home/wlf/ncurses/include/ncurses installing etip.h in /home/wlf/ncurses/include/ncurses make[1]: Leaving directory `/home/wlf/ncurses-5.9/c++'
3.下載 MySQL
打開官方下載地址:https://downloads.MySQL.com/archives/community/ 或者 https://dev.MySQL.com/downloads/MySQL/,根據自己對應是系統,以及版本進行選擇,這裡演示的是Linux系統的安裝 MySQL 8.0.20(本文章是:GNU/Linux 的 x86_64 位操作系統)。
4.上傳安裝包並解壓
- 創建文件夾,將文件上傳到 "/usr/local/mysql" 文件夾下。
mkdir /usr/local/mysql
- 進入目錄 "/usr/local/mysql" 解壓安裝包。
tar -xvf mysql-8.0.20-1.el7.x86_64.rpm-bundle.tar
5.進行安裝
千萬註意:在安裝 MySQL 時一定要按照順序安裝。否則會安裝失敗。
安裝順序:
- mysql-community-common-xxx-xx.rpm
- mysql-community-test-xxx-xx.rpm
- mysql-community-libs-xxx-xx.rpm
- mysql-community-client-xxx-xx.rpm
- mysql-community-server-xxx-xx.rpm
- mysql-community-devel-xxx-xx.rpm
安裝命令語法如下:
rpm -ivh mysql-xxx.rpm --nodeps
- 安裝 mysql-community-common- xx...
rpm -ivh mysql-community-common-8.0.20-1.el7.x86_64.rpm --nodeps
警告:MySQL-community-common-8.0.20-1.el7.x86_64.rpm: 頭V3 DSA/SHA1 Signature, 密鑰 ID 5072e1f5: NOKEY
準備中... ################################# [100%]
正在升級/安裝...
1:MySQL-community-common-8.0.20-1.e################################# [100%]
- 安裝 mysql-community-test- xx...
rpm -ivh mysql-community-test-8.0.20-1.el7.x86_64.rpm --force --nodeps
警告:mysql-community-test-8.0.20-1.el7.x86_64.rpm: 頭V3 DSA/SHA1 Signature, 密鑰 ID 5072e1f5: NOKEY
準備中... ################################# [100%]
正在升級/安裝...
1:mysql-community-test-8.0.20-1.el7################################# [100%]
- 安裝 MySQL-community-libs- xx...
rpm -ivh mysql-community-libs-8.0.20-1.el7.x86_64.rpm --force --nodeps
警告:mysql-community-libs-8.0.20-1.el7.x86_64.rpm: 頭V3 DSA/SHA1 Signature, 密鑰 ID 5072e1f5: NOKEY
準備中... ################################# [100%]
正在升級/安裝...
1:mysql-community-libs-8.0.20-1.el7################################# [100%]
- 安裝 mysql-community-client- xx...
rpm -ivh mysql-community-client-8.0.20-1.el7.x86_64.rpm --force --nodeps
警告:mysql-community-client-8.0.20-1.el7.x86_64.rpm: 頭V3 DSA/SHA1 Signature, 密鑰 ID 5072e1f5: NOKEY
準備中... ################################# [100%]
正在升級/安裝...
1:mysql-community-client-8.0.20-1.e################################# [100%]
- 安裝 mysql-community-server- xx...
rpm -ivh mysql-community-server-8.0.20-1.el7.x86_64.rpm --force --nodeps
警告:mysql-community-server-8.0.20-1.el7.x86_64.rpm: 頭V3 DSA/SHA1 Signature, 密鑰 ID 5072e1f5: NOKEY
準備中... ################################# [100%]
正在升級/安裝...
1:mysql-community-server-8.0.20-1.e################################# [100%]
- 安裝 mysql-community-devel- xx...
rpm -ivh mysql-community-devel-8.0.20-1.el7.x86_64.rpm --force --nodeps
警告:mysql-community-devel-8.0.20-1.el7.x86_64.rpm: 頭V3 DSA/SHA1 Signature, 密鑰 ID 5072e1f5: NOKEY
準備中... ################################# [100%]
正在升級/安裝...
1:mysql-community-devel-8.0.20-1.el################################# [100%]
安裝時可能出現的問題:
[root@xxxxxx MySQL]# rpm -ivh MySQL-community-test-8.0.20-1.el7.x86_64.rpm --nodeps 警告:MySQL-community-test-8.0.20-1.el7.x86_64.rpm: 頭V3 DSA/SHA1 Signature, 密鑰 ID 5072e1f5: NOKEY 準備中... ################################# [100%] file /usr/bin/mysqld_safe from install of MySQL-community-test-8.0.20-1.el7.x86_64 conflicts with file from package mariadb-server-1:5.5.60-1.el7_5.x86_64 file /usr/bin/MySQLtest from install of ...... ......
錯誤說明:mysql-community-test-8.0.20-1.el7.x86_64安裝的文件/usr/bin/mysql_safe與軟體包 mariab-server-1:5.5.60-1.el7_5.x 中的文件衝突
問題原因:我們安裝的 MySQL 和 mariab-server 發生了衝突。
解決方式:我選擇的是方式一
- 方式一:在安裝的命令後面加上 --force --nodeps(強制安裝)。
- 方式二:卸載引起衝突的軟體(文件:mariab-server)。
6.啟動和停止 MySQL
- 啟動 MySQL,並查看 MySQL 服務狀態。 (註意:使用安裝包安裝 MySQL 的話,預設的服務名稱為:mysqld)
service mysqld start
# 或者
systemctl start mysqld
- 查詢 MySQL 伺服器的狀態:
service mysqld status
# 或者
systemctl status mysqld
- MySQL 服務開啟時的狀態:
說明:Active: active (running) "活動(正在運行)的",Main PID: 39490(mysqld):表示 MySQL 占用的進程id。
- MySQL 服務關閉時的狀態:
說明:Active: inactive (dead) "不活動(死)的",Main PID: 39490(mysqld):表示 MySQL 占用的進程id。
- 擴展命令 - 查詢 MySQL 服務狀態命令:
ps -ef|grep mysqld
- 擴展命令 - 埠(3306)信息查詢命令:
lsof -i:3306
- 停止 MySQL 服務:
service mysqld stop
# 或者
systemctl stop mysqld
7.登錄 MySQL 並修改密碼
- 查看臨時密碼(說明:在 "錯誤日誌" 中,預設為:"/var/log/mysqld.log")
more /var/log/mysqld.log | grep "A temporary password"
- 登錄 MySQL
mysql -uroot -p
登錄成功!
- 修改密碼策略
說明:mysql 8.0 的預設密碼策略要求是比較嚴苛的,所以這裡需要修改 "密碼策略"。如果不修改的話,密碼設置的過於簡單的話,會出現錯誤 錯誤1819(HY000)密碼不符合當前策略要求 的錯誤。
# 修改密碼複雜級別
set global validate_password.policy=0;
# 修改密碼長度
set global validate_password.length=1;
註意:以上兩個系統變數 8.0 後做了變動,變數名不同了。(validate_password_policy 和 validate_password.policy )
- MySQL 8.0 版本之前使用 validate_password_policy 和 validate_password_length。
- MySQL 8.0 版本之後使用 validate_password.policy 和 validate_password.length。
- 修改 root 密碼
alter user 'root'@'localhost' identified with mysql_native_password by 'supconit-mysql';
擴展 - 常見修改用戶信息的方式:
- 使用 "set password for" 修改用戶密碼:
set password for 'root'@'localhost' = 'supconit-mysql';
- 使用 "alter user" 修改當前用戶的密碼:
alter user user() identified by 'supconit-mysql';
- 使用 "update" 修改用戶的ip訪問許可權:
update mysql.user set host = '%' where user = 'root' and host = 'localhost';
註意:使用 DML 語句修改用戶密碼,必須執行 "刷新許可權" 命令也能生效。
flush privileges;
- 使用(navicat等工具)遠程登錄登錄
navicat下載:鏈接:https://pan.baidu.com/s/1aknIUwy2L1Ws2uYL88COng 提取碼:og7l
特別註意:在使用遠程工具遠程登錄時連接不上。這時就有可能是伺服器的防火牆沒有關閉導致的!
- 關閉防火牆
service firewalld stop
# 或者
systemctl stop firewalld
查看伺服器的防火牆狀態命令:
service firewalld status # 或者 systemctl status firewalld
- 防火牆開啟時的狀態:
說明:Active: active (running) "活動(正在運行)的"。
- 防火牆關閉時的狀態:
說明:Active: inactive (dead) "不活動(死