从启动脚本分析mysql读取my.cnf配置的顺序

从启动脚本分析mysql读取my.cnf配置的顺序,第1张

当同一台主机搭建多个mysql实例,在利用service mysql start时候,会因为读取/etc/mycnf导致启动报错。而网上说的/etc/mycnf -> /etc/mysql/mycnf -> /usr/local/mysql/etc/mycnf -> ~/mycnf顺序并没有鸟用,有时会花费很长时间定位,现从启动脚本分析mysql的启动原理。

一、我的环境共存在三台3台mysql

1)、第一台为rpm包装的mysql(一般系统会自带mysql就是rpm安装的),默认安装路径为/usr/local,默认的配置文件为/etc/mycnf。

2)、其他两台新增mysql安装路径分别为:/home/mysql-5721、/home/mysql-5721_two,配置文件分别为:/home/mysql-5721/mycnf、/home/mysql-5721_two/mycnf

3)、启动脚本:我的习惯是将$MYSQL_HOME/support-files/mysqlserver复制到/etc/initd/下面,并重命名,如下图:mysql1和mysql2分别为两台新增mysql的启动脚本,可利用service mysql1 start和service mysql2 start启动(分别修改了--basedir和--datadir)。

二、以/etc/initd/mysql1分析启动脚本

1)、启动脚本的核心思想是,先利用(parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysqlserver`)语句获取配置文件中的参数。然后利用($bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &)启动mysql实例。

2)、问题的关键点就在$print_defaults $extra_args mysqld server mysql_server mysqlserver

故我的获取配置文件的参数实际是通过如下语句获取:

但是此时存在一个问题:

脚本的执行结果显示,不仅读取到了/home/mysql-5721/mycnf中的内容,还读取到了/etc/mycnf中的参数。那么mysql1脚本只修改--basedir和datadir显然不行,仍然会由于/etc/mycnf导致问题。其实如果~/mycnf如果也存在的话,~/mycnf中的参数也会被读取出。

这时候就需要用到"--defaults-file"参数

再回到$extra_args参数的获取脚本,会发现只要$basedir/mycnf存在就会被同时读取,而我们的目的是只读取这个配置文件。

所以:我们可以修改下这个脚本,将extra_args的值变为 --defaults-file =$basedir/mycnf,这样煤气启动就只读取这个配置文件,如果$basedir/mycnf不存在或没有可读权限,直接提示报错。

三、$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null & 启动时

1)、新的问题:

我的$basedir/mycnf中明明没有ndb-connectstring=1721631111参数,怎么会提示这个变量无法识别呢?

查看/etc/mycnf发现这个参数确实存在,funk!!!但上面明明只读取$basedir/mycnf中配置文件了啊!

2)、查看mysqld_safe的使用方法

也就是,需要在利用mysqld_safe启动时候再指定下配置,让其只读取$basedir/mycnf。故在启动行加入--defaults-file="$basedir/mycnf"

总结:在将mysqlserver复制到/etc/initd后,有删除需要配置修改,到此为止新增的mysql已经能够读取指定配置文件启动

遗留问题:

为什么读取指定配置文件后,$bindir/mysqld_safe还是读取/etc/mycnf?故,还需对mysqld_safe做出debug分析,待补充,欢迎到时查看!

  在进入到官网下载的时候,我们会发现官网上提供了很多类型的版本,它们到底是什么意思,哪个才是我们需要的呢下面就来简单介绍下常见的,如下:

   1、MySQL Enterprise Edition: Mysql企业版本,包含了最新的特性和管理工具,以及可以提供技术支持( 但是是要收费 )。

   2、MySQL Cluster CGE: 一个用于高吞吐量快速、稳定的访问数据的开源事务数据库,它包含了MySQL Cluster、MySQL Enterprise Edition、MySQL Cluster Manager的功能。

   3、MySQL Community (GPL) :遵循GPL开源协议的MySQL版本,平常我们使用的大多数遵循这个协议下的社区版

   4、MySQL Installer : 是一个安装管理程序,因为MySQL家族包括了许多产品,所以提供了一个统一管理下载的工具。

   5、MySQL Community Server : MySQL Community (GPL)下的开源社区版本,是使用的数据库开源版本( 免费的,盘它 )。

   6、Mysql Workbench : 类似navicat是个图形界面UI工具,可以实现远程Mysql数据库访问(一开始不建议直接使用图形化管理工具,建议先通过命令行了解,这样能够更快的认识Mysql, 高手都是用命令行的 (PS: 如有需要图形化工具的可以私我))。

  到官网下载自己需要的版本(>

#查看mysql命令的路径

root@msc3:~# which mysqld

/usr/sbin/mysqld

#执行下边命令找到mycnf

root@msc3:~# /usr/sbin/mysqld --verbose --help |grep -A 1 'Default options'

Default options are read from the following files in the given order:

/etc/mycnf /etc/mysql/mycnf ~/mycnf

打开CMD后默认是C:\

直接输入D:\    进入D盘目录

再输入cd Program Files\MySQL\MySQL Server 50\bin

cd Program Files

cd MySQL

cd MySQL Server 50

cd bin

一步一步输,这样清楚了吧?

这样就进去了。但很麻烦

最好直接加到系统变量PATH里。这样打开CMD直接输入MYSQL -u root-p就行了

下面这个图是加下系统变量的。在我的电脑属性高级里,路径你自己改,不要按我的填哈!注意,两个路径变量间要用英文的分号隔开!

建立运行账户了吗?

这是我自己用的

rh系列一直没有问题

你对比下然后试试

#groupadd

mysql

#useradd

–g

mysql

mysql

#tar

zxvf

mysqltargz

#cd

mysql/

#

/configure

\

--prefix=/usr/local/mysql

--with-charset=utf8

\

--with-collation=utf8_general_ci

\

--with-extra-charsets=all

\

--with-mysqld-ldflags=-all-static

make

make

install

#cp

support-files/my-mediumcnf

/etc/mycnf

//拷贝my-mediumcnf文件

#cd

/usr/local/mysql

//进入mysql目录

#bin/mysql_install_db

--user=mysql

/需要重启服务

#chown

-r

root

//将文件的所有属性改为root用户

#chown

-r

mysql

/usr/local/mysql/var

//将数据目录的所有属性改为mysql用户

#chgrp

-r

mysql

//将组属性改为mysql组

#bin/mysqld_safe

--user=mysql

&

//启动mysql

以上就是关于从启动脚本分析mysql读取my.cnf配置的顺序全部的内容,包括:从启动脚本分析mysql读取my.cnf配置的顺序、《从0到1 最详细的MySQL安装流程(Window版)、mysql查看正在使用配置文件路径 my.cnf等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9560284.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存