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/15kjX-ybetkUJD7TZPz0uLQ
提取碼: 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個包 libtinfo5 和 libmecab2,那就安裝這兩個包,如果還缺少其他包,按照下面的步驟安裝即可,
# 服務器能聯網時直接安裝
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對應的網址復制到瀏覽器即可下載,然后將下載好的 libtinfo5 和 libmecab2包匯入服務器進行安裝,
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
本博文記錄內容我都自己操作過,如能幫助到需要的小伙伴,我將感到很榮幸,如有錯誤之處歡迎指正,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/236502.html
標籤:其他
