博客 / 詳情

返回

數據庫的應用-第一天

數據庫程序安裝部署MySQL

步驟一:數據庫部署環境準備

數據庫程序安裝部署MySQL
步驟一:數據庫部署環境準備
- 系統環境準備:麒麟 V10 sp3 / CentOS 7.9
- 系統基礎優化:
	關閉防火牆:systemctl stop firewalld / systemctl disable firewalld
	關閉selinux:
	setenforce 0			#	臨時生效    
	vi /etc/selinux/config	#	永久生效
	第七行SELINUX=disabled

	設置完成後reboot重啓,然後getenforce檢查狀態,看看是否顯示disable
	[root@mysql3 ~]# getenforce
	Disabled

	卸載已有數據庫:
	先檢查是否已有數據庫程序包,以免後續安裝mariadb衝突
[root@mysql ~]#rpm -qa |grep mariadb
mariadb-connector-c-3.0.6-8.ky10.x86_64
#	這個無所謂,但如果有別的就完犢子,就得卸載,像只有maraidb-加版本號: command not found
[root@mysql ~]#rpm -qa |grep mysql


	如果有,刪除已有數據庫
[root@mysql ~]#yum remove -y `rpm -qa | grep mariadb`
或者用
[root@mysql ~]# rpm -e `rpm -qa|grep mysql` --nodeps

步驟二:數據庫程序下載安裝(採用二進制方式安裝)

步驟二:數據庫程序下載安裝(採用二進制方式安裝) 
下載數據庫程序二進制包:
https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz

安裝數據庫二進制的程序⭐:
1.cd /usr/local/

2.上傳mysql的安裝包
#	在centos系統中上傳時,需要解決安裝源問題,要更換新的安裝源,然後安裝lrzsz,才能上傳壓縮包
第一步:備份當前的 yum 配置
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
第二步:下載阿里雲的 CentOS 7 repo 文件(如果 curl 或 wget 也用不了,請看下方的“特殊情況”【特殊情況已省略,如出錯,問AI去】)
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
如果提示 curl: command not found,嘗試用 wget:
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
第三步:清理並生成新的緩存
yum clean all
yum makecache
第四步:再次安裝 lrzsz
yum -y install lrzsz

3.tar xf mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz		#	解壓安裝包
4.ln -s mysql-8.0.36-linux-glibc2.12-x86_64  mysql		#	做一個軟連接
5.vim /etc/profile
export PATH="$PATH:/usr/local/mysql/bin"
6.source /etc/profile
7.mysql -V
顯示:mysql  Ver 8.0.36 for Linux on x86_64 (MySQL Community Server - GPL)

步驟三:數據庫的初始化操作⭐

步驟三:數據庫的初始化操作
數據庫初始化操作的作用:可以在數據庫存儲目錄中生成相關數據文件,生成數據文件的目的是實現數據庫啓動運行
1.[root@mysql ~]#mkdir -p /data/3306/data
2.[root@mysql data]#useradd mysql && chown -R mysql.mysql /data/3306/data/

3.做一個檢查看看有沒有這個文件,若存在就要進行刪除,否則會影響數據庫初始化操作
[root@mysql data]#ll /etc/my.cnf
ls: cannot access '/etc/my.cnf': No such file or directory

4.進行一個“不安全”的初始化-【可以免密登錄】
[root@mysql data]#mysqld --initialize-insecure --user=mysql --datadir=/data/3306/data  --basedir=/usr/local/mysql
2026-02-26T12:05:17.641827Z 0 [System] [MY-013169] [Server] /usr/local/mysql-8.0.36-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.36) initializing of server in progress as process 1962
2026-02-26T12:05:17.646881Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2026-02-26T12:05:18.083433Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2026-02-26T12:05:20.188621Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
#	只要不顯示ERROR就是成功

