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