一、MariaDB(mysql)
1、可用版本
a、MySQL:
(1)、MariaDB
(2)、Percona很强的一家公司。他创建了一个mysql的二次发行版 Percona-Server
(3)、AliSQL
(4)、TiDB
b、www.mysql.com
Community:开源版
Enterprise:企业版
2、MariaDB:mariadb.org
3、MariaDB的特性
a、插件式存储引擎:存储管理器有多种实现版本,彼此间的功能和特性可能略有区别;用户可根据需要灵活选择
b、存储引擎也称为“表类型”
c、更多的存储引擎
(1)、MyISAM:不支持事务,表级锁,崩溃后不保证安全恢复
(2)、MyISAM --> Aria:即MyISAM的增强版
(3)、InnoDB --> XtraDB:InnoDB支持事务;行级锁,支持外键和热备。mariaDB用的存储引擎是由Percona公司基于InnoDB做的二次开发增强版,叫做XtraDB。
(4)、诸多扩展和新特性
(5)、提供了较多的测试组件
(6)、truly open source
4、安装和使用MariaDB:
a、安装方式
(1)、rpm包
1)、由OS的发行商提供
2)、程序官方提供
(2)、源码包
(3)、通用二进制格式的程序包
二、MariaDB程序的组成:C/S
1、C:Client --> mysql protocol --> Server
a、mysql:CLI交互式客户端程序
b、mysqldump:备份工具
c、mysqladmin:管理工具
d、mysqlbinlog:
2、S:Server
a、mysqld
b、mysqld_safe:建议运行服务端程序
c、mysqld_multi:多实例
d、三类套接字地址:
(1)、IPv4,3306/tcp
(2)、IPv6,3306/tcp
(3)、Unix Sock:/var/lib/mysql/mysql.sock,/tmp/mysql.sock
C <--> S:localhost,127.0.0.1
我们用户空间客户端发一个请求后先到内核空间,由内核空间封装TCP协议守护,再封装IP守护,再封装链路层守护,最终经由我们的物理设备发给服务器,服务器收到以后先到内核里解链路层封装,如果最终是自己接收的再解IP封装,再向上解TCP封装,TCP封装接触后发现是某个端口的然后就发给这个端口监听的进程进行通信。
那么如果我们mysql服务器就在本机呢?即客户端和服务端都在本机,这样的话我们可以直接在进程间通信即可,那么怎么进行通信呢?就是我们的共享内存,比如我们第一个进程所访问的硬件内存空间让第二个进程直接从这个内存中访问,然后双方进行交互,这种就叫本机的套接字通信方式。这种访问效率会高的多,我们的mysql或者mariadb都会监听这样一个文件以便于本机通信使用。本机通信的话一定要是localhost或者127.0.0.1才行,就算是本机的ipv4地址都不行,如果用了ipv4就会用tcp通信。共享内存在linux主机上叫Unix Sock
3、配置文件:ini风格,用一个文件为多个程序提供配置
a、[mysql]:配置客户端
b、[mysqld]:配置服务端
c、[mysqld_safe]:只用来配置safe
d、[server]:只要是服务器端程序都可以
e、[client]:只要是客户端都可以
f、[mysqldump]:只适用于mysql这一个客户端
...
g、mysql的各类程序启动时都读取不止一个配置文件,如果多个配置文件配置同一个参数值又不一样的话这个就要看启动顺序了,所以其会按顺序读取并且最终生效,即最后的这个配置文件中定义的才会生效
e、我们可以使用my_print_defaults这个命令来读取
#my_print_defaults
Default options are read from the following files in the given order:将以给定的次序读取下列文件
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf :即先读/etc/mysql/my.cnf,然后读 /etc/my.cnf,这个文件是由片段化的文件组成,其还包含/etc/my.cnf.d/*.conf,最后读~/.my.cnf
4、命令行交互式客户端程序:mysql
a、mysql [OPTIONS] [database]
b、常用选项:
(1)、-u,--user=username或者-uUSERNAME:用户名,默认为root
(2)、-h,--host=hostname或者-hHOST:远程主机(即mysql服务器)地址,默认为localhost;客户端连接服务器端时,服务器会反解客户端的IP为主机名,关闭此功能时使用(skip_name_resolve=NO)。如果不关闭授权会比较麻烦
(3)、-p,--password=passwd或者-p[PASSWORD]:USERNAME所表示的用户的密码;默认为空
(4)、注意:mysql的用户账号由两部分组成:‘USERNAME‘@‘HOST‘;其中HOST用于限制此用户可通过哪些远程主机连接当前的mysql服务
1)、HOST的表示方式,支持使用通配符
%:匹配任意长度的任意字符
192.168.%.%,192.168.10.0/24
_:匹配任意单个字符
2)、我们要配置账号tom能够通过192.168.10.0网段访问我们的数据库,即tom@192.168.10.%
当我们tom账号通过192.168.10.10这个客户端登录我们192.168.10.13这个服务器时,我们的服务器首先会反解我们192.168.10.10这个IP,如果反解出来这个IP为node1.wohaoshuai.com而我们授权时候又是通过tom@192.168.10.%进行授权时,我们这个tom就登录不了,除非我们使用tom@node1.wohaoshuai.com这种方式授权我们的tom账号才能登陆,因此我们一般就会关闭我们的反解功能,即上面所说的skip_name_resolve=NO
(5)、-Ddb_name:连接到服务器端之后,设定其处指明的数据库为默认数据库
(6)、-e ‘SQL COMMAND;‘或者 --execute=‘SQL_COMMAND‘:连接至服务器并让其执行此命令后直接返回
(7)、-P,--port=#:mysql服务器监听的端口,默认为3306/tcp;
(8)、-S,--socket=/PATH/TO/mysql.sock:套接字文件路径
5、命令
a、客户端命令:本地执行
mysql> help
\u db_name:设定哪个库为默认数据库
\q:退出
\d CHAR:设定新的语句结束符
\g:语句结束标记,和分号是一个意思,因为我们的结束符分号是可以改的,而我么\g表示无论别人用的是什么结束符都可以用\g结束
\G:语句结束标记,结果竖排方式显示
MariaDB [mysql]> select * from user \G;
\s:查看状态
\c:结束当前行,和shell中的ctrl + c差不多
MariaDB [(none)]> create da\c MariaDB [(none)]>
\!:执行shell命令
MariaDB [mysql]> \! ls /root 3 cloud-init-0.7.9-9.el7.centos.2.x86_64.rpm fstab.new fstab.slink grep.txt myfirst.sh mytest3 test1.txt wohaoshuai wohaoshuai.txt anaconda-ks.cfg FileTest.c fstab.patch functions mbr.bak mytest2 test test.txt wohaoshuai1
source命令或者\.:可以直接在mysql中执行相应文件中的文件。但是文件需要我们mysql用户有读权限才可以。因为我们的mysql服务就是mysql用户启动起来的
[root@www ~]# cat /tmp/test.sql create database hidb; create table hidb.tbl1(name VARCHAR(30)); show tables from hidb; [root@www ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 6 Server version: 5.5.56-MariaDB MariaDB Server Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. MariaDB [(none)]> \. /tmp/test.sql Query OK, 1 row affected (0.01 sec) Query OK, 0 rows affected (0.01 sec) +----------------+ | Tables_in_hidb | +----------------+ | tbl1 | +----------------+ 1 row in set (0.00 sec)
MariaDB [(none)]> source /tmp/test.sql ERROR 1007 (HY000) at line 1 in file: ‘/tmp/test.sql‘: Can‘t create database ‘hidb‘; database exists ERROR 1050 (42S01) at line 2 in file: ‘/tmp/test.sql‘: Table ‘tbl1‘ already exists +----------------+ | Tables_in_hidb | +----------------+ | tbl1 | +----------------+ 1 row in set (0.00 sec)
b、服务端命令:通过mysql连接发往服务器执行并取回结果(SQL语句)
(1)、DDL,DML,DCL
(2)、注意:每个语句必须有语句结束符,默认为分号(;)
(3)、获取帮助:
mysql> help contents
mysql>help ‘命令类别‘
Administration
Account Management
Data Defintion
Data Manipulation
Data Types
c、命令本身并不区分大小写,但是我们约定俗成的是客户端小写,服务端大写。
6、数据类型:
a、表:行和列
(1)、创建表:定义表中的字段
b、定义字段时,关键的一步即为确定其数据类型
(1)、用于确定:数据存储格式,能参与运算种类,可表示的有效的数据范围
c、字符型:字符集,可通过 SHOW CHARACTER SET;命令查看mysql支持哪些字符集
(1)、码表:在字符和二进制数字之间建立映射关系
(2)、SHOW CHARACTER SET;
(3)、SHOW CONLLATION;
d、种类:
(1)、字符型:
1)、定长字符型:指的是当你指定要存一行以后如果字段定义成20个字符,无论你用还是不用20个字节都分配给你了,填一个也是20个,填20个也是20个,填多了就给你截断
CHAR(#):不区分字符大小写
BINARY(#):区分字符大小写
2)、变长字符型:比如我定义成长30个,你存一个就给你一个空间,存两个就给你两个空间,存30个就给30个空间,长于30个就截断了。
VARCHAR(#)
VARBINARY(#)
3)、对象存储:
TEXT
BLOG
4)、内置类型
SET
ENUM:枚举
(2)、数值型
1)、精确数值型
INT(TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT)
2)、近似数值型:
FLOAT
DOBULE
(3)、日期时间型
1)、日期型:DATE
2)、时间型:TIME
3)、日期时间型:DATETIME
4)、时间戳:TIMESTAMP
5)、年份:YEAR(2),YEAR(4)