- 修改默認源
# 備份之前的源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.old
# 修改sources.list文件
sudo vim /etc/apt/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
# 更新鏡像源
sudo apt-get update
# 更新軟件
sudo apt-get upgrade
- 本次采用 apt-get install 方式安裝,該方式需要聯網安裝
# 執行下面安裝命令
sudo apt-get install libtinfo5
#安裝mysql5.7所需要的依賴
sudo apt-get install mysql-client-core-5.7
# 安裝mysql5.7客戶端
sudo apt-get install mysql-client
# 安裝mysql5.7服務端
sudo apt-get install mysql-server-5.7
# 使用c/c++等語言操作mysql的動態鏈接庫,如果不需要可不安裝
sudo apt install libmysqlclient-dev
- 安裝時需要輸入兩次mysql 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
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;