today,one buddy in IMG wechat group 2 asked “why i`ve installed the MySQL 5.7 on linux server,but there`s no mysqld_safe command at all?”so,here i`d like to post this article to say something about it.first of all,let`s see the command parameter and usage:
1 #mysqld_safe --help 2 Usage: /usr/local/mysql/bin/mysqld_safe [OPTIONS] 3 The following options may be given as the first argument: 4 --no-defaults Don`t read the system defaults file 5 --defaults-file=FILE Use the specified defaults file 6 --defaults-extra-file=FILE Also use defaults from the specified file 7 8 Other options: 9 --ledir=DIRECTORY Look for mysqld in the specified directory 10 --open-files-limit=LIMIT Limit the number of open files 11 --core-file-size=LIMIT Limit core files to the specified size 12 --timezone=TZ Set the system timezone 13 --malloc-lib=LIB Preload shared library LIB if available 14 --mysqld=FILE Use the specified file as mysqld 15 --mysqld-version=VERSION Use "mysqld-VERSION" as mysqld 16 --nice=NICE Set the scheduling priority of mysqld 17 --plugin-dir=DIR Plugins are under DIR or DIR/VERSION, if 18 VERSION is given 19 --skip-kill-mysqld Don`t try to kill stray mysqld processes 20 --syslog Log messages to syslog with `logger` 21 --skip-syslog Log messages to error log (default) 22 --syslog-tag=TAG Pass -t "mysqld-TAG" to `logger` 23 --mysqld-safe-log- TYPE must be one of UTC (ISO 8601 UTC), 24 timestamps=TYPE system (ISO 8601 local time), hyphen 25 (hyphenated date a la mysqld 5.6), legacy 26 (legacy non-ISO 8601 mysqld_safe timestamps) 27 28 All other options are passed to the mysqld program. 29 30 [root@zlm3 07:43:01 /data/mysql/mysql3306] 31 #
the most simplest usage of mysqld_safe way is to just use `–defaults-file` to specify which “my.cnf” you want to use,just like:
1 [root@zlm3 07:54:10 /usr/local/mysql/bin] 2 #pkill mysqld 3 4 [root@zlm3 07:54:40 /usr/local/mysql/bin] 5 #ps aux|grep mysqld 6 root 6302 0.0 0.0 112640 960 pts/0 R+ 07:54 0:00 grep --color=auto mysqld 7 8 [root@zlm3 07:54:51 /usr/local/mysql/bin] 9 #mysqld_safe --defaults-file=/data/mysql/mysql3306/my.cnf & 10 [1] 6307 11 12 [root@zlm3 07:55:21 /usr/local/mysql/bin] 13 #2018-06-04T05:55:21.758814Z mysqld_safe Logging to `/data/mysql/mysql3306/data/error.log`. 14 2018-06-04T05:55:21.786306Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/mysql3306/data 15 ^C 16 17 [root@zlm3 07:55:35 /usr/local/mysql/bin] 18 #ps aux|grep mysqld 19 root 6307 0.1 0.1 113252 1628 pts/0 S 07:55 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql3306/my.cnf 20 mysql 7328 1.0 17.4 1069424 177592 pts/0 Sl 07:55 0:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=error.log --open-files-limit=65535 --pid-file=mysql.pid --socket=/tmp/mysql3306.sock --port=3306 21 root 7361 0.0 0.0 112640 960 pts/0 R+ 07:55 0:00 grep --color=auto mysqld 22 23 [root@zlm3 07:55:44 /usr/local/mysql/bin] 24 #
here we can see,there`re two processes running,one is mysqld_safe,another one is the mysqld.even if you use “kill -9 7328” to stop the mysqld process,but subsequently you`ll find that the mysqld will startup again soon,unless you kill mysqld process by using “pkill mysqld” as below:
1 [root@zlm3 07:55:44 /usr/local/mysql/bin] 2 #kill -9 7328 3 4 [root@zlm3 07:57:15 /usr/local/mysql/bin] 5 #/usr/local/mysql/bin/mysqld_safe: line 198: 7328 Killed nohup /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=error.log --open-files-limit=65535 --pid-file=mysql.pid --socket=/tmp/mysql3306.sock --port=3306 < /dev/null > /dev/null 2>&1 6 2018-06-04T05:57:15.076914Z mysqld_safe Number of processes running now: 0 7 2018-06-04T05:57:15.083092Z mysqld_safe mysqld restarted 8 ^C 9 10 [root@zlm3 07:57:20 /usr/local/mysql/bin] 11 #ps aux|grep mysqld 12 root 6307 0.0 0.1 113256 1676 pts/0 S 07:55 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql3306/my.cnf 13 mysql 7385 2.4 17.7 1081288 180624 pts/0 Sl 07:57 0:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=error.log --open-files-limit=65535 --pid-file=mysql.pid --socket=/tmp/mysql3306.sock --port=3306 14 root 7419 0.0 0.0 112640 960 pts/0 R+ 07:57 0:00 grep --color=auto mysqld 15 16 [root@zlm3 07:57:24 /usr/local/mysql/bin] 17 #pkill mysqld 18 19 [root@zlm3 07:57:37 /usr/local/mysql/bin] 20 #2018-06-04T05:57:38.957789Z mysqld_safe mysqld from pid file /data/mysql/mysql3306/data/mysql.pid ended 21 ^C 22 [1]+ Done mysqld_safe --defaults-file=/data/mysql/mysql3306/my.cnf 23 24 [root@zlm3 07:57:48 /usr/local/mysql/bin] 25 #ps aux|grep mysqld 26 root 7439 0.0 0.0 112640 956 pts/0 R+ 07:57 0:00 grep --color=auto mysqld 27 28 [root@zlm3 07:57:55 /usr/local/mysql/bin] 29 #
For some Linux platforms, MySQL installation from RPM or Debian packages includes systemd support for managing MySQL server startup and shutdown. On these platforms, mysqld_safe is not installed because it is unnecessary. For more information, see Section 2.5.9, “Managing MySQL Server with systemd”.
therefore,if you want the mysqld_safe feature,i rather recommend you to install MySQL server with binary distribution instead of rpm distribution.
mysqld_safe is the recommended way to start a mysqld server on Unix. mysqld_safe adds some safety features such as restarting the server when an error occurs and logging runtime information to an error log. A description of error logging is given later in this section.
來源: https://dev.mysql.com/doc/refman/8.0/en/mysqld-safe.html
summary:
another buddy in zst techique wechat group said that it will be messy in troubleshooting while using mysqld_safe to startup mysqld,`cause in some case,the mysqld_safe may lead to the ceaseless restarting of mysqld.furthermore,it may destroy the evidences and logs which can be diagnosted by DBAs.anyhow,in my opinion it depends:
- if the bussines continuity is the first thing you need to consider,i recommend to use mysqld_safe method.
- if your monitor system is strong enough or the application on the MySQL server is not so important such as enterprise management system,BBS system,i recommend to use mysqld method.