ubuntu 20.04系統自帶源直接安裝是MySQL 8.0,我要安裝MySQL 5.7的版本的因此先進行換源。html
sudo cp /etc/apt/sources.list /etc/apt/sources.list.old
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
# 更新鏡像源 sudo apt-get update
# 更新軟件 sudo apt-get upgrade
這種方式須要服務器能聯網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
這種安裝方式服務器能聯網或不能聯網均可以數據庫
如下安裝使用到的包能夠本身去下載,也能夠使用我下載好的。ubuntu
百度雲地址:https://pan.baidu.com/s/15kjX-ybetkUJD7TZPz0uLQvim
提取碼: qozu瀏覽器
安裝包能夠在服務器裏直接獲取或者本身去官網下載
# 在服務器裏直接獲取(服務器須要聯網) 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/
將下載好的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
服務器不能聯網時就本身去下載而後上傳到服務器
# 下載軟件包須要區分硬件架構 [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服務
如上圖所示說明安裝成功。
# 中止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
# 直接登錄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;
# 使用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';
# 查看用戶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
# 備份全部數據庫: 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
# 查看監聽 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/)
自行下載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;
# 卸載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
本博文記錄內容我都本身操做過,如能幫助到須要的小夥伴,我將感到很榮幸,若有錯誤之處歡迎指正。