mariadb数据库简介

自甲骨文公司收购MySQL后,其在商业数据库与开源数据库领域市场的占有份额都跃居第一,这样的格局引起了业内很多的人士的担忧,因为商业数据库的老大有可能将MySQL闭源。为了避免Oracle将MySQL闭源,而无开源的类MySQL数据库可用,MySQL社区采用分支的方式来避开这个风险。MariaDB数据库就这样诞生了,MariaDB是一个向后兼容,可能在以后替代MySQL的数据库产品,其官方地址为:https://mariadb.org/ 。mariadb和mysql几乎是一样的。首先,mariadb就是由mysql的创始人负责维护的。而mariadb就是mysql创始人女儿的名字。使用方法和mysql相同

mariadb与mysql的区别:

1.MariaDB不仅仅是Mysql的一个替代品,MariaDB包括的一些新特性使它优于MySQL

2.MariaDB跟MySQL在绝大多数方面是兼容的,对于开发者来说,几乎感觉不到任何不同。目前MariaDB是发展最快的MySQL分支版本,新版本发布速度已经超过了Oracle官方的MySQL版本。

3.MariaDB 是一个采用Aria存储引擎的MySQL分支版本, 这个项目的更多的代码都改编于 MySQL 6.0

MariaDB虽然被视为MySQL数据库的替代品,但它在扩展功能、存储引擎以及一些新的功能改进方面都强过MySQL。而且从MySQL迁移到MariaDB也是非常简单的:

1、数据和表定义文件(.frm)是二进制兼容的
2、所有客户端API、协议和结构都是完全一致的
3、所有文件名、二进制、路径、端口等都是一致的
4、所有的MySQL连接器,比如PHP、Perl、Python、Java、.NET、MyODBC、Ruby以及MySQL C connector等在MariaDB中都保持不变
5、mysql-client包在MariaDB服务器中也能够正常运行
6、共享的客户端库与MySQL也是二进制兼容的

安装mariadb 数据库

apt install mariadb-server mariadb-client #安装mariadb 服务端程序
systemctl restart mariadb.service #启动程序
systemctl enable mariadb.service #设为开机自启动
ss -nltp |grep 3306 #mysql 服务默认的端口号是tcp 3306

MariaDB 高级应用介绍

(这里只是介绍没有做对应的实验)
Mariadb 高级应用范例如
主从复制
读写分离
数据分片
集群应用
…

数据库分片指:
通过某种特定的条件,将我们存放在一个数据库中的数据分散存放在不同的多个数据库(主机)中,这样来达到分散单台设备的负载,根据切片规则,可分为以下两种切片模式

MariaDB 基础应用

Mariadb 数据库连接方式及初始化
1、连接数据库
Mysql 命令行工具是MySQL 官方提供的连接工具,用户可以通过mysql 连接到mysqld 上进行一系列的SQL 操作。

mysql 工具有两种模式:交互模式和命令行模式。交互模式指令需要连接到mysql 服务器下达,命令行模式通过特定(-e)参数读取shell 命令行传递的指令到服务器。

命令格式:
mysql [OPTIONS] [database]

-h, --help 显示帮助信息
-e, --execute=name 执行指定命令,命令行模式
-u, --user=name 指定连接的用户
-h, --host=name 指定主机名
-p, --password 指定密码
-P, --port 指定端口

连接数据库示例:
(1)使用root 账号连接服务器,无密码登录

mysql -u root

(2)使用root 账号连接服务器,使用密码登录,-h 指定登陆主机的IP 或名字,注意未指定-h 选项时,默认登陆本机的数据库

mysql -u root -p'passwd' -h <ip>

一些常用的查询命令示例:

select database(); #查看当前进入的数据库
select user(); #查看当前登录用户
show databases; #查看数据库
use mysql #进入mysql 数据库
show tables; #查看此数据库的表,test 没表,可以看其他数据库的
desc user; #查看表结果
show variables like 'innodb%'; #查看环境变量
有时命令输错停在>界面出不来,一般是少些了'或者;补全即可退出,实在不行可以CTRL+D
在重新登录

