当同一台主机搭建多个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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)