成功後檢查目錄下面是否能有內容
[root@mysql data]#ll /data/3306/data
total 79292
-rw-r----- 1 mysql mysql       56 Feb 26 10:19  auto.cnf
-rw------- 1 mysql mysql     1705 Feb 26 10:19  ca-key.pem
-rw-r--r-- 1 mysql mysql     1112 Feb 26 10:19  ca.pem
-rw-r--r-- 1 mysql mysql     1112 Feb 26 10:19  client-cert.pem
-rw------- 1 mysql mysql     1705 Feb 26 10:19  client-key.pem
-rw-r----- 1 mysql mysql   196608 Feb 26 10:19 '#ib_16384_0.dblwr'
-rw-r----- 1 mysql mysql  8585216 Feb 26 10:19 '#ib_16384_1.dblwr'
-rw-r----- 1 mysql mysql     5821 Feb 26 10:19  ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Feb 26 10:19  ibdata1
drwxr-x--- 2 mysql mysql     4096 Feb 26 10:19 '#innodb_redo'
drwxr-x--- 2 mysql mysql        6 Feb 26 10:19 '#innodb_temp'
drwxr-x--- 2 mysql mysql      143 Feb 26 10:19  mysql
-rw-r----- 1 mysql mysql 26214400 Feb 26 10:19  mysql.ibd
drwxr-x--- 2 mysql mysql     8192 Feb 26 10:19  performance_schema
-rw------- 1 mysql mysql     1705 Feb 26 10:19  private_key.pem
-rw-r--r-- 1 mysql mysql      452 Feb 26 10:19  public_key.pem
-rw-r--r-- 1 mysql mysql     1112 Feb 26 10:19  server-cert.pem
-rw------- 1 mysql mysql     1705 Feb 26 10:19  server-key.pem
drwxr-x--- 2 mysql mysql       28 Feb 26 10:19  sys
-rw-r----- 1 mysql mysql 16777216 Feb 26 10:19  undo_001
-rw-r----- 1 mysql mysql 16777216 Feb 26 10:19  undo_002



--------------------------------------------------------------------------------------------------------
#操作失誤時,刪除/data/3306/data/*下面的所有內容,然後重新進行初始化操作
[root@mysql data]#rm -rf /data/3306/data/*
[root@mysql data]#mysqld --initialize-insecure --user=mysql --datadir=/data/3306/data  --basedir=/usr/local/mysql
2026-02-26T02:16:16.932761Z 0 [System] [MY-013169] [Server] /usr/local/mysql-8.0.36-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.36) initializing of server in progress as process 1771
2026-02-26T02:16:16.940822Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2026-02-26T02:16:17.578200Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2026-02-26T02:16:19.423457Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
--------------------------------------------------------------------------------------------------------
數據庫初始化操作擴展:
版本:9.0    8.0    5.7

1.安全初始化:
以“安全”的方式進行數據庫初始化操作-【有一個初始的臨時密碼(較為雞肋,所以安全和不安全的初始化,沒有太大的區別)】
-- 初始化完會有默認數據庫root用户臨時密碼信息 臨時密碼應用登錄後需要設置新的密碼(不做新密碼設定沒有管理權限)

[root@mysql data]#rm -rf /data/3306/data/*
[root@mysql data]#mysqld --initialize --user=mysql --datadir=/data/3306/data  --basedir=/usr/local/mysql
2026-02-26T02:19:24.990039Z 0 [System] [MY-013169] [Server] /usr/local/mysql-8.0.36-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.36) initializing of server in progress as process 1817
2026-02-26T02:19:24.995522Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2026-02-26T02:19:25.638139Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2026-02-26T02:19:27.195626Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: MiANqV)%h6mu

2.不安全初始化:
mysqld --initialize-insecure  --user=mysql  --datadir=/data/3306/data  --basedir=/usr/local/mysql
-- 初始化完數據庫採用免密登錄(設置新密碼)


版本:5.5   5.6 
mysql_install_db  --user=mysql  --datadir=/data/3306/data  --basedir=/usr/local/mysql

步驟四:編輯數據庫服務配置文件

編輯數據庫配置文件作用:可以設置數據庫服務功能/實現數據庫運行啓動
cat >/etc/my.cnf <<EOF
[mysqld]
port=3306
user=mysql
datadir=/data/3306/data
basedir=/usr/local/mysql
socket=/tmp/mysql.sock
EOF

步驟五:啓動運行數據庫服務

[root@mysql ~]#cd /data/3306/data/
[root@mysql data]#ll /usr/local/mysql/support-files/mysql.server 
-rwxr-xr-x 1 7161 31415 10576 Dec 13  2023 /usr/local/mysql/support-files/mysql.server       
[root@mysql data]#cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

#	cp完之後,我們才可以啓動,因為有了這個文件📃