2、重新初始化mysql
Mariadb 在安装完毕后,就自动初始化好了基础的数据库,目录位于:/var/lib/mysql
Mysql 的配置文件:/etc/mariadb.cnf,为兼容mysql, 原来的配置文件my.cnf 是它的一个软链接

我们也可以通过命令mysql_secure_installation,重新初始化mysql:

mysql_secure_installation
Enter current password for root (enter for none): #输入当前root 的密码,密码为空直接回车
即可
Change the root password? [Y/n] #是否修改root 的密码
Remove anonymous users? [Y/n] #是否删除匿名用户
Disallow root login remotely? [Y/n] #是否不允许root 远程登录
Remove test database and access to it? [Y/n] #是否删除测试数据库test
Reload privilege tables now? [Y/n] #是否重新加载授权信息

3、重启

systemctl restart mariadb

Mariadb 数据库权限管理

1、权限设置中,登陆位置的配置说明

mariadb 的用户登录限制包括用户名和登录位置两部分。早期版本%就可以代表所有的连接,后期版本localhost 表示本地登录,%表示tcp/ip 的远程登录的所有ip。%也可以写具体主机或网段,比如192.168.200.10、192.168.100.%或者192.168.200.0/255.255.255.0,其他格式不识别。

如果登录主机符合多个连接条件,默认连接第一个身份,设置权限的时候需要注意

2、建立新用户、设定密码与登陆位置示例:

在mysql 的命令行状态下:

select user(); #查看当前登录用户
use mysql
select host,user,password from user; #查看数据库所有登录范围、用户和密码,4 个root 不是同一个用户,可以单独设置密码
create user uos@'localhost' identified by '123456'; #建立可以本地登录的用户uos 并设置密码123456
create user uos@'%' identified by '123456'; #建立可以远程登录的用户uos并设置密码123456
create user test@'localhost' identified by '123456'; #建立可以本地登录的用户test并设置密码123456
create user test@'192.168.200.10' identified by '123456'; #建立可以从192.168.200.10 主机登录的用户test 并设置密码123456
grant all on *.* to uos@'localhost'; #授权本地登录的用户uos 对所有数据库的所有表有所有权限
grant select on scott.* to test@'localhost'; #授权本地登录的用户test 可以读取scott 数据库的所有表
grant all on *.* to uostest@'%' identified by '123456'; #可以建立用户、授权、设置密码一起做
flush privileges; #刷新授权表
show privileges; #查看所有权限
show grants for uos@'localhost'; #查看用户权限
show grants for test@'localhost';
revoke select on scott.* from test@'192.168.200.10'; #收回权限

3、修改新密码(需输入root 原始密码)

(1)使用mysqladmin 修改

mysqladmin -u root -p password '123456'

(2)或进入数据库,在mysql 命令行中修改

mysql -uroot -p
set password=password('uos'); #对当前用户设置密码,立刻生效
set password for uos@'localhost'=password('123456'); #对任意用户设置密码
use mysql #使用mysql 这个内置数据库
update user set password=password('uos') where user='root' and host='localhost'; #修改密码后需要flush privileges;刷新权限表,或重启服务

4、mariadb 忘记root 密码怎么办?

vim /etc/mysql/mariadb.conf.d/50-server.cnf[mysqld]
skip-grant-tables #在[mysqld]下添加此字段,进入但用户模式

重启服务

systemctl restart mariadb.service

输入mysql 命令无需密码直接进入数据库

use mysql
update user set password=password('uos') where user='root';

从5.5.7 版本中mysql 数据库中就开始引入plugin 这项配置,用来进行用户密码验证

update user set plugin='' where user='root';

停止mariadb 服务,删除配置文件的skip-grant-tables 选项,重启mariadb 服务,使用新密码进入

数据库字符集修改

查看Linux 的字符集用locale 命令
注:客户端的字符集要和数据库的字符集一致,不一致有可能乱码

进入mysql 命令行,status 查看mariadb 属性

status
Server characterset:utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
设置mariadb server 的默认字符集:

设置mariadb server 的默认字符集:

vim /etc/mysql/mariadb.conf.d/50-server.cnf

character-set-server = utf8
#collation-server = utf8

重启mariadb

systemctl restart mariadb.service

再验证字符集
mysql -uroot -p

MariaDB [(none)]> status #重启后变更为新字符集
Server characterset:utf8

查看数据库的字符集

create database scott;
drop database scott; #删除数据库
source /scott.sql #使用脚本重建数据库
show create database scott; #在更改字符集之后建立,所以是字符集是utf8
show create table emp;

更改scott 数据库和表的字符集

alter database scott charset utf8;
alter table emp charset utf8;

数据库DDL,DML 和DCL 语言操作

SQL 语言可以理解成向服务端提问的语言,SQL 语言按照功能可以分为几种子语言:

  • 数据定义语言(DDL):创建和管理数据库,包括创建修改表,定义索引,管理约束条 件。DDL 操作对象为数据库内部的对象。
  • 数据操纵语言(DML):查询和更新数据库中的数据,用于添加,删除,更新,查询。 DML的操作对象是表的内部数据。而不会涉及到表的定义,结构的修改。
  • 数据控制语言(DCL):对用户的权限控制

「1」建立scott 数据库快速建立脚本
SCOTT 是数据库内部的一个示例用户,缺省口令为tiger,下面有表emp, dept 等,这些表和表间的关系演示了关系型数据库的一些基本原理
vim /scott.sql
这里省略了表格。

调用sql 脚本
mysql -uroot -psystem ls -l /root
source /scott.sql

「2」查数据

select * from emp;
select ename,sal from emp;
select ename,(sal+200)*3 as bonus from emp; #支持算数表达式加减乘数和括号等
select ename,sal,comm,sal+ifnull(comm,0) as income from emp; #空值参与算术运算为空值,建议用ifnull 函数转换
select distinct deptno from emp; #用distinct 去除重复结果
select ename,sal,deptno from emp where deptno=30;
select * from emp where ename like '___TT'; #_代表任意单个字符
select * from emp where ename like '%LL%'; #%代表任意字符
select ename,sal,deptno from emp where deptno=30 and sal>2000; #与
select ename,sal,deptno from emp where deptno=30 or sal>2000; #或
select ename,sal,deptno from emp where not sal>2000; #非
select * from emp order by sal; #默认升序,降序加desc
select empno,ename,sal,deptno from emp order by deptno,sal desc; #多列排序
select concat(ename,'\'s sal is ',sal) from emp; #支持多种函数,不一一举了
select count(*) from emp;
select deptno,sum(sal),min(sal),max(sal),avg(sal) from emp group by deptno;
select deptno,avg(sal) from emp group by deptno having avg(sal)<2000;
select ename,dname from emp,dept; #笛卡尔乘积
select ename,dname from emp,dept where emp.deptno=dept.deptno;
select ename,sal,grade from emp join salgrade on sal between losal and hisal;
select y.ename yuangong,j.ename jingli from emp y,emp j where y.mgr=j.empno;
select ename,dname,sal,grade from emp,dept,salgrade where emp.deptno=dept.deptno and emp.sal
between salgrade.losal and salgrade.hisal;
select ename,sal from emp where sal=(select max(sal) from emp); #子查询找到工资最高薪
select ename from emp where empno not in (select mgr from emp where mgr is not null); #in 结果集不能有空值,否则结果为空

「3」创建表
创建数据库

MariaDB [(none)]> create database uosdata;

创建表并建立字段
格式:create table 数据表名(字段名字段类型);

MariaDB [uos]> create table uostable(id int,name varchar(10),mail varchar(30));
int 类型表示正常大小的整数(数字数据类型)。
char 类型(字符串数据类型)表示包含指定长度的空格的右侧带有固定长度的字符串。M 表示字符的列长度,取值范围为0〜255,缺省值为1。
varchar 类型(字符串数据类型)表示一个可变长度字符串,M 范围(最大列长度)为0
到65535。

「4」修改表

create table uos1 like uostable; #没有数据,只是复制了表的结构
insert into uos1 select * from uostable; #复制数据,表不存在无法复制
create table uos2 as select * from uostable; #新建表,并复制整个表结构+数据

