mysqld另一个名字是mysql server,是一个单多线程的程序,用来完成安装的大部分工作。
    mysql server 管理包含数据目录的下数据库以及表的访问。
    当mysql server 启动时,它会监听来自客户端发来的连接请求。
    在启动mysqld时会有许多选项,可以使用mysqld —verbose —help

    1. mysqld --verbose --help

    mysqld_safe
    如果是使用RPM方式或者debian包方式去安装mysql的,会支持systemd的方式去启动和停止mysql。在这些平台下, mysql是不会安装mysqld_safe的,因为没必要。
    mysqld_safe是一个以shell脚本去调用mysqld的程序。mysqld_safe增加了一下安全的特性,比如当出现错误时会重启mysqld,会将运行信息记录到错误日志。
    mysqld_safe程序会读取参数文件中的[mysqld],[server],[mysqld_safe]参数组,为了向后兼容,mysqld_safe也会读取[safe_mysqld]。

    mysqld_safe可以使用的参数选项

    —basedir Path to MySQL installation directory
    —core-file-size Size of core file that mysqld should be able to create
    —datadir Path to data directory
    —defaults-extra-file Read named option file in addition to usual option files
    —defaults-file Read only named option file
    —help Display help message and exit
    —ledir Path to directory where server is located
    —log-error Write error log to named file
    —malloc-lib Alternative malloc library to use for mysqld
    —mysqld Name of server program to start (in ledir directory)
    —mysqld-safe-log-timestamps Timestamp format for logging
    —mysqld-version Suffix for server program name
    —nice Use nice program to set server scheduling priority
    —no-defaults Read no option files
    —open-files-limit Number of files that mysqld should be able to open
    —pid-file Path name of server process ID file
    —plugin-dir Directory where plugins are installed
    —port Port number on which to listen for TCP/IP connections
    —skip-kill-mysqld Do not try to kill stray mysqld processes
    —socket Socket file on which to listen for Unix socket connections
    —timezone Set TZ time zone environment variable to named value
    —user Run mysqld as user having name user_name or numeric user ID user_id

    —defaults-extra-file=file_name
    除了读取普通的选项文件,还会读取这个选项指定的文件。如果这个文件不存在或者不可访问,服务器就会报错并退出。如果没有给定绝对路径,那么会去当前目录下找该文件。mysqld_safe后有多个选项,这个选项必须是第一个。

    —ledir=file_path
    如果mysqld_safe没有找到服务器,将会从该路径去加载。

    —no-defaults
    不去读取任何选项文件。如果因为程序启动时因为选项文件中不被识别的参数选项而失败时,可以使用这个选项。如果使用了这个选项,这个选项必须是第一个。

    Mysql.server
    如果是使用RPM方式或者debian包方式去安装mysql的,会支持systemd的方式去启动和停止mysql。在这些平台下, mysql是不会安装mysql.server的,因为没必要。
    mysql.server是一个调用mysqld_safe的shell脚本。
    使用mysql.server启动跟停止mysql的方法:

    mysql.server start
    mysql.server stop
    

    自动启动跟停止mysql:
    1/如果安装时使用的是RPM方式,mysql.server可能会被安装在/etc/init.d/下,名字为mysqld或者mysql。
    2/如果使用源代码安装,或者二进制安装,就不会自动安装mysql.server。需要手动配置,在安装路径下的 support-files,使用以下语句创建:

    cp mysql.server /etc/init.d/mysql
    chmod +x /etc/init.d/mysql
    
    chkconfig --add mysql
    

    mysql.server从[mysql.server],[mysqld]选项组中读取选项。为了向后兼容,[mysql_server]也会被读取。
    mysql.server只允许两个命令行选项,一个是start,另一个是stop。其他选项都要写在文件中。

    basedir Path to MySQL installation directory Directory name
    datadir Path to MySQL data directory Directory name
    pid-file File in which server should write its process ID File name
    service-startup-timeout How long to wait for server startup

    mysql_multi
    如果是使用RPM方式或者debian包方式去安装mysql的,会支持systemd的方式去启动和停止mysql。在这些平台下, mysql是不会安装mysqld_multi的,因为没必要。
    mysql_multi程序是用来管理多个mysql使用不同的socket文件或者TCP/IP进行连接的进程的。
    mysql_multi会去/etc/my.cnf中寻找[mysqlN]的选项组。N是一个正整数。
    启动语法:

    mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]
    mysqld_multi start 17
    mysqld_multi stop 8,10-13
    

    mysql_multi会寻找一下选项文件:
    1/no-defaults
    2/defatuls-file
    3/defaults-extra-file,如果给定了多个,只有最后一个会被读取

    当在一个服务器上使用多个实例时,需要有不同的数据目录。

    # This is an example of a my.cnf file for mysqld_multi.
    # Usually this file is located in home dir ~/.my.cnf or /etc/my.cnf
    
    [mysqld_multi]
    mysqld     = /usr/local/mysql/bin/mysqld_safe
    mysqladmin = /usr/local/mysql/bin/mysqladmin
    user       = multi_admin
    password   = my_password
    
    [mysqld2]
    socket     = /tmp/mysql.sock2
    port       = 3307
    pid-file   = /usr/local/mysql/data2/hostname.pid2
    datadir    = /usr/local/mysql/data2
    language   = /usr/local/mysql/share/mysql/english
    user       = unix_user1
    
    [mysqld3]
    mysqld     = /path/to/mysqld_safe
    ledir      = /path/to/mysqld-binary/
    mysqladmin = /path/to/mysqladmin
    socket     = /tmp/mysql.sock3
    port       = 3308
    pid-file   = /usr/local/mysql/data3/hostname.pid3
    datadir    = /usr/local/mysql/data3
    language   = /usr/local/mysql/share/mysql/swedish
    user       = unix_user2
    
    [mysqld4]
    socket     = /tmp/mysql.sock4
    port       = 3309
    pid-file   = /usr/local/mysql/data4/hostname.pid4
    datadir    = /usr/local/mysql/data4
    language   = /usr/local/mysql/share/mysql/estonia
    user       = unix_user3
    
    [mysqld6]
    socket     = /tmp/mysql.sock6
    port       = 3311
    pid-file   = /usr/local/mysql/data6/hostname.pid6
    datadir    = /usr/local/mysql/data6
    language   = /usr/local/mysql/share/mysql/japanese
    user       = unix_user4