第一種啓動方式:
[root@mysql data]#/etc/init.d/mysqld start
Starting MySQL.Logging to '/data/3306/data/mysql.err'.
. SUCCESS! 
第二種啓動方式:
[root@mysql data]#/etc/init.d/mysqld stop	#	先關閉已啓動的mysql服務
Shutting down MySQL.. SUCCESS! 
[root@mysql data]#service mysqld start
Starting MySQL.. SUCCESS! 
第三種啓動方式:
[root@mysql bin]#systemctl enable mysqld		#	先執行此操作才能繼續用其他命令
mysqld.service is not a native service, redirecting to systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable mysqld
[root@mysql bin]#systemctl stop mysqld
[root@mysql bin]#systemctl start mysqld

#	安裝netstat命令yum -y install net-tools
[root@mysql bin]#netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      954/sshd: /usr/sbin 
tcp6       0      0 :::22                   :::*                    LISTEN      954/sshd: /usr/sbin 
tcp6       0      0 :::33060                :::*                    LISTEN      2382/mysqld         
tcp6       0      0 :::3306                 :::*                    LISTEN      2382/mysqld         
udp        0      0 127.0.0.1:323           0.0.0.0:*                           622/chronyd         
udp6       0      0 ::1:323                 :::*                                622/chronyd         





[root@mysql bin]#mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
#	要密碼,因為我們使用安全初始化,找到安全初始化的密碼,然後粘貼下去

[root@mysql bin]#mysql -p
Enter password: 			#	粘貼密碼
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.36

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> create database oldboy;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
#	提示必須重設密碼才能進行操作,所以,安全初始化和不安全初始化區別不大

mysql> ALTER USER root@'localhost' identified by '123456';		#	設置初始化密碼
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye





[root@mysql bin]#mysql -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.36 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> create database oldboy;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| oldboy             |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

數據庫基礎管理操作

1)數據庫密碼設置

1.設置密碼:
[root@mysql bin]# mysqladmin -u用户名稱 password '123456'		#	無密碼情況下


2.修改密碼:
方式1:
#	有密碼情況下,命令行中直接修改,可以指定任何用户
[root@mysql bin]# mysqladmin -u用户名稱 p123456 password '111111'		

方式2:
#	用原有密碼登錄到數據庫中修改,可以指定任何用户
[root@mysql bin]#mysql -uroot -p111111	
#	ALTER USER這個語句只能管理員進行執行
ALTER USER root@'localhost' identified by '111222';


3.重置密碼:(忘記密碼時需要重置)
非管理員用户密碼忘記可以使用管理員登錄數據庫,使用alter user命令修改即可
管理員用户密碼遺忘,需要執行以下步驟重置管理員密碼

步驟一:停止數據庫服務⭐
/etc/init.d/mysqld stop

[root@mysql ~]#/etc/init.d/mysqld stop
Shutting down MySQL. SUCCESS! 

步驟二:採用免密方式登錄/啓動數據庫⭐
mysqld --skip-grant-tables & 
#	--skip-grant-tables 在啓動數據庫時,不加載授權表(做用户驗證)
[root@mysql ~]#mysqld --skip-grant-tables &
[1] 57044
[root@mysql ~]#2026-02-26T03:52:54.809536Z 0 [System] [MY-010116] [Server] /usr/local/mysql-8.0.36-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.36) starting as process 57044
2026-02-26T03:52:54.857662Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2026-02-26T03:52:55.421975Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2026-02-26T03:52:55.831905Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2026-02-26T03:52:55.831936Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2026-02-26T03:52:55.848354Z 0 [System] [MY-010931] [Server] /usr/local/mysql-8.0.36-linux-glibc2.12-x86_64/bin/mysqld: ready for connections. Version: '8.0.36'  socket: '/tmp/mysql.sock'  port: 0  MySQL Community Server - GPL.
2026-02-26T03:52:55.848464Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /tmp/mysqlx.sock

步驟三:以免密方式進入數據庫中重置密碼
mysql		#	免密進入數據庫
flush privileges;	#	重新加載授權表信息
ALTER USER root@'localhost' identified by '666666';	#	等價修改授權表中root用户密碼

演示過程:
[root@mysql ~]#mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 8.0.36 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> flush privileges;⭐
Query OK, 0 rows affected (0.02 sec)

mysql> ALTER USER root@'localhost' identified by '666666';⭐
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye





