目录

my.cnf

mysqld或mysqld_safe启动时可以指定参数–defaults-file=“/some/dir/my.cnf_name” 时(指定此参数时文件名随意)。配置文件和参数可以可以在启动命令中配合使用。如未指定–defaults-file参数。mysql将按程序编译时指定的默认优先级到指定位置搜索my.cnf文件,搜索到后,不再搜索。优先级如下: https://mariadb.com/kb/en/configuring-mariadb-with-option-files/

Location Scope
/etc/my.cnf Global
/etc/mysql/my.cnf Global
/usr/local/mysql/etc/my.cnf Global
$MYSQL_HOME/my.cnf
$MYSQL_HOME/etc/my.cnf
Server #直接放在这里比较方便
defaults-extra-file File specified with –defaults-extra-file, if any
~/.my.cnf User

或者通过命令帮助快速获取

[root@mhanode102 opt]# mysqld --verbose --help
mysqld: Can't change dir to '/opt/mysql-5.7.27-linux-glibc2.12-x86_64/data/' (Errcode: 2 - No such file or directory)   #处理此报错,创建此目录即可
mysqld  Ver 5.7.27 for linux-glibc2.12 on x86_64 (MySQL Community Server (GPL))
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Starts the MySQL database server.

Usage: mysqld [OPTIONS]

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
The following groups are read: mysqld server mysqld-5.7
The following options may be given as the first argument:
--print-defaults        Print the program argument list and exit.
--no-defaults           Don't read default options from any option file,
                        except for login file.
--defaults-file=#       Only read default options from the given file #.

···
# 不愧是mysql,内置帮助够长,此处省略2000余行
# 有兴趣验证命令:mysqld --verbose --help | wc
...

服务安装总结

总结 由于有些第三方组件(比如mha-manager、percona-xtrabackup-2.4.15-Linux-x86_64等)或mysql组件自身需要读取路径/usr/local/msyql(这是一个指向程序路径/opt/mysql-5.7.29-linux-glibc2.12-x86_64的软件链接,当然也可以是实际的文件),所以建议路径/opt/mysql-5.7.27-linux-glibc2.12-x86_64下面不要有my.cnf,即/opt/mysql-5.7.27-linux-glibc2.12-x86_64/etc/my.cnf,从而保证/usr/local/msyql/etc/my.cnf不存在,以避免从该路径下读取配置文件造成启动报错。

#systemd启动管理,仅与修改后的脚本mysql.server指向的$mysql_home有关,不论其名称、位置。
root@xxx:~# vi /usr/lib/systemd/system/mysql-node2.service
[Unit]
Description=MySQL-node2
SourcePath=/opt/mysql1/mysql.server
Before=shutdown.target
#关机前执行。

[Service]
User=mysql
Type=forking

#修改后的/opt/mysql-node2/suport-files/mysql.server文件可以放在任意路径被调用。比如复制到/opt/mysql-node2/mysql.server
ExecStart=/opt/mysql-node2/mysql.server start
ExecStop=/opt/mysql-node2/mysql.server stop

[Install]
WantedBy=multi-user.target
----
#管理
systemctl daemon-reload
systemctl {start|stop|restart|status} mysql-node2

--defaults-file

Option Description
–print-defaults Read options from option files, print all option values, and then exit the program.
–no-defaults Don't read options from any option file.
–defaults-file =path Only read options from the given option file.
–defaults-extra-file =path Read this extra option file after all other option files are read.
–defaults-group-suffix =suffix In addition to the default option groups, also read option groups with the given suffix.

msyqld_safe

mysqld_safe 是mysqld进程的父进程、守护进程。其具有一定的安全检测机制保证服务可用。官方推荐以mysqld_safe启动。实际启动后,将安全参数传递给mysqld完成子进程监控启动。 Download links

select
Select Version: 5.7.xx latest
Select Operating System: Linux -Generic
Select OS Version: 32bit/64bit

$ /opt/mysql-5.7.29-linux-glibc2.12-x86_64/bin/mysqld_safe \
 --defaults-file=/opt/mysql-5.7.29-linux-glibc2.12-x86_64/my.cnf \
 --basedir=/opt/mysql-5.7.29-linux-glibc2.12-x86_64 \
 --datadir=/opt/mysql_datafile \
 --plugin-dir=/usr/local/mysql/lib/plugin \
 --log-error=error.log \
 --pid-file=/opt/mysql_datafile/mysql.pid \
 --socket=/opt/mysql_datafile/mysql.sock \
 --port=3304 --user=mysql --daemonize   #[回车执行,输出结果如下,完成启动]

2020-02-21T13:43:34.929265Z mysqld_safe Logging to '/opt/mysql_datafile/error.log'.
2020-02-21T13:43:34.961522Z mysqld_safe Starting mysqld daemon with databases from /opt/mysql_datafile
2020-02-21T13:43:37.694123Z mysqld_safe A mysqld process with pid=40624 is already running. Aborting!!  #进入daemon后台。

mysqladmin

mysqladmin variables -uroot -P3306 -h127.0.0.1 -p
Enter password:

error.log

TCP/IP网络层问题

[Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
[Note]   - '0.0.0.0' resolves to '0.0.0.0';
[Note] Server socket created on IP: '0.0.0.0'.
[ERROR] Can't start server: Bind on TCP/IP port: Address already in use    #端口占用(注意不是ip占用),服务无法启动。
[ERROR] Do you already have another mysqld server running on port: 3306 ?  #ss -nlpt 检查是否有残留mysql进程在监听该端口。
[ERROR] Aborting                                                           #更换其它端口。

文件系统与权限问题

# mysql一般被以mysql用户启动,mysql程序目录权限一般不是mysql权限,但mysql的数据目录一般都是自动初始化为了相应的用户权限。
# 所以处理:
# 方式1.修改目录权限,使用mysql执行权限用户可写入相应的路径。
# 方式2.直接将mysql.sock文件通过参数指定到数据目录下。

[ERROR] Could not create unix socket lock file /usr/local/mysql/sock/mysql.sock.lock.    #路径无写
[ERROR] Unable to setup unix socket lock file.                                           #入权限,服务启动失败。
[ERROR] Aborting

[Note] Server socket created on IP: '0.0.0.0'.                                           #此时启动参数--socket="/opt/mysql_datafile/mysql"  ,但数据
[ERROR] Can't start server : Bind on unix socket: Address already in use                 #目录已经存在mysql目录(是为mysql用户库表),因为已存在同名目录创建失败。
[ERROR] Do you already have another mysqld server running on socket: /opt/mysql_datafile/mysql ?   #服务启动失败。
[ERROR] Aborting

[ERROR] /opt/mysql4/bin/mysqld: Can't create/write to file '/opt/mysql_bin/mysql.pid' (Errcode: 13 - Permission    968  denied)
[ERROR] Can't start server: can't create PID file: Permission denied                     #参数--pid-file指定的文件路径无权限写入。服务启动失败。
[Note] Stopping ack receiver thread