首頁 > 軟體

Ubuntu 20.04 安裝和設定MySql5.7的詳細教學

2020-12-18 12:16:52

1. Ubuntu換源

ubuntu 20.04系統自帶源直接安裝是MySQL 8.0,我要安裝MySQL 5.7的版本的所以先進行換源。

1.1 備份原來的sorce檔案

sudo cp /etc/apt/sources.list /etc/apt/sources.list.old

1.2 修改sources.list檔案

sudo vim /etc/apt/sources.list 

我選擇的是清華映象源。將sources.list內容清空,然後選擇一個源貼上到sources.list,儲存退出。

# 清華映象源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

1.3 更新映象源和軟體

# 更新映象源
sudo apt-get update
# 更新軟體
sudo apt-get upgrade  

2. 安裝mysql

2.1 apt-get install 方式安裝

這種方式需要伺服器能聯網

# 執行下面安裝命令

# 安裝mysql5.7伺服器端
sudo apt-get install mysql-server-5.7

# 安裝mysql5.7使用者端
sudo apt-get install mysql-client-5.7

# 使用c/c++等語言操作mysql的動態連結庫,如果不需要可不安裝
sudo apt install libmysqlclient-dev

安裝時需要輸入兩次mysql root使用者的密碼(此密碼需要記住)


安裝完成後檢視mysql版本和服務

mysql -V # 檢視mysql版本
netstat -tap | grep mysql # 檢視mysql服務

如上圖所示說明安裝成功。

2.2 deb安裝包方式安裝

這種安裝方式伺服器能聯網或不能聯網都可以

以下安裝使用到的包可以自己去下載,也可以使用我下載好的。

連結: https://pan.baidu.com/s/1lJq7hZH-X35f5gC-A-URiQ

 提取碼: gxfk

1)下載deb安裝包

安裝包可以在伺服器裡直接獲取或者自己去官網下載

# 在伺服器裡直接獲取(伺服器需要聯網)
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-server_5.7.31-1ubuntu18.04_amd64.deb-bundle.tar

# 也可以直接將網址貼上到瀏覽器下載安裝壓縮包
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-server_5.7.31-1ubuntu18.04_amd64.deb-bundle.tar

自己去官網下載,選擇好mysql版本和作業系統版本然後點選下載。

網址:https://downloads.mysql.com/archives/community/

2)使用deb包進行安裝

將下載好的mysql-server_5.7.31-1ubuntu18.04_amd64.deb-bundle.tar壓縮包匯入linux伺服器,然後進行下面的操作。

# 新建目錄
mkdir mysql5.7.31
mv mysql-server_5.7.31-1ubuntu18.04_amd64.deb-bundle.tar ./mysql5.7.31

# 解壓
cd mysql5.7.31
sudo tar -vxf mysql-server_5.7.31-1ubuntu18.04_amd64.deb-bundle.tar

# 解壓出來的deb安裝包如下:
libmysqlclient20_5.7.31-1ubuntu18.04_amd64.deb
mysql-client_5.7.31-1ubuntu18.04_amd64.deb
mysql-community-source_5.7.31-1ubuntu18.04_amd64.deb
mysql-server_5.7.31-1ubuntu18.04_amd64.deb
mysql-common_5.7.31-1ubuntu18.04_amd64.deb
mysql-testsuite_5.7.31-1ubuntu18.04_amd64.deb
libmysqlclient-dev_5.7.31-1ubuntu18.04_amd64.deb
mysql-community-client_5.7.31-1ubuntu18.04_amd64.deb
mysql-community-server_5.7.31-1ubuntu18.04_amd64.deb
libmysqld-dev_5.7.31-1ubuntu18.04_amd64.deb
mysql-community-test_5.7.31-1ubuntu18.04_amd64.deb

# 刪除2個測試相關的包
sudo rm -f mysql-testsuite_5.7.31-1ubuntu18.04_amd64.deb
sudo rm -f mysql-community-test_5.7.31-1ubuntu18.04_amd64.deb

用dpkg進行安裝

# 用dpkg進行安裝
sudo dpkg -i mysql-*.deb

結果報錯了_^^

報錯的意思是缺少 2個包 libtinfo5libmecab2,那就安裝這兩個包,如果還缺少其他包,按照下面的步驟安裝即可。

# 伺服器能聯網時直接安裝
sudo apt-get install libtinfo5
sudo apt-get install libmecab2

伺服器不能聯網時就自己去下載然後上傳到伺服器

下載網址 https://ubuntu.pkgs.org/

# 下載軟體包需要區分硬體架構
[admin0@Ubuntu20:/home/admin0]$ uname -m # 檢視硬體架構
x86_64 # x86_64就是AMD64

將Binary Package對應的網址複製到瀏覽器即可下載,然後將下載好的 libtinfo5libmecab2包匯入伺服器進行安裝。

sudo dpkg -i libtinfo5_6.2-0ubuntu2_amd64.deb
sudo dpkg -i libmecab2_0.996-10build1_amd64.deb