步驟四:重新正常啓動數據庫服務
#	[root@mysql ~]#ps -aux|grep mysql		找到mysql的進程號,然後刪除即可
kill 進程號
/etc/init.d/mysqld start

步驟五:測試密碼是否重置成功
mysql -uroot -p666666

2)數據庫服務用户管理

1.創建用户信息############################################################################################
create user 用户名@'白名單' identified by '密碼信息';
#	白名單是什麼:定義可以連接數據庫服務的客户端信息
- 可以定義本地連接用户
create user xiaoA@'localhost' identified by '123456';
create user xiaoA@'10.0.0.51' identified by '123456';
create user xiaoA@'127.0.0.1' identified by '123456';
xiaoA用户只能在數據庫服務系統中,本地登錄
- 可以定義遠程連接用户
create user xiaoB@'10.0.0.52' identified by '123456';	定義只能在52服務器上連接的遠程用户
create user xiaoB@'10.0.0.%' identified by '123456';    -- 10.0.0.1-10.0.0.254
create user xiaoB@'10.0.%' identified by '123456';      -- 10.0.0.1-10.0.255.254
create user xiaoB@'10.%' identified by '123456';        -- 10.0.0.1-10.255.255.254
create user xiaoB@'%'  identified by '123456';          -- 任意主機都可以遠程連接

2.查看用户信息############################################################################################
#	查詢當前登錄用户信息,以什麼用户身份登錄到數據庫中
mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+


#	查看所有用户
mysql> select * from mysql.user;
#	顯示的很亂

mysql> select * from mysql.user\G;
-- 查看數據庫中所有用户信息(管理員完成)等價於執行命令: cat /etc/passwd
user用户表顯示信息説明
user: 表示用户名稱
host:表示用户白名單信息
plugin: 表示密碼加密方式
     caching_sha2_password --最新密碼加密方式,加密信息更安全
     mysql_native_password --早期密碼加密方式,加密信息容易破解,網站可以破解“cmd5破解”
_priv:表示用户權限


查看所有用户⭐
mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| xiaoB            | 10.%      |
| jdyB             | 10.0.%    |
| jdy              | localhost |
| jdyA             | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| xiaoA            | localhost |
+------------------+-----------+
9 rows in set (0.00 sec)


查看密文(哈希值)
mysql> select user,host,authentication_string from mysql.user;
+------------------+-----------+------------------------------------------------------------------------+
| user             | host      | authentication_string                                                  |
+------------------+-----------+------------------------------------------------------------------------+
| xiaoB            | 10.%      | $A$005$_"GP2Y
;CJ>s\BtuF0Q8GvUGvVNcBDj6pIyWrlRShZdGOO0te4svoqFjn. |
| jdyB             | 10.0.%    | $A$005$yauzJDHeIzGd
                                                    zFLSzOFdUQcLjSFCK7k9VX07IsFq04cs.1JjxsOduOzMB.2 |
| jdy              | localhost | $A$005$aS
9EtlHeJSfAPdJczKJ/ohVIhrldgp8UfKjiPwqGibkY7 |]DIyDYFu'OQ
| jdyA             | localhost | $A$005$"r{Cmu 
0natE[AWX8xi8XdLie5foRDPOtcWfGe7ImWWGkq2AejtZFz37e. |
| mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.session    | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.sys        | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| root             | localhost | $A$005$6gY~H:Ms:o#o|jz47ys6//u73wG2.V5Dtz/IDS4bxSoHMmrhiWzjGzrPa9 |
HdPM_@</8WieAgD4pJ.s46jRRNr7dU2Q1zu/JApQaG7Y3R5jU7GK/ |
+------------------+-----------+------------------------------------------------------------------------+
9 rows in set (0.00 sec)


3.刪除用户信息############################################################################################
drop user xiaoB@'10.0.0.52';
-- 單獨某個用户信息做刪除
delete from mysql.user where user='xiaoB';
-- 實現批量用户信息做刪除

3)數據庫服務權限管理

