深入理解mysql-第一章 mysql基础

本文详细介绍了MySQL的服务器端与客户端架构,包括mysqld、mysqld_safe和mysql.server等启动脚本的使用。还讲解了如何通过命令行参数和配置文件来配置MySQL,如启动选项、端口和Unix域套接字文件。此外,讨论了MySQL的配置文件位置和内容格式,以及客户端连接服务器的方法和网络通信协议。
摘要由CSDN通过智能技术生成

前言:mysql系列文章为学习 xiaohaizi的书籍《MySQL 是怎样运行的:从根儿上理解 MySQL》的读书笔记,主要记录了书中主要知识点,便于后续复习。

一、mysql服务端-客户端架构

mysql其实是由两部分组成的,一部分是客户端程序,一部分是服务器程序。它的服务器程序直接和我们存储的数据打交道,然后可以有好多客户端程序连接到这个服务器程序,发送增删改查的请求,然后服务器就响应这些请求,从而操作它维护的数据。启动的MySQL服务器进程的默认名称为mysqld, 而我们常用的MySQL客户端进程的默认名称为mysql

  1.1 mysql的bin目录

mysql默认安装文件夹为/usr/local/mysql,在类UNIX系统中用来启动MySQL服务器程序的可执行文件有很多,大多在MySQL安装目录的bin目录下。

.
├── mysql
├── mysql.server -> ../support-files/mysql.server
├── mysqladmin
├── mysqlbinlog
├── mysqlcheck
├── mysqld
├── mysqld_multi
├── mysqld_safe
├── mysqldump
├── mysqlimport
├── mysqlpump
... (省略其他文件)
0 directories, 40 files

  1.2  启动mysql服务端

  • mysqld mysqld这个可执行文件就代表着MySQL服务器程序,运行这个可执行文件就可以直接启动一个服务器进程。但这个命令不常用,我们继续往下看更牛逼的启动命令。

  • mysqld_safe mysqld_safe是一个启动脚本,它会间接的调用mysqld,而且还顺便启动了另外一个监控进程,这个监控进程在服务器进程挂了的时候,可以帮助重启它。另外,使用mysqld_safe启动服务器程序时,它会将服务器程序的出错信息和其他诊断信息重定向到某个文件中,产生出错日志,这样可以方便我们找出发生错误的原因。

  • mysql.server mysql.server也是一个启动脚本,它会间接的调用mysqld_safe,在调用mysql.server时在后边加上start或者stop就可以启动和关闭服务器程序了。

  • mysqld_multi 运行多个服务器实例,也就是运行多个MySQL服务器进程。mysql_multi可执行文件可以对每一个服务器进程的启动或停止进行监控。这个命令的使用比较复杂,不作重点。

  1.3 启动mysql客户端

  成功启动MySQL服务器程序后,就可以启动客户端来连接服务器,bin目录下有许多客户端程序,比方说mysqladminmysqldumpmysqlcheck等,我们主要用mysql来启动客户端连接。启动这个可执行文件时一般需要一些参数,格式如下:

mysql -h主机名  -u用户名 -p密码

 

参数名参数含义
-h表示服务器进程所在计算机的域名或者IP地址,如果服务器进程就运行在本机的话,可以省略这个参数,或者填localhost或者127.0.0.1。也可以写作 --host=主机名的形式。
-u表示用户名。也可以写作 --user=用户名的形式。
-p表示密码。也可以写作 --password=密码的形式。

 

 连接成功后会出现 mysql> ,然后就可以输入命令操作mysql服务器。最后输入exit,quit或者\q 退出连接。

 1.4 客户端与服务器的连接

   mysql数据库服务器进程和客户端进程可能运行在不同的主机中,它们之间必须通过网络来进行通讯。MySQL采用TCP作为服务器和客户端之间的网络通信协议。MySQL服务器启动的时候会默认申请3306端口号,也可以在启动服务器程序的命令行里添加-P参数来明确指定一下端口号。

        如果我们的服务器进程和客户端进程都运行在同一台操作系统为类Unix的机器上的话,我们可以使用Unix域套接字文件来进行进程间通信。如果我们在启动客户端程序的时候指定的主机名为localhost,或者指定了--protocol=socket的启动参数,那服务器程序和客户端程序之间就可以通过Unix域套接字文件来进行通信了。MySQL服务器程序默认监听的Unix域套接字文件路径为/tmp/mysql.sock,客户端程序也默认连接到这个Unix域套接字文件。如果我们想改变这个默认路径,可以在启动服务器程序时指定socket参数,就像这样:

mysqld --socket=/tmp/a.txt

服务器启动后便会监听/tmp/a.txt。在服务器改变了默认的UNIX域套接字文件后,如果客户端程序想通过UNIX域套接字文件进行通信的话,也需要显式的指定连接到的UNIX域套接字文件路径,这样该客户端进程和服务器进程就可以通过路径为/tmp/a.txtUnix域套接字文件进行通信了:   

二、mysql的配置

    mysql有许多的配置项,设置项一般都有各自的默认值,比方说服务器允许同时连入的客户端的默认数量是151,表的默认存储引擎是InnoDB,我们可以在程序启动的时候去修改这些默认值,对于这种在程序启动时指定的设置项也称之为启动选项(startup options),这些选项控制着程序启动后的行为。在MySQL安装目录下的bin目录中的各种可执行文件,不论是服务器相关的程序(比如mysqldmysqld_safe)还是客户端相关的程序(比如mysqlmysqladmin),在启动的时候基本都可以指定启动参数。这些启动参数可以放在命令行中指定,也可以把它们放在配置文件中指定。

 2.1 命令行指定配置项

    在启动mysql的服务器端和客户端的时候,可以在命令行中指定选项时需要在选项名前加上--前缀。另外,如果选项名是由多个单词构成的,它们之间可以由短划线-连接起来,也可以使用下划线_连接起来,也就是说skip-networkingskip_networking表示的含义是相同的。

mysqld --skip-networking

我们前边提到的skip-networkingdefault-storage-engine称之为长形式的选项(因为它们很长),设计MySQL的大叔为了我们使用的方便,对于一些常用的选项提供了短形式(如-h表示--host, -P表示端口和--port等价)。使用长形式选项时需要在选项名前加两个短划线--不同的是,使用短形式选项时在选项名前只加一个短划线-前缀。

 2.2 配置文件

   2.2.1 配置文件位置

             在类UNIX操作系统中,MySQL会按照下列路径来寻找配置文件:

路径名 
/etc/my.cnf 
/etc/mysql/my.cnf 
SYSCONFDIR/my.cnf 
$MYSQL_HOME/my.cnf特定于服务器的选项(仅限服务器)
defaults-extra-file命令行指定的额外配置文件路径
~/.my.cnf用户特定选项
~/.mylogin.cnf用户特定的登录路径选项(仅限客户端)

    这几个路径中的任意一个都可以当作配置文件来使用。MySQL将按照我们在上表中给定的顺序依次读取各个配置文件,如果该文件不存在则忽略,如果我们在多个配置文件中设置了相同的启动选项,那以最后一个配置文件中的为准。如果我们不想让MySQL到默认的路径下搜索配置文件(就是上表中列出的那些),可以在命令行指定defaults-file选项,比如这样(以UNIX系统为例):

mysqld --defaults-file=/tmp/myconfig.txt

这样,在程序启动的时候将只在/tmp/myconfig.txt路径下搜索配置文件。`defaults-extra-file`和`defaults-file`的区别,使用`defaults-extra-file`可以指定额外的配置文件搜索路径(也就是说那些固定的配置文件路径也会被搜索)。

 2.2.2 配置文件内容

  与在命令行中指定启动选项不同的是,配置文件中的启动选项被划分为若干个组,每个组有一个组名,用中括号[]扩起来。配置文件中不同的选项组是给不同的启动命令使用的,如果选项组名称与程序名称相同,则组中的选项将专门应用于该程序。例如, [mysqld][mysql]组分别应用于mysqld服务器程序和mysql客户端程序。需要注意的一点是,mysqld_safemysql.server这两个程序在启动时都会读取[mysqld]选项组中的内容。

在配置文件中指定启动选项的语法类似于命令行语法,但是配置文件中只能使用长形式的选项。在配置文件中指定的启动选项不允许加--前缀,并且每行只指定一个选项,而且=周围可以有空白字符(命令行中选项名、=、选项值之间不允许有空白字符)。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值