# 再次用dpkg進行安裝
cd mysql5.7.31
sudo dpkg -i mysql-*.deb

提示輸入2次root密碼,然後安裝成功

安裝完成後檢視mysql版本和服務

mysql -V # 檢視mysql版本
netstat -tap | grep mysql # 檢視mysql服務

如上圖所示說明安裝成功。

3.新建使用者並賦權

3.1 未設定或忘了密碼解決辦法

# 停止mysql服務
sudo service mysql stop

# 修改MySQL的登入設定,暫時不校驗登陸密碼
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

# 將[mysqld]下的「skip-external-locking」註釋掉
# 新增 「skip-grant-tables」 然後儲存退出
例如:
================================================
[mysqld]
user  = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket  = /var/run/mysqld/mysqld.sock
port  = 3306
basedir  = /usr
datadir  = /var/lib/mysql
tmpdir  = /tmp
lc-messages-dir = /usr/share/mysql
#skip-external-locking
skip-grant-tables
=================================================

# 重啟mysql資料庫
sudo service mysql restart

# 免密登陸mysql資料庫
mysql -u root mysql

# 修改root密碼
update mysql.user set authentication_string=password('111222333') where user='root';

# 重新整理生效
flush privileges;

# 還原MySQL的登入設定
# 將[mysqld]下新增的「skip-grant-tables」 刪除
# 將「skip-external-locking」的註釋放開然後儲存退出
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
例如:
================================================
[mysqld]
user  = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket  = /var/run/mysqld/mysqld.sock
port  = 3306
basedir  = /usr
datadir  = /var/lib/mysql
tmpdir  = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
=================================================

# 重啟mysql資料庫
sudo service mysql restart

# 使用新密碼登陸mysql
mysql -u使用者名稱 -p密碼 資料庫名
# 例如: 
mysql -uroot -p111222333 mysql

3.2 登陸mysql檢視資訊

# 直接登陸mysql
mysql -u使用者名稱 -p密碼 資料庫名
# 例如: 
mysql -uroot -p111222333 mysql

# 先登陸後面再輸入密碼和選擇資料庫
mysql -u root -p
Enter password: 「root使用者密碼」
mysql> use mysql # 選擇要操作的資料庫

# 切換資料庫
use 資料庫名;

# 檢視所有資料庫
show databases; 

# 檢視登陸資料庫中所有的表
show tables; 

# 檢視資料表結構
desc 表名;

# 檢視登陸使用者名稱 
select user(); 

# 檢視登陸資料庫庫名
select database();

# 檢視版本
select version();

# 顯示當前時間
select now();

# 檢視所有使用者的 使用者名稱、可登陸主機、身份驗證外掛、密碼 
select user,host,plugin,authentication_string from user;

# 檢視當前登入使用者許可權
show grants;

# 檢視任意使用者許可權(後面說許可權的具體含義)
show grants for root@localhost;

3.3 建立及刪除資料庫和使用者

# 使用root使用者登入資料庫
mysql -uroot -p111222333 mysql

# 建立資料庫
create database "資料庫名" charset="資料庫編碼";
# 例如:
create database pydb charset=utf8;

# 建立資料庫使用者
create user "使用者名稱"@"IP地址" identified by "密碼";
# 例如:
create user 'test0'@'localhost' identified by 'test0111';

# 刪除資料
drop database [資料庫名];
# 例如:
drop database pydb;

# 刪除資料庫使用者
drop user '使用者名稱'@'ip地址';
# 例如:
drop user 'test0'@'localhost';

3.4 給使用者賦許可權

# 檢視使用者test0的許可權
show grants for test0@localhost;

顯示:[GRANT USAGE ON *.* TO 'test0'@'localhost']
USAGE: 表示無許可權使用者。

# 用test0使用者登入pydb資料庫
mysql -utest0 -ptest0111 pydb

報錯提示無權操作:[ERROR 1044 (42000): Access denied for user 'test0'@'localhost' to database 'pydb']

# 使用root使用者給test0使用者賦權
grant all privileges on '資料庫名'.'表名' to '使用者名稱'@'IP地址' identified by "密碼" with grant option;

# 例如設定本地使用者端存取此使用者:
mysql> grant all privileges on pydb.* to 'test0'@'localhost' identified by 'test0111' with grant option;

# 設定遠端任意使用者端存取此使用者:
mysql> grant all privileges on pydb.* to 'test0'@'%' with grant option;

# 重新整理許可權
mysql> flush privileges;

# 檢視本地許可權
show grants for 'test0'@'localhost';
回顯:[GRANT ALL PRIVILEGES ON `pydb`.* TO 'test0'@'localhost' WITH GRANT OPTION]

# 檢視遠端許可權
show grants for 'test0'@'%';
回顯:[GRANT ALL PRIVILEGES ON `pydb`.* TO 'test0'@'%' WITH GRANT OPTION]
許可權都新增成功了,現在本地使用者端和遠端使用者端都擁有了登陸test0使用者操作pydb資料庫下的所有表的許可權了。