查看表结构
格式:desc 数据表名;

MariaDB [uos]> desc uos;

向数据表插入数据
格式:insert into 数据表名(id,name,mail) values(1,‘uos1’,‘uos1@uos.com’);

insert into uostable(id,name,mail) values(1,'uos1','uos1@uos.com');
insert into uostable values(2,'uos2','uos2@uos.com'); #加入全列数据可以不写列名
insert into uostable(id,name) values(3,'uos3'); #不是全列必须写列名
insert into uostable values(4,'uos4','uos4@uos.com'),(5,'uos5','uos5@uos.com'),(6,'uos6','uos6@uos.com');

更新表

update uostable set name='test' where id=2;

修改表结构

alter table uostable add newlist varchar(20); #增加newlist 列
alter table uostable drop newlist; #删除newlist 列
alter table uostable add firstlist varchar(20) first; #增加firstlist 列到第一列
alter table uostable add afterid varchar(30) after id; #增加afterid 列到id 列后面

「5」删除表

delete from uostable where id=4; #要加上where 约束,没有where 删除整个表
delete from uos1; #DML 操作,清除表数据,保留表结果
truncate uos2; #DDL 操作,清除表数据,保留表结果,更彻底,降低高水位线
drop table uos1; #清除表结构和数据

「6」外部表导入导出
建立测试用外部表(即以逗号分隔各列的CSV 格式)
vim /uos.txt

1,uos1,uos1@uos.com
2,uos2,uos2@uos.com
3,uos3,uos3@uos.com
4,uos4,uos4@uos.com

将外部表导入数据库

create database uosdatabase;
use uosdatabase
create table uostable(id int(4),name varchar(10),email varchar(20));
load data infile '/uos.txt' into table uostable fields terminated by ',' lines terminated by '\n';

将数据库导出为外部表

select * from uostable into outfile '/var/lib/mysql/uosdatabase/uostable.txt' fields terminated by ','
lines terminated by '\n';

通过外部表导入scott 数据库
准备数据:分别建立scott 数据库的3 个CSV 表文件
vim /scott.emp.txt

7369,'SMITH','CLERK',7902,800,200,20
7499,'ALLEN','SALES',7698,1600,300,30
7521,'WARD','SALES',7698,1250,500,30
7566,'JONES','MANAG',7839,2975,100,20

vim /scott.dept.txt

10,'ACCOUNTING','NEW YORK'
20,'RESEARCH','DALLAS'
30,'SALES','CHICAGO'
40,'OPERATIONS','BOSTON'

vim /scott.salgrade.txt

1,700,1200
2,1201,1400
3,1401,2000

建立scott 库和三个表,并导入数据

create database scott;
use scott
create table emp(empno int(4),ename varchar(10),job varchar(9),mgr int(4) default null,sal
int(7),comm int(7) default null,deptno int(2));
load data infile '/scott.emp.txt' into table emp fields terminated by ',' lines terminated by '\n';
create table dept(deptno int(2),dname varchar(14),loc varchar(13));
load data infile '/scott.dept.txt' into table dept fields terminated by ',' lines terminated by '\n';
create table salgrade(grade int,losal int,hisal int);
load data infile '/scott.salgrade.txt' into table salgrade fields terminated by ',' lines terminated by'\n';

将scott 数据库导出为外部表

use scott
select * from emp into outfile '/var/lib/mysql/scott/scott.emp.txt' fields terminated by ',' lines
terminated by '\n';

数据库管理程序mysqladmin 详解

mysqladmin 是一个执行mysqld 管理操作的客户端程序。它可以用来检查服务器的配置和当前状态、创建和删除数据库等。

因此使用mysqladmin 前就确保所连接的mysqld 服务端进程正常运行和连接

mysqladmin 工具的使用格式:

mysqladmin [option] command [command option] command ......

option 选项:

-c number 自动运行次数统计,必须和-i 一起使用
-i number 间隔多长时间重复执行
示例:每隔两秒查看一次服务器的状态,总共重复5 次。
mysqladmin -uroot -p -i 2 -c 5 status
-h, --host=name Connect to host. 连接的主机名或iP
-p, --password[=name] 登录密码,如果不写于参数后,则会提示输入
-P, --port=# Port number to use for connection. 指定数据库端口
-s, --silent Silently exit if one can't connect to server.
-S, --socket=name Socket file to use for connection. 指定socket file
-i, --sleep=# Execute commands again and again with a sleep between. 间隔一段时间
执行一次
-u, --user=name User for login if not current user.登录数据库用户名
-v, --verbose Write more information. 写更多的信息
-V, --version Output version information and exit. 显示版本

mysqladmin 的相关命令示例:

mysqladmin password uos123 #<==设置密码,前文用过的。
mysqladmin -uroot -puos123 password uos #<==修改密码,前文用过的。
mysqladmin -uroot -puos123 status #<==查看状态,相当于show status。
mysqladmin -uroot -puos123 -i 1 status #<==每秒查看一次状态。
mysqladmin -uroot -puos123 extended-status #<==等同show global status;。
mysqladmin -uroot -puos123 flush-logs #<==切割日志。
mysqladmin -uroot -puos123 processlist #<==查看执行的SQL 语句信息。
mysqladmin -uroot -puos123 processlist -i 1 #<==每秒查看一次执行的SQL 语句。
mysqladmin -uroot -p'uos' shutdown #<==关闭mysql 服务,前文用过的。
mysqladmin -uroot -p'uos' variables #<==相当于show variables。

Mariadb 数据库备份与还原

在linux 环境备份数据库

mysqldump -u root -p scott > /scott.dump #备份数据库
mysqldump -u root -p scott emp > /scott.emp.dump #备份数据库中的表
mysqldump -u root -p scott dept salgrade > /scott.dept+salgrade.dump #备份数据库中的多个表

在linux 环境还原数据库

>drop database scott;
#如果报错,删除/var/lib/mysql/scott/scott.emp.txt 文件
>create database uos; #不建立数据库,无法导入整库,随意命名
mysql -u root -p uos < /scott.dump #还原数据库
>drop database uos;
>create database uos; #重建数据库用于测试还原表
mysql -u root -p uos < /scott.emp.dump #还原数据库中的表
mysql -u root -p uos < /scott.dept+salgrade.dump #还原数据库中的多个表

Mariadb 数据库索引

什么是索引
索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数
据表里所有记录的引用指针。
更通俗的说,数据库索引好比是一本书前面的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据。
对于索引,会保存在额外的文件中。

索引的类型

1、普通索引
2、唯一性索引
3、主键索引(主索引)
4、复合索引
5、全文索引

创建普通索引
创建表时添加索引
语法:

create table 表名(
列定义
index 索引名称(字段)
index 索引名称(字段)
)
注:可

以使用key 关键字,也可以使用index 关键字。索引名称,可以加也可以不加,不加
使用字段名作为索引名。

MariaDB [book]> desc books;

示例:

MariaDB [book]> create table demo(id int(4),name varchar(20),pwd varchar(20),index(pwd));
Query OK, 0 rows affected (0.08 sec)
MariaDB [book]> create table demo1(id int(4),name varchar(20),pwd varchar(20),key(pwd));
Query OK, 0 rows affected (0.01 sec)
MariaDB [book]> create table demo2(id int(4),name varchar(20),pwd varchar(20),key
index_pwd(pwd)); # 为索引加上名称
Query OK, 0 rows affected (0.02 sec)

