一、mariadb安裝
1、配置mariadb源:
[root@ren7 ~]# vim /etc/yum.repos.d/mariadb.repo
[mariadb] name = MariaDB baseurl = http://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64/ gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=1
2、yum安裝(下載時該大寫的必須大寫):
[root@ren7 ~]# yum -y install MariaDB
3、安裝完成后需要重啟mariadb:
[root@ren7 ~]# systemctl restart mariadb
4、初始化數據庫(安全配置向導):
[root@ren7 ~]# mysql_secure_installation
運行mysql_secure_installation會執行幾個設置:
--為root用戶設置密碼
--刪除匿名賬號
--取消root用戶遠程登錄
--刪除test庫和對test庫的訪問權限
--刷新授權表使修改生效
5、客戶端程序:
mysql---交互式的client工具
mysqldump---備份工具,基於mysql協議向mysqld服務發起查詢請求,並將查詢的所有數據轉換成insert等寫操作語句保存在文件當中
mysqladmin---基於mysql協議管理mysqld
mysqlimport---數據導入工具
二、啟停數據庫語句
1、啟動服務
[root@ren7 ~]# systemctl start mariadb
2、關閉服務
[root@ren7 ~]# systemctl stop mariadb
3、重啟服務
[root@ren7 ~]# systemctl restart mariadb
4、mysql的重啟
[root@ren7 ~]# systemctl restart mysqld
三、連接數據庫語句
1、mysql -u root -p
表示使用root用戶(mysql的root用戶,非系統root用戶)連接到mysql數據庫,-u表示指定用戶,-u和root用戶名之間的空格可以省略,-p表示將會提示輸入密碼
2、mysql -u root -p123
表示使用root用戶連接數據庫,並且直接以明文的方式指定密碼,123為密碼,-p與密碼之間不能有空格
3、mysql -u root -D mysql -p 123
表示在連接mysql數據庫時,可以直接指定將要登錄的具體的數據庫,使用-D指定數據庫名稱
4、mysql -u root -p -S /var/lib/mysql/mysql.sock
在本地連接到mysql數據庫時,可以指定通過哪個套接字文件連接到數據庫,通過-S指定套接字位置
5、mysql -u root -p -h 192.168.1.103 -P 3306
在連接到mysql數據庫時,可以指定要連接到遠程的哪一台主機的mysql上,也可以指定端口,-h指定mysql主機,-P大寫,指定mysql服務對應的端口,連接的前提是已經授權當前客戶端的IP地址能夠連接到數據庫
6、mysql -u root -p123123 -e 'use mysql; select user,host,password from user;'
連接數據庫的同時執行對應命令,並且返回命令對應的結果,並不會進入mysql提示符
7、退出連接:
exit或者quit(\q)或者Ctrl+D
連接數據庫的常用選項:
--host=host_name, -h host_name:服務端地址;
--user=user_name, -u user_name:用戶名;
--password[=password], -p[password]:密碼
--port=port_num, -P port_num:服務端端口;
--socket=path, -S path:套接字位置;
--database=db_name, -D db_name:要進入的數據庫名稱;
--compress, -C:數據壓縮傳輸;
--execute=statement, -e statement:非交互模式執行SQL語句;
--vertical, -E:查詢結果縱向顯示;
--protocol={TCP|SOCKET|PIPE|MEMORY}
四、用戶管理語句
1、mysql的用戶賬號格式:username@host
上述格式表示username對應的用戶能夠通過哪個host登錄mysql
host:此mysql用戶能夠通過哪些客戶端主機IP登錄當前服務器上的mysql服務,對於mysql來說,host可以為主機名,也可以為IP地址,但是,mysql認為主機名和IP地址屬於不同的主機;
支持通配符,常用得通配符:
_: 表示任意單個字符
%: 表示任意長度的任意字符
例子:
root@’192.168.%.%’
2、查詢用戶
查看當前用戶:select user();
MariaDB [ren]> select mysql.user.user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| ren4 | % | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | ::1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| ren3 | 127.0.0.1 | *14B20454C89BC49370889C5B1CE9441993ADFB14 |
| ren5 | localhost | |
| ren6 | ren7 | |
| ren7 | ren7 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+------+-----------+-------------------------------------------+
8 rows in set (0.00 sec)
3、創建用戶
方法一:使用create user命令創建用戶
MariaDB [mysql]> create user 'ren6'@'%';
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> create user 'ren7'@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)
方法二:在授權數據庫的同時,如果對應的用戶不存在,那么mysql將會自動創建對應的用戶
MariaDB [ren]> grant all on ren.* to ren10@'%' identified by 'ren10';
Query OK, 0 rows affected (0.00 sec)
方法三:直接在mysql庫的user表中插入一條記錄,這種方法使用較少,且在設置了嚴格的sql-mode以后就無法使用
MariaDB [ren]> insert into mysql.user(user,host,password) values('ren11','%',password('123'));
ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
當前數據庫的sql-mode設置了嚴格檢查(如RADITIONAL)
4、刪除用戶
通常使用drop命令刪除用戶,也可以直接刪除mysql.user表中對應用戶的記錄;drop刪除的更加徹底。
方法一:使用drop user命令刪除對應用戶(用戶及用戶對應的權限都將被刪除)
MariaDB [ren]> drop user ren3@127.0.0.1;
Query OK, 0 rows affected (0.00 sec)
方法二:使用delete語句刪除mysql.user表中的用戶對應的記錄,但是使用此方法會有相關信息殘留
MariaDB [ren]> delete from mysql.user where user='ren10' and host='%';
Query OK, 1 row affected (0.00 sec)
但是,如果某些數據庫的權限已經授權給了“ren10@’%’”用戶,那么,在mysql.db表中,“ren10@’%’”用戶對應的權限將不會被刪除,當管理員想要再次創建“ren10@’%’”用戶時,則會出現出問題,如果管理員想要使用create user命令再次創建同名用戶時,可能會出現如下錯誤:
MariaDB [ren]> create user ren10@'%';
ERROR 1396 (HY000): Operation CREATE USER failed for 'ren10'@'%'
解決方案一:刪除mysql.db表中原“ren10@’%’”用戶殘留的權限數據后,使用flush privileges命令刷新,然后再次使用create user命令創建新的“ren10@’%’”用戶(也就是將原“ren10@’%’”用戶的殘留數據刪除干凈,相當於drop)
解決方案二:使用grant命令授權“ren10@’%’”用戶能夠訪問任意數據庫即可,如果授權用戶的數據庫與原來殘留的權限所對應的數據庫不是同一個庫,殘留的權限就會被新的創建的“ren10@’%’”用戶所獲得;因為新用戶和舊用戶名稱相同,所以新的“ren10@’%’”用戶會繼承被刪除同名用戶的權限。
5、重命名用戶
格式:rename user OldNAME to NewNAME;
重命名后的用戶密碼以及權限不會發生改變,只有用戶名會發生改變。
五、密碼管理語句
修改或設置mysql用戶的密碼有以下幾種方法:
方法一:管理員在系統命令行中使用mysqladmin命令設置mysql用戶的密碼。
語法格式:mysqladmin -u用戶名 -p舊密碼 password
[root@ren7 ~]# mysqladmin -uren7 -p123 password123456
方法二:set password for '用戶名'@'IP地址' = Password('新密碼')
MariaDB [(none)]> set password for ren5@'localhost'=password('123123');
Query OK, 0 rows affected (0.00 sec)
方法三:修改mysql.user表中對應用戶的password字段
命令格式:update mysql.user set password=password(‘PASSWORD’) where user=’USERNAME’
示例:
MariaDB [(none)]> update mysql.user set password=password('111111') where user='ren7';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
注意:有的版本中的password替換為了authentication_string
六、權限管理
1、授權命令
語法格式:
GRANT ALL [PRIVILEGES] ON db.tbl TO 'username'@'host' IDENTIFIED BY 'password';
其中,db表示數據庫名字,可以使用*通配符,tbl為表的名稱,可以使用*通配符。
(1)給ren5用戶添加查詢,創建,更新,刪除的權限給test03庫的grade表(在任意主機上)
grant select,create,update,delete on test03.grade to ren5@'%';
(2)給ren5賦予test03數據庫的grade表最高權限(在任意主機上)
grant all privileges on test03.grade to ren5@'%';
(3)給ren5賦予ren數據庫的所有權限,在192.168.0.0網段中(只允許ren5用戶通過該網段的地址鏈接ren數據庫)
grant all privileges on ren.* to ren5@’192.168.%.%’ identified by ‘123’
(4)將同樣的權限同時授權給多個用戶
grant select on ren.* to ren5@localhost,ren7@localhost;
(5)只對某張表的某個字段授權
grant select (name,age) on ren5@localhost;
(6)如果ren數據庫中有一張表的名稱為test,同時,ren數據庫中有一個函數也叫test,那么可以通過function關鍵字只授權給用戶test函數,而不將表的權限授予用戶
grant execute on function ren.test to ren5@’192.168.11.%’;
(7)可以使用procedure關鍵字,指明被操作的對象是存儲過程
grant execute on procedure ren.test to ren5@’localhost’;
(8)使用function關鍵字和procedure關鍵字可以對函數或者存儲過程授權,使用view關鍵字可以對視圖進行授權
(9)當一個用戶被創建時,mysql會自動授予其usage權限。usage權限只能用於登錄數據庫,不能執行其他操作
(10)如果用戶有可能會跨越不安全的網絡連接到數據庫,可以強制用戶使用ssl建立會話,命令如下:
grant usage on *.* to ‘ren5’@’192.168.11.11’ require ssl;
取消ssl連接限制:
grant usage on *.* to ‘ren5’@’192.168.11.11’ require none;
(11)如果在授權ren5用戶時,搭配了grant選項,則ren5用戶有權將已擁有的權限授予給其他用戶(一般不會使用)
grant select on ren.* to ren5@’192.168.%.%’ with grant option;
(12)管理員可以通過選項對用戶進行一些限制
max_queries_per_hour #限制用戶每小時執行的查詢語句數量;
max_updates_per_hour #限制用戶每小時執行的更新語句的數量;
max_connections_per_hour #限制用戶每小時連接數據庫的次數;
max_user_connections #限制用戶使用當前賬號同時連接服務器的連接數量;
使用flush privileges命令刷新
2、查看授權
查看授權可以從兩方面查看:1、從用戶的角度查看授權,查看權限表示查看對應用戶都能操作哪些數據庫;2、從數據庫的角度查看權限表示指定數據庫都對哪些用戶開放了哪些權限
(1)從用戶的角度查看授權的語句
語法格式:
show grants for 用戶名;
(2)從數據庫的角度查看授權:
語法格式:
select * from mysql.db where Db="你要查看的數據庫"
(3)查看自己的權限
show grants;
3、刪除授權
刪除授權/撤銷授權的常用語句:
revoke "要移除的權限" on 數據庫.表 from 用戶@host;
例子:
MariaDB [mysql]> revoke all on ren.* from ren4@'%';