show privileges;
-- 顯示數據庫所有權限信息
MySQL數據庫常用權限信息
Alter        -- 可以修改數據表信息
Create       -- 可以創建數據庫和數據表
Create view  -- 可以具有創建數據視圖能力 ???(連表查詢數據)
Create user  -- 創建數據庫新用户能力   
Delete       -- 刪除表中數據權限(業務用户需要的權限)
Drop         -- 刪除庫表或視圖權限
Grant option -- 具有給其他用户做授權的權限(只能授權自己有的權限)⭐
Index        -- 可以創建或刪除索引權限
Insert       -- 插入表中數據權限(業務用户需要的權限)
Select       -- 查看錶中數據權限(業務用户需要的權限)
Update       -- 修改表中數據權限(業務用户需要的權限)
USAGE        -- 只具有登錄數據庫權限⭐


1.設置用户權限
格式:
grant 權限信息01,權限信息02,權限信息03 on 對象信息(庫.表) to 用户名@'白名單';
grant all on 對象信息(庫.表) to 用户名@'白名單';
grant all privileges on 對象信息(庫.表) to 用户名@'白名單';
#	授予者只能授予自己已經擁有、且帶有 GRANT OPTION 屬性的權限。
#		1.管理員通常擁有所有權限,所以可以隨意分配;
#		2.普通用户只能在自己已擁有權限範圍內,且被明確允許轉授(GRANT OPTION)的情況下,才能分配權限給其他用户。

練習操作:
01 設置xiaoA用户具有創建庫表&創建用户&授權權限&刪除表中數據權限    用户管理對象:所有庫所有表
grant Create,Create user,Grant option,Delete on *.* to xiaoA@'localhost';
02 設置jdyA用户具有修改表權限&創建索引&授權權限&刪除庫中數據權限    用户管理對象:oldboy庫中所有表
grant Update,Index,Grant option,Drop on oldboy.* to jdyA@'localhost';
03 設置jdyB用户具有具有創建庫表&創建用户&授權權限&刪除表中數據權限  用户管理對象:oldboy庫中t1表
mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| jdyB             | 10.0.%    |
| jdyA             | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| xiaoA            | localhost |
+------------------+-----------+
7 rows in set (0.00 sec)

mysql> grant Create,Create user,Grant option,Delete on oldboy.ti to jdyB@'10.0.%';
ERROR 1144 (42000): Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used
這個報錯的核心原因是:你試圖在“表級別”授予一個“全局級別”的權限。
你需要將命令拆分為兩條:
全局權限(如 CREATE USER):使用 ON *.*。
表級權限(如 CREATE, DELETE):使用 ON oldboy.ti。
mysql> GRANT CREATE USER ON *.* TO 'jdyB'@'10.0.%';
Query OK, 0 rows affected (0.00 sec)
mysql> grant Create,Grant option,Delete on oldboy.ti to jdyB@'10.0.%';
Query OK, 0 rows affected (0.00 sec)








在數據庫中創建一個數據表:
mysql> use oldboy;
Database changed
mysql> create table ti (id int);
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+------------------+
| Tables_in_oldboy |
+------------------+
| ti               |
+------------------+
1 row in set (0.00 sec)

mysql> desc ti;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | YES  |     | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)







2.查看用户權限
利用語句命令獲取用户權限
mysql> show grants for xiaoA@'localhost';
+-----------------------------------------------------------------------------------------------------------+
| Grants for xiaoA@localhost                                                                                |
+-----------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, CREATE USER ON *.* TO `xiaoA`@`localhost` WITH GRANT OPTION |
+-----------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


利用授權表獲取用户權限
user         -- 記錄用户全局權限信息
db           -- 記錄用户庫權限信息
tables_priv  -- 記錄用户表權限信息

create user test01@'%';
grant select,update,delete,insert on *.* to test01@'%';
效果:test01 可以在任何數據庫中執行增刪改查。這是最高級別的業務權限(不含管理員權限如創建用户等)。

create user test02@'%';
grant select,update,delete on oldboy.* to test02@'%';
效果:test02 只能在 oldboy 庫裏增刪改查。如果他嘗試訪問 test 庫,會被拒絕。

create user test03@'%';
grant select,update on oldboy.t1 to test03@'%';
效果:test03 只能操作 t1 表。如果 oldboy 庫裏還有 t2 表,test03 是無法訪問的。


3.撤銷用户權限
格式:
revoke 權限01,權限02,權限03 on 對象信息(庫.表) from '用户名'@'白名單';

