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
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. |
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 variables -uroot -P3306 -h127.0.0.1 -p Enter password:
[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