# 賦權命令解釋
grant: 賦權關鍵字
all privileges: 賦權型別,all privileges表示所有許可權。也可以賦值具體的許可權如:select、update、create、drop等。
on: 表示許可權要賦給哪個資料庫的哪個表,*.* 表示所有資料庫的所有表。
to: 表示許可權要賦給哪個使用者,格式:」使用者名稱」@」登入IP或域名」。localhost表示本機使用者端可登入此使用者, %表示任何主機使用者端都可以登入此使用者,如果配的是具體ip例如'使用者名稱'@'192.168.113',表示只允許192.168.113這個主機使用者端登入此使用者。 也可以設定IP段例如'使用者名稱'@'192.168.%'
identified by: 設定此使用者的登入密碼,也可以不設定。
with grant option: 表示允許此使用者將自己的許可權授權給其它使用者。
注意: grant新增的許可權是自動疊加的,比如第一次新增了select許可權後面再新增insert許可權,那麼此使用者就擁有select和insert許可權。如果此使用者已經擁有所有許可權,再新增select許可權則此使用者還是擁有all privileges所有許可權。

# 移除許可權
revoke insert on '資料庫名'.'表名' from '使用者名稱'@'IP地址';
# 例如移除insert許可權:
revoke insert on pydb.* from 'test0'@'localhost';

# 例如所有許可權:
revoke all on pydb.* from 'test0'@'localhost';

# 重新整理許可權
mysql> flush privileges;

所有許可權包含很多:[SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER]

實際使用過程中不建議賦所有許可權,需要哪個賦哪個就行。

關於許可權的詳情請參考mysql官方說明:http://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html

3.5 使用者和資料庫及表關係圖

4. 資料庫的備份及恢復

# 備份所有資料庫:
mysqldump -uroot -p --all-databases > all.db

# 備份指定資料庫:
mysqldump -uroot -p pydb > test1.db

# 備份指定資料庫的某些表
mysqldump -uroot -p pydb 表名1 表名2 表名n > test2.db

# 備份指定資料庫排除某些表(排除表1 和 表2)
mysqldump -uroot -p pydb --ignore-table=pydb.表1 --ignore-table=pydb.表2 > test3.db

# 建立test資料庫
create database test charset=utf8; 

# 恢復備份資料,匯入的資料庫必須存在
mysql -u root -p test < test1.db

5. Navicat 遠端連線資料庫

5.1 修改本地監聽地址

# 檢視監聽
netstat -an |grep 3306
# 前監聽的是本地迴環地址:tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 
# 遠端使用者端無法存取

# 修改MySQL的本地監聽地址
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

修改bind-address 的值為 bind-address = 0.0.0.0儲存退出。
也可以修改為本機ip,例如:bind-address = 192.168.111.10

# 重啟mysql資料庫
sudo service mysql restart

# 在遠端使用者端機器上測試下網路,telnet成功說明網路沒問題
telnet 192.168.111.10 3306

# 注意:阿里雲伺服器有埠限制,需要去設定下埠存取規則開放3306埠
網址:[https://homenew.console.aliyun.com/](https://homenew.console.aliyun.com/)

5.2 Navicat 遠端連線

自行下載Navicat並安裝。

如果連線失敗則進行以下測試:
[192.168.111.10]是你的mysql伺服器ip地址
1.測試網路和埠
telnet 192.168.111.10 3306

2.檢視伺服器監聽地址
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0

3.檢視使用者是否有遠端存取許可權及密碼驗證外掛
select user,host,plugin from user;
登陸使用者host的值: % 或 遠端使用者端ip
登陸使用者plugin的值: mysql_native_password 
mysql5.7版本的密碼驗證外掛是 mysql_native_password 

# 新增使用者存取許可權及設定密碼驗證外掛
grant all privileges on pydb.* to 'test0'@'%' identified with mysql_native_password by 'test0111';

# 如果使用者遠端存取許可權存在,密碼驗證外掛不對,可只修改密碼驗證外掛
alter user 'test0'@'%' identified with mysql_native_password by '111222333';

# 重新整理許可權
mysql> flush privileges;

6. 解除安裝mysql

# 解除安裝mysql:
1.sudo apt-get autoremove mysql* --purge
2.sudo apt-get remove mysql-server
3.sudo apt-get remove mysql-common

# 清理殘留資料 
sudo dpkg -l |grep mysql|awk '{print $2}' |sudo xargs dpkg -P 
sudo rm -rf /etc/mysql/ 
sudo rm -rf /var/lib/mysql

# 檢查是否刪除完畢
whereis mysql
sudo find / -name mysql

本博文記錄內容我都自己操作過,如能幫助到需要的小夥伴,我將感到很榮幸,如有錯誤之處歡迎指正。

到此這篇關於Ubuntu 20.04 安裝和設定MySql5.7的文章就介紹到這了,更多相關Ubuntu 20.04 安裝MySql5.7內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com