例子1:
mysql> show grants for xiaoA@'localhost';
+-----------------------------------------------------------------------------------------------------------+
| Grants for xiaoA@localhost                                                                                |
+-----------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, CREATE USER ON *.* TO `xiaoA`@`localhost` WITH GRANT OPTION |
+-----------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> revoke UPDATE,DELETE,CREATE ON *.* from 'xiaoA'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for xiaoA@'localhost';
+-----------------------------------------------------------------------------------+
| Grants for xiaoA@localhost                                                        |
+-----------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, CREATE USER ON *.* TO `xiaoA`@`localhost` WITH GRANT OPTION |
+-----------------------------------------------------------------------------------+
1 row in set (0.00 sec)




例子2;
mysql> show grants for jdyB@'10.0.%';
+----------------------------------------------------------------------------+
| Grants for jdyB@10.0.%                                                     |
+----------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `jdyB`@`10.0.%`                                      |
| GRANT DELETE, CREATE ON `oldboy`.`ti` TO `jdyB`@`10.0.%` WITH GRANT OPTION |
+----------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> revoke CREATE,DELETE on oldboy.ti from 'jdyB'@'10.0.%';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for jdyB@'10.0.%';
+-------------------------------------------------------------------+
| Grants for jdyB@10.0.%                                            |
+-------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `jdyB`@`10.0.%`                             |
| GRANT USAGE ON `oldboy`.`ti` TO `jdyB`@`10.0.%` WITH GRANT OPTION |
+-------------------------------------------------------------------+
2 rows in set (0.00 sec)

課程知識總結梳理
01 數據庫服務安裝部署
二進制包數據庫程序安裝
步驟一:操作系統環境準備
步驟二:下載解壓程序軟件
步驟三:數據庫初始化過程
mysqld --initialize-insecure
步驟四:編寫數據庫配置文件
cat /etc/my.cnf 
步驟五:啓動數據庫服務程序
利用腳本方式啓動數據庫

02 數據庫服務基礎管理
1)數據庫密碼管理(設置/修改/重置)
2)數據庫用户管理(創建/查看/刪除)
3)數據庫權限管理(授權/查看/撤銷/數據庫常用權限作用)



# 其他內容

## 添加環境變量

