1 Star 0 Fork 91

wudong / Linux学完就忘系列

forked from baoke / Linux学完就忘系列 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
51.MariaDB.md 10.01 KB
一键复制 编辑 原始数据 按行查看 历史
baoke 提交于 2019-09-12 14:50 . MariaDB

MariaDB(mysql):

可用版本:
MySQL:
MariaDB
Percona-Server
AliSQL
TIDB

Mysql URL:www.mysql.com
Community
Enterprise

Mariadb URL:mariadb.org

MariaDB的特性:
插件式存储引擎:存储管理器有多种实现版本,彼此间的功能和特性可能略有区别;用户根据需要灵活选择;

存储引擎也称为"表类型";

(1) 更多的存储引擎;
MyISAM:不支持事务,表级锁,崩溃后不保证安全恢复;
MyISAM --> Aria
InnoDB --> XtraDB:支持事务,行级锁,外键,热备;
(2) 诸多扩展和新特性;
(3) 提供了较多的测试组件;
(4) truly open source;

安装和使用MariaDB:
安装方式:
(1) rpm包;
(a) 由OS的发行商提供;
(b) 程序官方提供;
(2) 源码包;
(3) 通用二进制格式程序包;

MariaDB程序的组成:C/S
C:Client --> mysql protocol --> Server
mysql:CLI交互式客户端程序;
mysqldump:备份工具;
mysqladmin:管理工具;
mysqlbinlog:二进制日志;
...

S:Server
mysqld
mysqld_safe:建议运行服务器端程序;
mysqld_multi:多实例;

三类套接字地址:
IPv4 3306/tcp
IPv6 3306/tcp
Unix Sock(本机进程,本机套接字通信):/var/lib/mysql/mysql.sock,/tmp/mysql.sock:
C <--> S:localhost,127.0.0.1

ll /var/lib/mysql/mysql.sock

配置文件:ini风格,用一个文件为多个程序提供配置;
[mysql]
[mysqld]
[mysqld_safe]
[server]
[client]
[mysqldump]
...

#配置文件
cat /etc/my.cnf
#专门的配置文件存放目录,比如client.cnf用于专门配置客户端,server.cnf专门配置服务端
ls /etc/my.cnf.d/

mysql的各类程序启动都读取不止一个配置文件,按顺序读取,且最后读取的为最终生效;

#使用以下命令查看配置文件的默认读取顺序
# Default options are read from the following files in the given order:
#/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 
#其中/etc/my.cnf这个配置文件还包含了/etc/my.cnf.d/*.cnf
my_print_defaults

命令行交互式客户端程序:mysql

mysql [OPTIONS] [database]

常用选项:
-u,--user=username:用户名,默认为root;
-h,--host=hostname:远程主机(即mysql服务器)地址,默认为localhost;客户端连接服务端,服务器会反解客户的IP为主机名,关闭此功能:skip_name_resolve=ON;
-p,--password[=PASSWORD]:USERNAME所表示的用户的密码;默认为空;

注意:mysql的用户账号由两部分组成:'USERNAME'@'HOST';其中HOST用于限制此用户可通过哪些远程主机连接当前的mysql服务;
HOST的表示方式,支持使用通配符:
%:匹配任意长度的任意字符;
172.16.%.%,172.16.0.0/16
_:匹配任意单个字符;

-P,--port=#:mysql服务器监听的端口;默认为3360/tcp;
-S,--socket=/PATH/TO/mysql.sock:套接字文件路径(当前主机内部进程socket通信);
-D,--database=DB_name:连接到服务器端之后,设定其处指明的数据库为默认数据库;
-e,--execute='SQL STATEMENT;':连接至服务器并让其执行此命令后直接返回;

mysql -hlocalhost -uroot -Dmysql -p -e'show tables;'

命令:
客户端命令:本地执行

#查看相关客户端命令
help

\u db_name:设定哪个库为默认数据库;
\q:退出;
\d CHAR:设定新的语句结束符;
\g:语句结束标记;
\G:语句结束标记,结果竖排方式显式;
\s:获取当前数据库服务器的状态信息;
\!:执行shell命令;
\.:装载并运行sql脚本;

--设定默认数据库
\u mysql
--语句结束符标记
select user,host from user\g
--语句结束标记,结果竖排方式显式
select user,host from user\G
--执行shell命令
\! ls /var

服务器端命令:通过mysql连接发往服务器执行并取回结果(SQL语句);
DDL,DML,DCL

注意:每个语句必须有语句结束符,默认为分号(;)
服务端命令获取帮助使用:

--查看服务端命令选项
help contents
--查看具体选项的服务端命令,比如这里查看所有数据类型
help Data Types

字符集
码表:在字符和二进制数字之间建立映射关系;

--查看mysql支持的字符集
show character set;
--显示mysql支持的排序规则
show collation;

获取命令帮助:help KEYWORD
例如:

help create database
help alter database  
help drop database
help show databases
help create table
help create index
--查看sql结尾的数据库
show databases like '%sql';
--查看数据库所支持的所有存储引擎
show engines;
--查看当前数据库所有表的状态
show table status\G
--查看某张表的状态
show table status like 'user'\G
--显示表状态的name字段以help开头的所有表状态信息
show table status where name like 'help%'\G
--显示当前数据库表状态engine='MyISAM'的数据
show table status where engine='MyISAM'\G
--创建表
create table tb1 if not exists(id int unsigned auto_increment,name nvarchar(50),unique key (id));
--查看表结构
describe tbl1
--添加列gender,类型为ENUM
alter table tb1 add gender ENUM('F','M');
--将新增字段放在id之后
alter table tb1 add age smallint after id;
--修改字段包括字段名将id改为stuid,并且字段的所有属性都得写明
alter table tb1 change id stuid smallint unsigned auto_increment not null;
--仅修改字段属性,不包含字段名
alter table tb1 modify name nvarchar(100) not null;
--删除字段
alter table tb1 drop gender;
--修改表的方式创建索引,使用desc tb1查看在key列看到name字段的值为MUL,这就表示该列允许索引,而且索引项是允许重复的
alter table tb1 add index (name);
--查看某表下的索引
show indexes from tb1;
--删除Key_name为id的索引
alter table tb1 drop index id;
--复制表结构:复制某张表的表结构来创建表.这里复制mysql库下的user表的表结构
create table tb7 like mysql.user;
--删除表
drop table if exists tb7;
--复制表结构和数据:我们也可以指定某表的几个字段的表结构来创建一个新表,并且会将表数据也一并复制过来
create table tb8 select user,host,password from mysql.user;
--创建索引,可以指定索引名称等,这里指定索引名为name_index,指定为表tb8的user字段创建索引,推荐使用这种方式
create index name_index on tb8(user);
--查看索引信息
show indexes from tb8;
--创建唯一索引,指定user和host组合键索引
create unique index user_host_unique on tb8(user,host);
--删除索引
drop index user_host_unique on tb8;


--比如我们创建一个已经存在的表,那么就会提示warning信息
create table if not exists tb1(id int unsigned auto_increment,name nvarchar(50),unique key (id));
--我们可以使用show warnings;命令查看上条语句所产生的warning信息
show warnings;
--建表
create table if not exists students(stuid int unsigned auto_increment primary key,name nvarchar(20) not null,Gender ENUM('F','M'),birthdate datetime,classid int);
--插入多行数据
insert into students (name,gender,birthdate,classid) values ('lisi','M','2019-09-11',1),('wangwu','F','2019-09-11',2);
--主键自增列不能重复插入,但是可以替换一行数据
replace into students (stuid,name,gender,birthdate,classid) values (2,'mababa','F','2019-09-11',1);
--正则表达式查询,查找name为m开头,任意字符0个或多个结尾的数据
select * from students where name rlike '^m.*$';
--取反
select * from students where name not rlike '^m.*$';

用户账号及权限管理

用户账号:'username'@'host'
host:此用户访问当前mysql服务器时,允许其通过哪些主机远程创建连接;
表示方式:IP,网络地址、主机名、通配符(%和_);

禁用检查主机名:my.cnf
[mysqld]
skip_name_resolve=ON

创建用户账号:
create user 'username'@'host' [identity by 'password']

删除用户账号:
drop user 'user'@'host' [,user@host]...

授权:
权限级别:管理权限、数据库、表、字段、存储过程;
grant priv_type,... ON [object_type] db_name.tbl_name TO 'user'@'host' [identified by 'password'];

priv_type:ALL [PRIVLEGES]
db_name.tbl_name:
.:所有库的所有表;
db_name.*:指定库的所有表;
db_name.tbl_name:指定库的特定表;
db_name.routine_name:指定库上的存储过程或存储函数;

[object_type]
TABLE
FUNCTION
PROCEDURE

查看指定用户所获得的授权:
show grants for 'user'@'host';
show grants for current_user;

回收权限:
revoke priv_type,... on db_name.tbl_name from 'user'@'host';

注意:MariaDB服务进程启动时,会读取mysql库的所有授权表至内存中;
(1) grant或revoke命令等执行的权限操作会保存于表中,MariaDB此时一般会自动重读授权表,权限修改会立即生效;
(2) 其它方式实现的权限修改,要想生效,必须手动运行flush privileges命令方可;

--在152这台主机上,创建用户名tom,指定只能是192.168.0.0网段能访问,并设置密码
create user 'tom'@'192.168.%.%' identified by '123456';
--删除用户
drop user 'tom'@'192.168.%.%';
--授权'jesse'@'192.168.%.%'这个用户拥有访问mydb这个数据库的所有权限;使用grant这个用户如果不存在,则会自动创建
grant all on mydb.* to 'jesse'@'192.168.%.%' identified by '123456';
--收回mydb.*上的所有表的update,delete权限
revoke update,delete on mydb.* from 'jesse'@'192.168.%.%';
--单独为某个表分配所有权限
grant all on mydb.tb1 to 'jesse'@'192.168.%.%';
--root查看jesse的权限
show grants for 'jesse'@'192.168.%.%';
--如果不立即生效,可以使用以下命令
flush privileges;
--在153这台主机上登录,首先要安装客户端
yum install mariadb -y
--登录
mysql -h192.168.147.152 -utom -p
--使用以下命令发现并没什么权限
show databases;
--登录
mysql -h192.168.147.152 -ujesse -p
--查看自己的权限
show grants
--查看当前登录的用户
select user();

加固mysql服务器,在安装完成后,运行mysql_secure_installation命令;它会自动让你设置root用户密码,删除匿名用户,删除test数据库,并重载授权表.

Shell
1
https://gitee.com/wudongmeng/linux.git
git@gitee.com:wudongmeng/linux.git
wudongmeng
linux
Linux学完就忘系列
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891