mariadb数据库基本使用相关推荐

  1. MySQL/MariaDB数据库主从复制

    MySQL数据库复制概述 MySQL的主从复制是指从服务器向主服务器获取二进制日志文件,然后在从服务器上对这些日志重新执行,从而使从服务器和主服务器保持同步.但由于是异步的复制,从服务器在一定程度上落 ...

  2. window下利用navicat访问Linux下的mariadb数据库

    1.再Linux上成功安装mariadb数据库后,不管是在dos(敲命令mysql -h192.168.136.8 -uroot -p)下或者是navicat(创建连接)下连接mariadb数据库,会 ...

  3. Windows下MariaDB数据库安装图文教程

    MariaDB是基于MySQL的开源数据库,兼容MySQL,现有的MySQL数据库可以迁移到MariaDB中使用 说明: MariaDB是基于MySQL的开源数据库,兼容MySQL,现有的MySQL数 ...

  4. mysql下载备份数据库命令行,如何从MariaDB数据库备份和还原命令行

    在本教程中,我将向你展示如何使用mysqldump程序备份和恢复MariaDB数据库. mysqldump mysqldump是我们用来备份MariaDB数据库的工具,它专门为备份而设计的,可用于备份 ...

  5. MariaDb数据库管理系统的学习(一)安装示意图

    MariaDB数据库管理系统是MySQL的一个分支.主要由开源社区在维护,採用GPL授权许可.开发这个分支的原因之中的一个是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区採用分 ...

  6. MariaDB 数据库索引详解(9)

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...

  7. 详解MariaDB数据库的事务

    1.什么是事务 数据库事务:(database transaction): 事务是由一组SQL语句组成的逻辑处理单元,一组事务中的SQL语句要不全部执行成功功:如果其中某一条执行失败,则这组SQL语句 ...

  8. 树莓派无法安装mariadb_RaspberryPi(树莓派)安装 MariaDB 数据库没有办法远程访问...

    在 RaspberryPi(树莓派) 上安装 MariaDB  或者 MySQL 数据库的时候. 设置的用户没有办法通过网络远程登录. 首先确定的是,用户已经设置了访问权限. 提示的错误信息是: ER ...

  9. MariaDB数据库介绍之一、备份(mysqldump、lvm2快照、xtrabackup)

    一.MariaDB简介及新特性 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成 ...

  10. 《Linux就该这么学》培训笔记_ch18_使用MariaDB数据库管理系统

    <Linux就该这么学>培训笔记_ch18_使用MariaDB数据库管理系统 文章最后会post上书本的笔记照片. 文章主要内容: 初始化MariaDB服务 管理用户以及授权 创建数据库与 ...

最新文章

  1. 你的创业前行之路,亲君愿与你一路相随
  2. GlusterFS的安装及使用
  3. sequelize 增加数据库字段_使用Sequelize动态创建新表
  4. WebSphere SSLC0008E 无法初始化 SSL 连接。未授权访问被拒绝,或者安全性设置已到期 解决方法...
  5. Spring Boot 项目如何做性能监控?
  6. JavaScript实现使用二元运算符将两个数字相加fullAdder算法(附完整源码)
  7. 题目1362:左旋转字符串(Move!Move!!Move!!!)
  8. Fedora/RHEL/openSUSE等Linux安装vivaldi——vivaldi浏览器
  9. Unity WebGL与IIS小坑
  10. 51nod1005大数加法(C语言实现大数)
  11. mac安装JDK及maven
  12. 微信公众账号开发入门准备
  13. UAV021(六):系统架构优化、SBUS协议、遥控器控制电机转动
  14. uniapp开发微信小程序教程(一)
  15. python培训班-千锋教育Python培训-坚持高品质全程面授Python培训机构
  16. java 字符串像素_如何在JavaFX中计算字符串的像素宽度?
  17. js实现video视频标签试看6分钟
  18. linux 无法使用pstree命令
  19. 《云数据中心网络架构与技术》读书笔记 | 第5章 构建数据中心的物理网络(Underlay网络)
  20. sybase SQL 函数

热门文章

  1. Rational Team Concert 2
  2. 360的困兽之斗——探讨奇虎Tecent商业模式
  3. 《华为机试》刷题之HJ77 火车进站
  4. 基于python的RGB图像转灰度图
  5. 阿里云的oss bucket设置 404 回源规则
  6. 基于Apriori算法的高职大学生就业能力的研究
  7. 大学四年的总结与感受
  8. ecno是什么的缩写_nbcs是什么意思的缩写?
  9. 动手学数据分析(四)- 数据可视化
  10. Linux环境下利用perl脚本批量筛选VCF文件指定样本