```sh
添加環境變量,以便使用命令⭐(如何添加一個命令到系統)

[root@mysql bin]#pwd
/usr/local/mysql/bin

[root@mysql bin]#mysql
-bash: mysql: command not found

[root@mysql bin]#vim /etc/profile

[root@mysql bin]#cat /etc/profile|tail -1
export PATH="$PATH:/usr/local/mysql/bin"

[root@mysql bin]#source /etc/profile	#	重新加載資源

[root@mysql bin]#mysql -V
mysql  Ver 8.0.36 for Linux on x86_64 (MySQL Community Server - GPL)

數據庫命令總結

密碼相關

1.設置密碼(無密碼情況下):mysqladmin -u用户名稱 password '設置的密碼'

2.修改密碼:
方式1:
#	有密碼情況下,命令行中直接修改,可以指定任何用户
mysqladmin -u用户名稱 p原密碼 password '新密碼		
方式2:
#	用原有密碼登錄到數據庫中修改,可以指定任何用户
mysql -uroot -p原密碼	#	登錄到數據庫中
ALTER USER root@'localhost' identified by '新密碼';

3.重置密碼
步驟一:停止數據庫服務
/etc/init.d/mysqld stop
步驟二:採用免密方式登錄/啓動數據庫
mysqld --skip-grant-tables & 
#	--skip-grant-tables 在啓動數據庫時,不加載授權表(做用户驗證)
步驟三:以免密方式進入數據庫中重置密碼
mysql		#	免密進入數據庫
flush privileges;	#	重新加載授權表信息
ALTER USER root@'localhost' identified by '666666';	#	等價修改授權表中root用户密碼
步驟四:重新正常啓動數據庫服務
#	[root@mysql ~]#ps -aux|grep mysql		找到mysql的進程號,然後刪除即可
kill 進程號
/etc/init.d/mysqld start
步驟五:測試密碼是否重置成功
mysql -uroot -p666666

用户相關

1.創建用户信息############################################################################################
create user 用户名@'白名單' identified by '密碼信息';
#	白名單是什麼:定義可以連接數據庫服務的客户端信息
- 可以定義本地連接用户
create user xiaoA@'localhost' identified by '123456';
create user xiaoA@'10.0.0.51' identified by '123456';
create user xiaoA@'127.0.0.1' identified by '123456';
xiaoA用户只能在數據庫服務系統中,本地登錄
- 可以定義遠程連接用户
create user xiaoB@'10.0.0.52' identified by '123456';	定義只能在52服務器上連接的遠程用户
create user xiaoB@'10.0.0.%' identified by '123456';    -- 10.0.0.1-10.0.0.254
create user xiaoB@'10.0.%' identified by '123456';      -- 10.0.0.1-10.0.255.254
create user xiaoB@'10.%' identified by '123456';        -- 10.0.0.1-10.255.255.254
create user xiaoB@'%'  identified by '123456';          -- 任意主機都可以遠程連接

2.查看用户信息############################################################################################
#	查詢當前登錄用户信息,以什麼用户身份登錄到數據庫中
select user();
#	查看所有用户⭐
select user,host from mysql.user;

3.刪除用户信息############################################################################################
drop user xiaoB@'10.0.0.52';
-- 單獨某個用户信息做刪除
delete from mysql.user where user='xiaoB';
-- 實現批量用户信息做刪除

權限相關

show privileges;		-- 顯示數據庫所有權限信息
Alter        -- 可以修改數據表信息
Create       -- 可以創建數據庫和數據表
Create view  -- 可以具有創建數據視圖能力 ???(連表查詢數據)
Create user  -- 創建數據庫新用户能力   
Delete       -- 刪除表中數據權限(業務用户需要的權限)
Drop         -- 刪除庫表或視圖權限
Grant option -- 具有給其他用户做授權的權限(只能授權自己有的權限)⭐
Index        -- 可以創建或刪除索引權限
Insert       -- 插入表中數據權限(業務用户需要的權限)
Select       -- 查看錶中數據權限(業務用户需要的權限)
Update       -- 修改表中數據權限(業務用户需要的權限)
USAGE        -- 只具有登錄數據庫權限⭐

1.設置用户權限
格式:
grant 權限信息01,權限信息02,權限信息03 on 對象信息(庫.表) to 用户名@'白名單';

01 設置xiaoA用户具有創建庫表&創建用户&授權權限&刪除表中數據權限    		用户管理對象:所有庫所有表
grant Create,Create user,Grant option,Delete on *.* to xiaoA@'localhost';
02 設置jdyA用户具有修改表權限&創建索引&授權權限&刪除庫中數據權限    		用户管理對象:oldboy庫中所有表
grant Update,Index,Grant option,Drop on oldboy.* to jdyA@'localhost';
03 設置jdyB用户具有具有創建庫表&創建用户&授權權限&刪除表中數據權限  		用户管理對象:oldboy庫中t1表
mysql> GRANT CREATE USER ON *.* TO 'jdyB'@'10.0.%';
Query OK, 0 rows affected (0.00 sec)
mysql> grant Create,Grant option,Delete on oldboy.ti to jdyB@'10.0.%';
Query OK, 0 rows affected (0.00 sec)


在數據庫中創建一個數據表:
mysql> use oldboy;
Database changed
mysql> create table ti (id int);
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+------------------+
| Tables_in_oldboy |
+------------------+
| ti               |
+------------------+
1 row in set (0.00 sec)

mysql> desc ti;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | YES  |     | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)


2.查看用户權限
利用語句命令獲取用户權限
show grants for xiaoA@'localhost';


利用授權表獲取用户權限
user         -- 記錄用户全局權限信息
db           -- 記錄用户庫權限信息
tables_priv  -- 記錄用户表權限信息

create user test01@'%';
grant select,update,delete,insert on *.* to test01@'%';
效果:test01 可以在任何數據庫中執行增刪改查。這是最高級別的業務權限(不含管理員權限如創建用户等)。

create user test02@'%';
grant select,update,delete on oldboy.* to test02@'%';
效果:test02 只能在 oldboy 庫裏增刪改查。如果他嘗試訪問 test 庫,會被拒絕。

create user test03@'%';
grant select,update on oldboy.t1 to test03@'%';
效果:test03 只能操作 t1 表。如果 oldboy 庫裏還有 t2 表,test03 是無法訪問的。


3.撤銷用户權限
格式:
revoke 權限01,權限02,權限03 on 對象信息(庫.表) from '用户名'@'白名單';

revoke UPDATE,DELETE,CREATE ON *.* from 'xiaoA'@'localhost';
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.