数据库(DataBase)是以一定规则组织起来的、长期保存在计算机存储设备上的、各种用户或应用可以共享的数据集合。
用户可以对数据文件以及文件内容进行增删改查的操作。
关系型数据库以行和列的形式存储数据,和我们常见的表格非常类似,每一个表可以形象的理解为一个表格。
关系型数据库支持 SQL:
常见的关系型数据库有:MySQL、Oracle、SqlServer、DB2 等。
NoSQL(Not Only SQL)指的是非关系型的数据库。随着访问量的上升,传统的关系型数据库性能容易出现问题,于是 NoSQL 被设计出来,它的出现主要是为了解决传统数据库系统的规模问题。
NoSQL 常用于超大规模数据的存储(例如 google 或 facebook 每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
常见的菲关系型数据库有:Redis(键值对存储)、MongoDB(文档存储)、HBase(列存储)等。
详见《NoSQL & Redis 介绍、缓存穿透 & 击穿 & 雪崩》
MySQL 是目前最流行的、开源的、关系型数据库。
MySQL(Oracle MySQL)、Percona(MySQL 分支)、Mariadb(MySQL 创始人开发的新分支)三者的使用和维护基本上是一致的,各自有自己的一些特性。
MySQL Server(服务端)
MySQL Client(客户端)
举例子,如果你设置了 int(11),有个字段值是 123,那么这个值在显示宽度上是 3 位,而设计的是显示 11 位,所以这时如果在字段设计的时候选择 zerofill 就可以发现,123 变成了 00000000123,也就是剩下的 8 位用 0 补足了。
在我们设计建表时,MySQL 会自动为整数型字段分配显示长度,如:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。所以,使用这些默认的显示长度就可以了,不用再去自己填长度。
例如 double(5,2) 表示最多 5 位,其中必须有 2 位小数,即最大值为 999.99。
总结一下,从空间上考虑,用 VARCHAR 合适;从效率上考虑,用 CHAR 合适。关键是根据实际情况找到权衡点。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的、MySQL 不能表示的值时,则使用"零"值。
--查看 mysql 现在已提供什么存储引擎 show engines; --查看 mysql 当前默认的存储引擎 show variables like ‘%storage_engine%‘; --查看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎) show create table 表名;
--查看数据库编码的具体信息 show variables like ‘character%‘;
--临时更改客户端和服务器结果集的编码 set character_set_client=gbk; set character_set_results=gbk;
因此尽量选择二进制包,安装更简单。
卸载掉系统中已有的 mysql 安装程序或者类库,防止版本冲突。
# 查看已有的包 rpm -qa|grep -i mysql
yum list|grep mysql # 卸载
rpm -e mysqlxxxx yum -y remove mysqlxxxx
# 安装
rpm -ivh mysql-community-server-8.0.25-1.el8.x86_64_\(1\).rpm
yum -y install mysql-server
若报错缺少依赖包,解决办法是缺少什么就安装什么(可用 yum 补充安装依赖包)。
# 启动数据库 systemctl start mysqld
# 查看当前mysql服务的状态 service mysqld status
# 关闭服务
systemctl stop mysqld
帮助文档:mysql --help
常用参数:
Mysql 默认 root 用户没有密码,输入 mysql -u root 即可登录 mysql。
我们可以查看 mysql 库中 user 表的 plugin 字段:
初始化/修改 root 密码(Mysql 8.x):
alter user root@‘localhost‘ identified with mysql_native_password by ‘123456‘;
若忘记密码而不能登录,能用查看日志找到密码吗?或重置密码?答案是:No
解决方案:
Mysql Server 有安全启动模式,该模式需要重启服务。
mysqld_safe --skip-grant-tables&
通过这种模式来重置账号密码(root 密码重置回空),修改过程会影响服务正常。
mysqld_safe --skip-grant-tables& mysql -u root mysql mysql>alter user root@‘localhost‘ identified with mysql_native_password by ‘123456‘;
mysql> FLUSH PRIVILEGES;
数据库的数据目录(datadir),其中存储的就是库表数据,innodb 日文件等。
Mysql 服务端启动程序。
这里存放的是 Mysql 客户端命令集或者说工具集。
Mysql 的相关配置文件。
/etc/my.cnf 管理 Mysql 的配置信息。
[mysqld] :这个模块下的所有配置信息是对 Mysql Server 端生效的。
[mysqld] datadir=/var/lib/mysql # 数据文件的存放目录 socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysql/mysqld.log pid-file=/run/mysqld/mysqld.pid
SELinux:即安全增强型 Linux(Security-Enhanced Linux),它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
它的主要作用:最大限度地减小系统中服务进程可访问的资源(最小权限原则)。这个服务一般需要关掉,否则修改一些服务配置可能会失败。
1)首先使用 sestatus 命令来检查 selinux 运行状态以及运行模式:
上面的输出显示,selinux 被启用,并且设置在 enforcing 模式。
2)关闭 selinux
当被启用的时候,selinux 可以被设置成 enforcing 或者 permissive 模式。通过下面的命令,你可以临时将模式修改为 permissive:
setenforce 0
这个修改仅仅对于当前运行的会话有效,并且不会持久化,重启后失效。
或修改配置文件(永久生效):
vi /etc/sysconfig/selinux # 其是 /etc/selinux/config 的符号链接
SELINUX=disabled
然后重启机器。
show variables;
查看某个具体的参数:
show variables like "%datadir%"; show variables like "sock%";
Mysql 的服务端口,默认是 3306:
如何修改这个端口:set port=3307 会报错,因为这是个静态变量 ,需要修改配置文件。
这类变量需要特别注意它的规则
binlog_format 就是这种 both 类的变量。因此即使两个命令都执行了,但是对于那些执行命令之前已经存在了的长连接线程的本地值,仍然是 statement。
区分变量类型
主要分为 5 种:
/var/log/mysql.log:记录启动、运行、停止 mysql 服务端时遇到的问题,主要用来分析定位问题。
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysql/mysqld.log # 定义错误日志的路径 pid-file=/run/mysqld/mysqld.pid
记录服务端所有访问记录、执行的 SQL 等记录下来。
该日志功能默认不开启,因为 log 的量会非常庞大,但个别情况下可能会临时的开一会儿 general log 以供排障使用。
相关参数一共有 3 个:general_log、log_output、general_log_file
show variables like ‘general_log‘; -- 查看日志是否开启 show variables like ‘log_output‘; -- 看看日志输出类型:table 或 file show variables like ‘general_log_file‘; -- 看看日志文件保存位置 set global general_log_file=‘tmp/general.log‘; -- 设置日志文件保存位置 set global general_log=on; -- 开启日志功能 set global log_output=‘table‘; -- 设置输出类型为 table set global log_output=‘file‘; -- 设置输出类型为 file
该日志文件以二进制进行存储,记录的是数据库所有的变更(比如增删改)操作,主要用来做主从复制。
二进制日志如何查看:使用系统带的 mysqlbinlog 工具。
也是二进制日志,和 binlog 是对应关系,是存在于主从复制的从节点上,简单理解就是主节点 master 上的是 binlog,传到从节点写入的就是 relaylog。
慢查询日志,记录下所有执行慢的 SQL。
如何定义 SQL 是执行慢的 SQL,使用的是一个参数来控制:慢查询阈值,执行时间超过该参数的,被认为是慢 SQL 并记录到慢查询日志中。
show variables like "long_query_time";
打开慢查询:
show variables like "slow_query_log"; set global slow_query_log=on;
查看慢查询:
原文:https://www.cnblogs.com/juno3550/p/14841674.html