目录:
(一)MariaDB的基本管理
(1.1)数据库管理系统
(1.2)数据表信息维护--增删改
(1.3)数据表信息维护--查
(二)MariaDB的用户管理
(2.1)对root用户进行管理
(2.2)对普通用户管理
(三)备份及恢复策略


MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL的,包括API和命令行,使之能轻松称为MySQL的代替品。MySQL数据库项目自从被Oracle公司收购之后,从开源软件转变成了“闭源”软件,这导致IT行业中很多企业以及厂商纷纷选择使用了数据库软件后起之秀--MariaDB数据库管理系统,MariaDB数据库管理系统也因此快速占据了市场。
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第1张图片
(一)MariaDB的基本管理
(1.1)数据库管理系统
(1.1.1)数据库是指按照某些特定结构来存储数据资料的数据仓库,在当今这个大数据技术迅速崛起的时代,互联网上每天都会生成海量的数据信息,数据库技术也从最初只能存储简单的表格数据的单一集中存储模式,发展到了现如今存储海量数据的大型分布式模式。在信息化社会中,能够充分有效的管理和利用各种数据,挖掘其中的价值,是进行科学研究与决策管理的重要前提。同时,数据库技术也是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心组成部分,是进行科学研究和决策管理的重要技术手段。数据库管理系统是一种能够对数据库中存放的数据进行建立、修改、删除、查找、维护等操作的软件程序。它通过吧计算机中具体的物理数据转换成适合用户理解的抽象逻辑数据,有效的降低数据库管理的技术门槛,因此即便是从事Linux运维工作的工程师也可以对数据库进行基本的管理操作。
(1.1.2)说到数据库,我们就需要了解数据库的基本概念。第一个是“库”,库实际上就是一个文件夹,这个文件夹是单层的,里面不会再有子文件夹的,在数据库中会存在很多张表,例如公司管理系统的数据库里可能会有员工表、财务表、客户表等,每张表都是由行与列组成的二维数据表。同时还可以有多个数据库,一般情况下,我们会为一个应用创建一个库,例如公司里有博客系统、论坛系统,此时就可以使用对应的两个独立数据库。如果作为管理员在数据库中进行切换的时候,使用的是“use 库名”的方式在数据库之间进行切换。如果我们要创建一个数据表,首先需要定义表的结构,例如员工表我们需要在每一列定义员工ID号、姓名、年龄、性别、籍贯等信息,然后在每一行插入具体的员工的信息。其中每一列称为“columu”或者“字段”,每一行称为“row”或者“记录”。
(1.1.3)接下来我们在vms001主机安装mariadb数据库的服务器端,在vms002主机安装mariadb数据库的客户端
# yum install mariadb-server mariadb -y---在vms001主机进行安装,其中mariadb表示的服务器端,mariadb-server表示的是客户端
# yum install mariadb-server -y---在vms002主机安装数据库的客户端工具
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第2张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第3张图片
(1.1.4)我们发现/var/lib/mysql/此目录在mariadb服务启动之前是没有数据的,启动之后系统便会自动的产生相关的数据,因为mariadb默认的数据都是放在/var/lib/mysql目录中的(图1-4)。当我们使用mariadb的时候,有时候会因为编码的问题而导致数据显示异常,此时我们在/etc/my.cnf配置文件中设置字符编码为utf8,这样可以解决我们显示信息出现乱码的问题。
# vim /etc/my.cnf---编辑mariadb数据库的配置文件
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第4张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第5张图片
(1.1.5)我们修改完/etc/my.cnf配置文件后,将服务重启一下,此时在/var/lib/mysql目录下会重新产生新的文件。我们登录mariadb数据库后可以使用“select database();”查询当前自己登录后属于哪一个数据库,在执行命令的时候,是要以分号结束的,同时如果当前命令的首部如果加上了“#”或者“--”则代表的是注释行的意思,在尾部加上“\c”表示的是不执行当前的命令。
\> select database();---查询当前自己登录后属于哪一个数据库
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第6张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第7张图片
(1.1.6)当我们执行一些系统语句的时候就不需要再加分号的,例如执行查询数据库状态的命令status(图1-8),如果需要查询当前登录数据库所使用的用户则可以使用“select user();”,查询当前系统中所有的数据库可以使用“show databases;”(图1-9)
\> status---查询数据库状态
\> select user();---查询当前登录数据库所使用的用户
\> show databases;---查询当前系统中所有的数据库
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第8张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第9张图片
(1.1.7)我们可以自己创建一个数据库aa,并查询创建的数据库设置的各种属性(图1-10),也可以通过“alter database”的命令进行字符编码的修改等操作(图1-11)。
\> create database aa;---创建一个数据库
\> show create database aa;---查询创建数据库时设置的属性值
\> show create database aa\G---以格式化的方式查询创建数据库时设置的属性值
\> alter database aa character set gbk;---修改数据库的字符编码为GBK类型(方法一)
\> alter database aa charset utf8;---修改数据库的字符编码为utf8类型(方法二)
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第10张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第11张图片
(1.1.8)此时我们发现刚刚创建的数据库aa已经创建成功了,同时我们也可以使用drop命令将aa数据库删除(图1-12),接着我们登录aa数据库,并查询数据库中数据表的信息(图1-13)。
\> show databases;---查询当前所有数据库的信息
\> drop database aa;---将aa数据库删除掉
\> use aa;---使用aa数据库,切换到aa数据库
\> show tables;---显示当前数据库中所有数据表的信息
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第12张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第13张图片
(1.1.9)接着我们在aa数据库中创建一个数据表aa,定义id、name、city三个字段,当然我们也可以使用drop命令可以删除数据库aa中的数据表aa(图1-14)。如果想将创建的数据表aa重命名为bb,则可以使用“rename tables”(图1-15)。
\> create table aa (id int,name char(10),city char(10));---创建一个数据表aa
\> drop table aa;---删除数据表aa
\> rename tables aa to bb;---将数据表aa重命名为bb
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第14张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第15张图片
(1.1.10)如果我们想查看数据表的属性信息,则可以使用“show create table”命令(图1-16),我们还可以对数据表的字符属性信息进行修改,使用“character”,使用的方式和修改数据库的属性信息的方式一致(图1-17),如果我们想知道数据表的结构信息,则可以使用“describe”命令查询(图1-18)。
\> show create table aa;---查询数据表的属性信息
\> alter table aa character set gbk;---修改数据表aa的字符属性信息为GBK(方法一)
\> alter table aa charset=utf8;---修改数据表aa的字符属性信息为utf8(方法二)
\> describe aa;---查询数据表的结构信息
\> desc aa;---查询数据表的结构信息
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第16张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第17张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第18张图片
(1.1.11)如果我们想给aa数据表添加一列字段“addr”,则可以通过“alter table”命令操作,给aa数据表添加一个addr的字段,并且设置为varchar类型(图1-19),同时我们也是可以使用“drop”命令将aa数据表中的相关字段删除的(图1-20)。
\> alter table aa add addr varchar(20);---给aa数据表添加一列字段“addr”且设置类型为varchar
\> alter table aa drop addr;---将aa数据表中的字段addr删除
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第19张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第20张图片
(1.1.12)由于我们在数据表中添加一列字段的时候系统默认是在最后一列添加的,我们现在的需求是将添加的一列字段放在指定的位置,我们指定“first”关键字,此时我们发现添加的addr已经在数据表aa的第一列了(图1-21),通过关键字after,我们指定addr字段紧跟在name字段的后面(图1-22),如果我们对定义的字段的属性不满意,希望修改字段的属性值的时候,我们可以使用“modify”关键字,修改后我们看到addr字段的属性已经修改为varchar(30)了(图1-23);当然我们也可以使用“change addr”对字段的属性值进行修改(图1-24),其中我们也是可以对字段名进行修改的(图1-25)。
\> alter table aa add addr varchar(20) first;---我们将添加的字段addr放在第一列
\> alter table aa add addr varchar(20) after name;---我们指定addr字段在name字段后
\> alter table aa modify addr varchar(30);---将addr字段的属性修改为varchar(30)类型(方法一)
\> alter table aa change addr addr varchar(20);---将addr字段的属性修改为varchar(20)类型(方法二)
\> alter table aa change addr addrxxx varchar(20);
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第21张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第22张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第23张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第24张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第25张图片
(1.1.13)如果我们需要将创建的数据表aa删除,则可以使用drop table命令,并且数据表之间使用“,”逗号进行分隔。
\> drop table aa,bb;---使用逗号隔开,将创建的aa和bb数据表都删除
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第26张图片
(1.2)数据表信息维护--增删改
(1.2.1)我们上面所使用的create(创建)、drop(销毁)、alter(插入)等命令都是对数据表的结构进行创建、修改和删除,因此我们将其称之为DDL(Data Definition Language)数据库模式定义语言,这些操作都是针对整个数据表的属性结构的,并没有对数据表中特定的字段进行增删改查。同时对于数据表我们可以做的操作主要有insert(插入)、delete(删除)、update(修改)等操作,这些命令主要是对数据表中的字段进行增删改查,因此我们将其称之为DML(Data Manipulation Language)数据操作语言,这些操作都不会对数据表的结构产生任何的改变。
(1.2.2)我们可以使用“insert into”向数据表中插入数据(图1-27至图1-29)。
\> select * from aa;---查询aa数据表中的所有数据
\> insert into aa (id,name) values (1,'tom');---向数据表aa中创建一行数据,其中id为1,name为tom(方法一)
\> insert into aa (id) values (1);---我们向数据表中只插入一个id值(方法二)
\> insert into aa values (2,'bob');---(方法三)
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第27张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第28张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第29张图片
(1.2.3)如果我们希望创建一张和aa数据表相同的数据表,则可以使用like关键字(图1-30)。如果我们希望将aa数据表中的数据能够提取出来插入到bb数据表中,则我们可以使用图1-31的方式。当然我们也可以将创建新的数据表和复制原数据表的信息至新数据表的操作整合成一条语句(图1-32)。
\> create table bb like aa;---创建一个新的数据表bb,其中bb的结构和aa的结构一致
\> insert into bb select * from aa;---复制aa数据表中的数据插入到bb数据表中
\> create table cc select * from aa;---创建一个数据表cc并将aa数据表的信息复制到数据表cc中
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第30张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第31张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第32张图片
(1.2.4)如果我们需要往一张数据表插入多条数据,则可以使用insert关键字,且使用逗号作为分隔符。
\> insert into cc values (4,'tom4'),(5,'tom5'),(6,'tom6');---插入三条数据,使用逗号作为分隔符,可以同时插入多条数据
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第33张图片
(1.2.5)如果我们希望删除数据表中指定的某一行数据,则可以使用delete关键字,并设定指定字段的具体值(图1-34和图1-35)。如果我们需要清除数据表中所有的数据,则可以使用truncate命令(图1-36)。
\> delete from bb where name='marry';---删除名字列为marry的记录
\> delete from bb where name is null;---将数据表中所有的空行全部删除
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第34张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第35张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第36张图片
(1.2.6)接着我们来看一下更新数据表中的数据,我们可以使用update命令。
\> update bb set id=11 where name is null;---将name值为空的记录行的id修改为11
\> update bb set name='tom1' where id=11;---将id为11的记录行name值修改为tom1
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第37张图片
(1.3)数据表信息维护--查
(1.3.1)接下来我们使用select语句做日常的查询操作。其中数据查询的语言成为DQL(Data QueryLanguage )数据库查询语言。
\> select name,id from bb;---指定具体的列名进行查询,列名可以不分顺序(图1-38)
\> select * from bb;---查询所有列的信息(图1-38)
\> select * from bb where id=1;---查询id字段的值为1的所有数据(图1-39)
\> select * from bb where id>=5;---查询id字段的值大于等于5的所有数据(图1-39)
\> select * from bb where id<=5;---查询id字段的值小于等于5的所有数据(图1-39)
\> select * from bb where id>=5 and id<=11;---查询id字段大于等于5并且id字段小于等于11的所有数据(图1-40)
\> select * from bb where id<=3 or id>=6;---查询id字段小于等于3或者id大于等于6的所有数据(图1-40)
\> select * from bb where id between 5 and 11;---查询id字段大于等于5并且id字段小于等于11的所有数据(图1-41)
\> select * from bb where id in(1,3,6);---(方法一)查询id包含在1,3,6中的记录数据(图1-42)
\> select * from bb where id=1 or id=3 or id=6;---(方法二)查询id包含在1,3,6中的记录数据(图1-42)
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第38张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第39张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第40张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第41张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第42张图片
(1.3.2)接着我们来了解mariadb数据库中通配符和正则表达式的相关信息,其中“_”表示的是单个任意字符,“%”表示的是任意长度任意字符。如果我们需要查询tom字符后跟两个字符的所有记录,则可以使用两个“_”表示(图1-43),如果我们需要查询tom字符后跟一个“_”然后再跟一个任意字符时,则可以使用“\”转义符进行处理(图1-44)。
\> select * from bb where name like "tom__";---表示的是将tom后跟的两个字符的所有行全部查询出来(图1-43)
\> select * from bb where name like "tom__";---表示查询tom字符后跟一个“_”然后再跟一个任意字符(图1-44)
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第43张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第44张图片
(1.3.3)有时候我们需要修改mariadb数据库中的配置文件/etc/my.cnf,此时我们就需要使用“show variables;”来查询数据库的相关参数信息,例如我们需要查询和innodb相关的参数的所有信息,则可以使用“%”参数来处理(图1-45)。我们需要查询tom字符后跟任意个数任意字符的所有符合条件的记录,也可以使用“tom%”(图1-46),如果我们要查询包含字符编码的信息“char、ac、set、server”的所有记录,则可以使用“%char%ac%set%server%”通配符的方式进行查询(图1-47)。此时我们便可以将查询的信息填入到/etc/my.cnf配置文件中,已查询的字符编码信息“character_set_server”为例,写入到配置文件后需要修改为“character-set-server”这样的格式。
\> show variables like "%innodb%";---查询和innodb相关的参数的所有信息(图1-45)
\> select * from bb where name like "tom%";---查询tom字符后跟任意个数任意字符的所有符合条件的记录(图1-46)
\> show variables like "%innodb%data%";---查询包含“innodb%data”字符的所有记录(图1-47)
\> show variables like "%char%ac%set%server%";---查询包含字符编码的信息(图1-47)
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第45张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第46张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第47张图片
(1.3.4)如果我们希望在mariadb数据库中使用正则表达式进行查询,则应该使用regexp关键字指明使用正则表达式。
\> select * from bb where name regexp "tom..";---使用正则表达式查询tom后跟两个其他任意字符
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第48张图片
(1.3.5)接着我们了解下一个知识点“多表查询”,我们创建数据表aa和bb并插入相关的数据(图1-49),我们需要查询用户lisi的工资,则可以使用多表子查询的方式(图1-50)。
\> drop table aa,bb,cc;---删除当前所有的数据表
\> create table aa(id int,name varchar(10));---创建一个aa表示员工表
\> create table bb(id int,sale int);---创建一个bb表示工资表
\> insert into aa values (1,'tom'),(2,'bob'),(3,'marry'),(4,'lisi'),(5,'wangw');---在aa数据表中插入5条员工信息
\> insert into bb values(1,1000),(2,3000),(3,2500),(4,4000),(5,1500);---在bb数据表中插入五条工资信息
\> select * from bb where id=(select id from aa where name='lisi');---查询用户lisi的工资(图1-50)
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第49张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第50张图片
(1.3.6)我们尝试将aa表和bb表合并成一张大表来进行查询,我们通过使用表连接join的方式来进行合成大表,但是由于直接使用join的方式连接两张大表会有笛卡尔积产生很多没有意义的组合数据,所以我们还需要将无意义的组合清除掉(图1-52),同时清除笛卡尔积的方式还可以使用using关键字。
\> select aa.name, bb.sale from aa join bb where aa.id =bb.id and aa.name='lisi';---查询用户lisi的工资
\> select * from aa join bb using(id) where name='lisi';---查询用户lisi的工资
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第51张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第52张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第53张图片


