MYSQL 详解
一. 什么是 mysql ?
mysql 是一种关系型数据库。它是 C/S 架构,所以有客户端和服务端。系统不同,mysql 安装目录也不同。若是unix类系统通过包管理软件安装,路径一般为 /usr/bin/mysql ;手动安装地址 /usr/local/mysql。
1.1 bin目录下的文件
mysql bin目录下部分可执行文件如下所示:
1.1.1 mysqld
mysqld是mysql数据库的服务端进程,但不经常用,原因还需往下看!运行mysqld会启动一个带有log输出窗口的mysql服务进程。
1.1.2 mysqld_safe
mysqld_safe 是启动脚本,会间接调用 mysqld ,并启动一个监控进程,在 mysqld 故障时进行重启。直接运行 mysqld 时 log 会之间输出到启动窗口,而 mysql_safe 的 log 会重定向到一个文件中。
1.1.3 mysql.server
mysql.server 同样是启动脚本,也会间接调用 mysqld_safe 。这个 mysql.server 文件其实是一个链接文件,它的实际文件是 ../support-files/mysql.server。执行 mysql.server 时可以在后面跟命令,如: mysqld.server start 。
1.1.4 mysqld_multi
以上命令都是启动一个实例进程,而 mysqld_multi 是启动多个实例,可以对每一个服务器进程的启动或停止进行监控。
1.1.5 mysqlbinlog
mysqlbinlog 是查看 binlog 日志文件的命令。binlog 文件以二进制方式存储,不能直接查看,需要使用 mysqlbinlog 命令来查看。
1.2 mysql 与 mysqld "相爱相杀"!
1.2.1 mysql 简单语法
mysql 中,-u这类参数是短参数,后面可以直接跟值,也可以空格后再跟值,例: -uroot 和 -u root 等效。短参数前面用单个短划线 - 。 -p 参数特例,参数和值之间不能有空格!!!
有短参数也有长参数,--user 就是 -u 的完整形式,完整参数的赋值格式为 --user=VALUE 中间不能有空格。长参数前面用两个短划线 --。
mysql 各个参数之间没有顺序要求,可以随意摆放各参数。
1.2.2 Link stared!
注意:连接上 mysql 后,msql的命令都要以分号 ;结尾!
| 参数 | 解释 |
|---|---|
| -h | 指定要连接的主机地址,可以是域名和ip地址。如果连接本地mysql可以省略。 |
| -u | 指定要登录的用户名 |
| -p | 用户名的密码 |
如果要断开客户端与服务端的连接,在 mysql 控制台输入 quit,exit,\q 中的任意一个命令即可退出客户端。
1.2.3 mysql 和 mysqld 是怎么"交流"的?
要使用 mysql 数据库,必须要连接它的服务端,发生了"连接"这个动作,那就涉及到了通信。mysql 支持 TCP\IP、pipe和共享内存、Unix套接字文件 三种通信方式,默认方式是 TCP\IP 。
1.2.3.1 TCP\IP
mysql 服务默认监听 3306 端口。客户端连接服务端时,如果没有指定主机和端口,默认连接本地地址 127.0.0.1 的 3306 端口。
1.2.3.2 pipe和共享内存
1.2.3.3
1.3 什么是存储引擎?
二. mysql 的配置
. MYSQL备份与还原
备份可划分为热备份、冷备份和温备份。 - 热备份:读写不受影响 - 冷备份:也叫离线备份,读写都被中止后再备份 - 温备份:仅可执行读操作
备份还可划分为物理备份和逻辑备份 - 物理备份:复制数据文件到其他硬盘 - 逻辑备份:将数据导出至文本文件中
备份还分为完全备份、增量备份和差异备份 - 完全备份:完全备份全部数据 - 增量备份: - 差异备份:
1.
binlog 日志
binglog 日志记录了所有 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,不包括查询语句。binlog 以二进制形式存储,不可直接查看,需要使用 mysqlbinlog 命令查看 binlog 日志。
通过 show variables like '%log_bin%'; 语句查看有关 binlog 的配置

.1 日志格式
mysql 提供了多种格式来记录二进制日志: - statement 基于 SQL 语句的日志记录,记录的是 SQL 语句,对数据进行修改的 SQL 语句都会记录到日志中 - row 基于行的日志记录,记录的数据涵盖变更前后的实际数据内容 - mixed 混合了 statement 和 row 两种格式,它默认采用 statement,在某些特殊情况下会自动切换为 row 格式进行记录
两种日志格式的区别如下所示:

staement 格式的 binlog 日志记录的是 sql 语句,用 mysqlbinlog 日志查看工具可以明文查看。

而 row 格式下的日志就算是使用 mysqlbinlog 日志工具查看也是加密的。使用 mysqlbinlog -v 参数把日志重构为 sql ,才能看见 sql 语句,WHERE 段落中的是修改前的值,SET 后面的是修改的结果。如上图第二大段,以 “BINLOG” 开头的五行加密信息,后面的则是明文 sql 语句。
使用 show variables like '%binlog_format%'; 查看当前 mysql 的日志格式。
在 mysql 的配置文件中添加 binlog_format=STATEMENT 来修改日志格式
.2 查看日志
binlog 日志由二进制格式存储,需要用 mysql 自己提供的命令工具 mysqlbinlog 来查看。 参数: - -d 指定数据库名称 - -o 忽略掉日志中的前 n 行命令 - -v 将行事件(数据变更)重构为 SQL 语句 - -vv 将行事件(数据变更)重构为 SQL 语句,并输出注释信息
.3 清理日志
清理日志分手动清理和自动清理,手动清理通过如下命令来手动删除需要删除的日志,自动清理通过 mysql 的配置文件来设置
mysql 配置文件方式删除日志
查看清理日志设置
查询日志
binlog 日志只是把 DML 和 DDL 语句记录起来,不包括查询语句。mysql 有个查询日志,它会记录所有的操作语句,在配置中添加如下配置即可。
检查当前数据库是否开启查询日志,用 show variables like '%general%';
慢查询日志
慢查询日志把执行时间超过参数 "long_query_time" 设置值并且扫描记录数不小于 "min_examined_row_limit" 的所有 SQL 语句给记录下来。慢查询日志默认不开启,参数 "long_query_time" 默认为 10s,它的精度可以到微秒。
在 mysql 配置文件中添加如下选项来配置慢查询日志