[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@'%';