(二)MariaDB的用户管理
(2.1)对root用户进行管理
(2.1.1)如果登录mariadb数据库的时候我们希望通过指定用户登录,则此时我们应该要对用户进行管理。我们使用“select user();”查询当前使用的登录用户信息(图1-54)。如果我们需要查询当前数据库中的所有账户密码信息,则应该在系统内置的数据表mysql.user中进行查询,其中第一列表示mariadb的用户名,第二列表示允许登录该用户的主机地址信息,第三列表示帐户的密码信息,一般在登录数据库时,我们应该使用“user@host”的格式登录(图1-55)。我们可以通过两种方式对登录数据库的用户设置密码信息(图1-56至图1-58)。
\> select user();---查询当前使用的登录用户信息(图1-54)
\> desc mysql.user;---查询mysql.user内置数据表的结构信息(图1-54)
\> select user,host,password from mysql.user;---查询mysql.user数据表中关于用户的信息(图1-55)
# mysqladmin -uroot -p password 'redhat'---(第一种)在命令行中设置mariadb数据库中root用户的密码,其中“-p”表示prompt提示,注意:Enter password处直接回车即可(图1-56)
\> select md5('redhat');---使用MD5的方式进行加密(图1-57)
\> select encrypt('redhat');---使用encrypt的方式进行加密(图1-57)
\> select password('redhat');---使用password的方式进行加密(图1-57)
\> set password=password('redhat');---(第二种)默认是给root用户设置密码(图1-58)
\> set password for root@localhost=password('redhat');---指定对当前主机的root用户设置密码(图1-58)
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第54张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第55张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第56张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第57张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第58张图片
(2.1.2)如果我们设置的密码信息需要进行修改,此时我们可以使用update命令进行数据库密码的修改,由于修改完成后是修改了硬盘里的密码,并没有同步到当前登录的缓存中,所以我们应该要使用flush命令刷新一下数据库的缓存,就可以使用修改后的密码登录数据库系统了。
\> update mysql.user set password=password('123123') where user='root' and host='localhost';---修改当前root用户的密码为123123
\> flush privileges;---刷新硬盘中修改的密码信息到当前的缓存中
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第59张图片
(2.1.3)登录安全模式方式一:如果我们忘记了登录mariadb数据库的密码,此时我们可以使用登录安全模式的方式登录系统,我们先将mariadb服务停止,然后编辑/etc/my.cnf配置文件,我们在/etc/my.cnf配置文件中添加一行信息(图2-2),使得登录数据库的时候可以跳过密码验证,然后再对数据库中用户的账户密码进行修改(图2-3),并将缓存刷新,服务重启,此时我们便可以使用新设置的密码登录数据库系统了(图2-5)。
# systemctl stop mariadb---将mariadb数据库服务停止
# vim /etc/my.cnf---编辑my.cnf的配置文件
# systemctl restart mariadb---将mariadb数据库服务重新启动
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第60张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第61张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第62张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第63张图片
(2.1.4)登录安全模式方式二:以上是通过修改配置文件的方式进行密码重置的,我们也可以使用第二种方式修改用户密码。我们首先将mariadb服务停止,然后使用“# mysqld_safe --skip-grant-tables”命令(图2-6),此时我们打开另一个终端使用mysql就可以实现无密码登录系统并进行相关的修改密码的操作了,但是我们还是需要执行killall命令将相关的前台程序终止(图2-7)。
# mysqld_safe --skip-grant-tables---使得数据库可以进入安全模式
# killall -9 mysqld_safe---将运行的mysqld程序杀死
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第64张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第65张图片
(2.2)对普通用户管理
(2.2.1)接着我们来看一下对普通用户做管理,我们创建一个tom用户,此时创建的用户是可以在任何的主机上登录的(图2-8),并且给创建的tom用户设置好对应的密码(图2-9),并将防火墙设置允许通过mysql(图2-10)。
报错信息:ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement
\> show grants for tom;---查询tom用户拥有哪些权限(图2-9)
\> set password for tom@'%'=password('redhat');---给tom用户设置密码redhat(图2-9)
# firewall-cmd --add-service=mysql---设置防火墙允许通过mysql(图2-10)
# firewall-cmd --add-service=mysql --permanent---将设置写入持久态(图2-10)
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第66张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第67张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第68张图片
(2.2.2)接着我们从vms002主机上使用创建的tom用户尝试登录vms001主机的mariadb数据库,发现vms002主机可以正常的登录数据库,但是没有显示aa数据库,因此没有查询所创建的aa数据库的权限(图2-11)。因此我们在创建tom用户的时候需要指明能够登录的主机(图2-12),我们在删除tom用户的时候也是需要将主机名写清楚的。(图2-13)
# mysql -utom -predhat -hvms001---在vms002主机上尝试使用tom用户登录vms001主机的mariadb数据库(图2-11)
\> show databases;---查询当前用户可以查询的所有数据库信息(图2-11)
\> drop user tom;---删除创建的tom用户(图2-12)
\> drop user tom@'localhost';---删除tom用户的时候也是需要将主机名写清楚的
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第69张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第70张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第71张图片
(2.2.3)以上创建用户的方式一般我们不建议使用,一般来说使用grant命令来创建用户效果会更好(图2-14)。我们创建一个tom用户,允许在vms002主机上登录,且允许使用所有数据表的权限(图2-16),此时我们发现vms002主机使用tom账户便可以正常的登录vms001主机了(图2-17),但是我们发现此时在vms002主机上登录的tom用户除了有select查询系统的相关权限,没有其他任何删除、修改、插入数据的权限(图2-18)。
\> grant select on aa.* to tom@'192.168.26.102' identified by 'redhat';---创建一个tom用户,允许在vms002主机上登录,且允许查询所有数据表的权限
# mysql -utom -predhat -hvms001---在vms002主机上尝试使用tom用户登录vms001主机的mariadb数据库
\> show grants for [email protected];---查询tom用户所有数据表的使用权限
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第72张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第73张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第74张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第75张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第76张图片
(2.2.4)接着我们在vms001主机上尝试为tom用户在vms002主机上授权使用insert的权限(图2-19),此时我们发现在vms002主机上已经可以使用tom用户正常的插入新的数据了(图2-20)。
\> grant insert on aa.* to tom@'192.168.26.102';---为tom用户在vms002主机上授权使用insert的权限
\> show grants for tom@'192.168.26.102';---查询tom用户所有数据表的使用权限
\> insert into aa values(1,'tomxxx');---向aa数据表插入一条数据
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第77张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第78张图片
(2.2.5)接着我们为tom用户设置拥有使用create、drop的权限,然后我们将tom用户drop权限收回,我们使用revoke命令,此时我们发现tom用户便没有了drop权限。
\> grant create,drop on aa.* to tom@'192.168.26.102';---为tom用户设置拥有使用create、drop的权限
\> revoke drop on aa.* from tom@'192.168.26.102';---回收tom用户所拥有的drop权限
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第79张图片
(2.2.6)如果我们希望设置root用户在192.168.26.0网段中都可以登录且使用所有的权限,则我们可以使用“all privileges”,并且使用“192.168.26.%”表示网段进行设置。此时我们使用192.168.26.0网段中的任意IP地址的主机都可以登录到vms001主机mariadb数据库的root用户中使用所有数据库权限。
\> drop user tom@'192.168.26.102';
\> grant all privileges on *.* to root@'192.168.26.%' identified by 'redhat';---设置root用户在192.168.26.0网段中都可以登录且使用所有的权限
\> select user,host,password from mysql.user;
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第80张图片


