Ubuntu 20.04 安裝和配置MySql5.7

1. Ubuntu換源

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

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,保存退出。mysql

# 清華鏡像源
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 方式安裝

這種方式須要服務器能聯網linux

# 執行下面安裝命令

# 安裝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用戶的密碼(此密碼須要記住)
在這裏插入圖片描述
在這裏插入圖片描述c++

安裝完成後查看mysql版本和服務sql

mysql -V    # 查看mysql版本
netstat -tap | grep mysql  # 查看mysql服務

在這裏插入圖片描述
如上圖所示說明安裝成功。shell

2.2 deb安裝包方式安裝

這種安裝方式服務器能聯網或不能聯網均可以數據庫

如下安裝使用到的包能夠本身去下載,也能夠使用我下載好的。ubuntu

百度雲地址:https://pan.baidu.com/s/15kjX-ybetkUJD7TZPz0uLQvim

提取碼: qozu瀏覽器

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

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

相關文章
相關標籤/搜索