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