(三)备份及恢复策略
(3.1)因为数据库中保存了企业的很多重要经营数据,所以数据库的备份和恢复是非常重要的,有时候在人为的操作中难免会发生各种突发的情况,造成数据的破坏和丢失,如果我们无法对数据进行恢复的话,将是后果非常严重的事情,所以此时我们对数据进行定时定量的备份是非常重要的操作规范。
(3.2)一般我们的备份包含两类:第一种是冷备份,也称脱机备份,在备份的时候必须要把数据库关闭,然后把/var/lib/mysql里的所有数据拷贝至其他物理设备中,例如将LVM挂载到/var/lib/mysql进行备份。第二种是热备份,也称联机备份,也就是在备份的时候不需要关闭数据库而在线操作。
(3.3)mariadb自身是没有增量备份的,如果要实现增量备份的话,就需要使用第三方的工具,Mysqlimport是用来导入文件的,ibbackup属于商业工具,innodb属于官方的工具,Xtrabackup只能备份innodb,其中XtraBackup的下载网址为:http://www.percona.com/downloads/XtraBackup/ ,我们主要是使用mysqldump工具。
(3.4)有时候我们为了能够执行脚本,需要做到不登录数据库并将所需的数据获取出来,此时我们可以使用“-e”参数,这样以后我们便可以将命令写入到脚本中自动化执行,获取相应的数据,从而提高工作效率。
# mysql -uroot -predhat -e 'show databases;'
# mysql -uroot -predhat -e 'use aa;show tables;'
# mysql -uroot -predhat -e 'use aa;select * from aa;'
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第81张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第82张图片
(3.5)对数据表进行备份---tables
(3.5.1)接着我们来使用mysqldump做备份,我们首先创建一个/bak目录,然后将aa数据库的aa数据表导入到/bak目录下的a.sql文件中(图3-3),我们查看a.sql文件发现其中都是重新创建数据表、插入各项数据信息的各种语句,其中非注释行“DROP TABLE IF EXISTS aa;”表示的是删除aa数据表,关键字“IF EXISTS”表示如果aa存在则删除,如果不存在就不用管,这样我们就备份好了aa数据表了。
# mysqldump -uroot -predhat aa aa > /bak/a.sql---创建一个/bak目录,然后将aa数据库的aa数据表导入到/bak目录下的a.sql文件中
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第83张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第84张图片
(3.5.2)由于我们备份的是一个数据表,但是在备份的a.sql文件中并没有指明是在哪个数据库中操作的,我们将aa数据表删除后进行数据表恢复的操作时,需要先进入到对应的数据库,然后再进行执行恢复脚本的操作(图3-6和图3-7)。我们也是可以对多张数据表进行备份的,例如将aa数据库中的aa和bb数据表进行备份,写入到ab.sql文件中(图3-8和图3-9),在aa数据库中执行/bak/ab.sql恢复脚本,此时我们发现aa和bb数据表便已经恢复正常了(图3-10和图3-11)。
# mysql -uroot -predhat---登录数据库
\> source /bak/a.sql;---进入到aa数据库后指明恢复/bak目录下的a.sql脚本
# mysqldump -uroot -predhat aa aa bb > /bak/ab.sql---同时备份aa数据库中的aa表和bb表
\> drop table aa,bb;---将aa数据库中的aa表和bb表删除
\> source /bak/ab.sql---执行恢复aa和bb数据表的脚本
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第85张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第86张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第87张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第88张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第89张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第90张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第91张图片
(3.5.3)有时候我们的一个数据库中有很多张表,我们想备份这个库中所有的数据表,而不是单独指定某些张表,我们直接写库名即可,而不用写表名(图3-12)。然后我们使用备份的脚本all.sql进行数据表的恢复(图3-13),我们发现数据表aa和数据表bb都已经恢复正常了(图3-14)。
# mysqldump -uroot -predhat aa > /bak/all.sql---将aa数据库中的所有表全部进行备份
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第92张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第93张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第94张图片
(3.6)对数据库进行备份---databases
(3.6.1)如果现在我们希望对一个数据库进行备份,则我们应该使用“-B”参数指明是对aa数据库进行备份(图3-15),此时我们发现在备份的脚本中产生了创建数据库的语句,这是和之前进行数据表备份的不同之处(图3-16)。
# mysqldump -uroot -predhat -B aa > /bak/dball.sql---使用“-B”参数指明是对aa数据库进行备份
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第95张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第96张图片
(3.6.2)此时我们可以将数据库删除掉,然后使用备份的dball.sql文件进行数据库的恢复(图3-17),此时我们发现aa数据库已经恢复了,并且数据库中的数据表信息也都是正常恢复的(图3-18和图3-19)。
\> drop database aa;---删除aa数据库
\> show databases;---显示当前系统中所有的数据库
\> source /bak/dball.sql---使用备份的dball.sql文件进行数据库的恢复
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第97张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第98张图片
【一点一滴,成材之基!】顶级开源数据库MariaDB操作实战_第99张图片

—————— 本文至此结束,感谢阅读 ——————