mysql5.5 免编译安装及脚本启动报错深入

Mysql安装环境简介:

最近在做MHA。已经安装完毕heartbeat和drbd,现在准备安装Mysql。

Mysql安装目录:/opt/mysql

Mysql数据目录:/data/mysql

备注:/data目录实际是drbd需要同步到备节点的磁盘分区

[[email protected] src]# df -h

Filesystem     Size  Used Avail Use% Mounted on

/dev/sda2      9.5G  2.0G  7.1G 22% /

tmpfs          932M     0  932M  0% /dev/shm

/dev/sda1      190M   58M  123M 32% /boot

/dev/drbd0       19G 832M   17G   5% /data

 

一、Mysql免编译安装(大家可以直接复制在命令行执行或保存至shell脚本)

#1、解压配置

yum install -y libaio-devel

cd /usr/local/src

[ ! -f mysql-5.5.49-linux2.6-x86_64.tar.gz ] && \

wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.49-linux2.6-x86_64.tar.gz

tar zxf mysql-5.5.49-linux2.6-x86_64.tar.gz

mkdir /opt/

mv mysql-5.5.49-linux2.6-x86_64 /opt/mysql-5.5.49

ln -s /opt/mysql-5.5.49  /opt/mysql

#2、创建用户

if ! id mysql;then

useradd mysql -s /sbin/nologin -M

fi

#可以减写:! id mysql && useradd mysql -s /sbin/nologin -M ####

#还有一种脱裤子放屁的做法。

#groupadd mysql

#useradd -g mysql-M mysql

#用useradd mysql时就会创建mysql组,搞不懂为什么还先添加组

#3、初始化数据库,单实例启动

/opt/mysql/scripts/mysql_install_db --datadir=/data/mysql --basedir=/opt/mysql --user=mysql

cp /etc/my.cnf  /etc/my.cnf.ori

grep -Ev "#|^$" /opt/mysql/support-files/my-innodb-heavy-4G.cnf  > /etc/my.cnf

cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld

chkconfig mysqld on

#chmod +x /etc/init.d/mysqld (默认已有x权限)

#4、添加环境变量

echo "PATH=/opt/mysql/bin:$PATH" >> /etc/profile

. /etc/profile

#4、修改/etc/my.cnf或/etc/init.d/mysqld (暂时不修改,让脚本启动报错)

basedir=/opt/mysql

datadir=/data/mysql

***************************************************************************************

1、安装错误

[[email protected] src]#/opt/mysql/scripts/mysql_install_db --datadir=/data/mysql --basedir=/opt/mysql--user=mysql

Installing MySQL system tables...

/opt/mysql/bin/mysqld: errorwhile loading shared libraries: libaio.so.1: cannot open shared object file: Nosuch file or directory

解决:yum install -y libaio-devel

2、启动报错1:没指定basedir和datadir

[[email protected] src]#service mysqld start

/etc/init.d/mysqld: line 256: my_print_defaults: command notfound

/etc/init.d/mysqld: line 276: cd: /usr/local/mysql: No suchfile or directory

Starting MySQL ERROR!Couldn‘t find MySQL server (/usr/local/mysql/bin/mysqld_safe)

3、启动报错2

如果指定了basedir=/opt/mysql,但datadir=  为空时,启动会报错。

[[email protected] src]#service mysqld restart

ERROR! MySQL server PID file could not befound!

Starting MySQL.ERROR! The server quit without updating PID file (/opt/mysql/data/mysql1.pid).

[[email protected] src]#vi /etc/init.d/mysqld

4、启动报错3

也是basedir和datadir都没指定

[[email protected] src]#service mysqld restart

/etc/init.d/mysqld:line 256: my_print_defaults: command not found

/etc/init.d/mysqld:line 256: my_print_defaults: command not found

ERROR! MySQL server PID file could not befound!

/etc/init.d/mysqld:line 256: my_print_defaults: command not found

/etc/init.d/mysqld:line 276: cd: /usr/local/mysql: No such file or directory

Starting MySQLERROR! Couldn‘t find MySQL server (/usr/local/mysql/bin/mysqld_safe)

***********************************************************************************

前几天解决了生产环境的脚本报错的问题,现把报错原理分析总结下:

请看下面/etc/init.d/mysqld的启动脚本加粗部分解释。

# If you install MySQL on some other placesthan /usr/local/mysql, then you

# have to do one of the following things for thisscript to work:

#

# - Run thisscript from within the MySQL installation directory

# - Create a/etc/my.cnf file with the following information:

 [mysqld]

 basedir=<path-to-mysql-installation-directory>

# - Add the aboveto any other configuration file (for example ~/.my.ini)

#   and copy my_print_defaults to /usr/bin

# - Add the pathto the mysql-installation-directory to the basedir variable

#   below.

#

# If you want toaffect other MySQL variables, you should make your changes

# in the/etc/my.cnf, ~/.my.cnf or other MySQL configuration files.

# If you changebase dir, you must also change datadir. These may get

# If you changebase dir, you must also change datadir. These may get

# overwritten bysettings in the MySQL configuration files.

basedir=

datadir=

# Default value,in seconds, afterwhich the script should timeout waiting

# for serverstart.

# Value here isoverriden by value in my.cnf.

# 0 means don‘twait at all

# Negative numbersmean to wait indefinitely

service_startup_timeout=900

# Lock directoryfor RedHat / SuSE.

lockdir=‘/var/lock/subsys‘

lock_file_path="$lockdir/mysql"

# The followingvariables are only set for letting mysql.server find things.

# Set somedefaults

mysqld_pid_file_path=

if test -z "$basedir"

then

 basedir=/usr/local/mysql

 bindir=/usr/local/mysql/bin

  if test -z"$datadir"

  then

   datadir=/usr/local/mysql/data

  fi

 sbindir=/usr/local/mysql/bin

 libexecdir=/usr/local/mysql/bin

else

 bindir="$basedir/bin"

  if test -z"$datadir"

else

 bindir="$basedir/bin"

  if test -z"$datadir"

  then

   datadir="$basedir/data"

  fi

 sbindir="$basedir/sbin"

 libexecdir="$basedir/libexec"

fi

翻译:

1、如果basedir没有指定mysql安装路径,启动脚本就会以/usr/local/mysql做为安装路径启动。所以mysql没有安装在/usr/local下,启动必失败

2、如果basedir=/opt/mysql指定了mysql安装路径,并且mysql安装的路径是在/opt/mysql情况下。但datadir= 为空时,启动脚本会将$basedir/data(即/opt/mysql/data)做为mysql的数据目录。平时我们习惯将data目录放在/data/mysql下。此时启动会报错:

Starting MySQL. ERROR! The server quit without updatingPID file (/opt/mysql/data/mysql1.pid).

3、总结:用/etc/init.d/mysql启动时,最好在/etc/init.d/mysqld里设置basedir和datadir的值。或者在/etc/my.cnf 里[mysqld]下添加

[mysqld]

#port           = 3306

socket          = /tmp/mysql.sock

basedir=/opt/mysql

datadir=/data/mysql

不知道有没说明白。 建议大家再看看mysql启动脚本的文件。

心得:最近mysql遇到不少问题,庆幸大部分出错都能通过日志在百度上搜索出来。说明mysql使用的火热程度及大家的分享精神

时间: 2025-01-30 18:09:01

mysql5.5 免编译安装及脚本启动报错深入的相关文章

安装mongodb后启动报错libstdc++

安装mongo后启动报错如下图 显然说是libstdc++.so文件版本的问题,这种一般都是gcc版本太低了 接着查询gcc的版本    strings /usr/lib/libstdc++.so.6 | grep GLIBCXX 接着去找下libstdc++.so新点的版本,一定要根据自己的系统版本去找啊,由于我找错了版本报错系统位数不对 随后下载了一个64位的libstdc++.so.6.0.17的文件,然后软链成libstdc++.so.6 ln -s libstdc++.so.6.0.1

安装Rational Rose启动报错:无法启动此程序,由于计算机中丢失 suite objects.dll。

执行Rational Rose的时候假设出现这种错误,先检查环境变量有没有common的地址,假设没有直接配上就OK:配置例如以下:D:\Program Files\Rational\Common; 我的win7直接使用大写的Common路径没有出现以下资料说的问题:假设有的能够依照以下资料再次改动下: 以下资料来自于网络: 安装完以后提示找不到 suite objects.dll: 经查找,该 dll 存在: 找不到的原因是,安装程序自己主动设置在 Path 中的环境变量有误: 更改例如以下:

安装Rational Rose启动报错:无法启动此程序,因为计算机中丢失 suite objects.dll。

运行Rational Rose的时候如果出现这样的错误,先检查环境变量有没有common的地址,如果没有直接配上就OK:配置如下:D:\Program Files\Rational\Common; 我的win7直接使用大写的Common路径没有出现下面资料说的问题:如果有的可以按照下面资料再次修改下: 下面资料来自于网络: 安装完以后提示找不到 suite objects.dll: 经查找,该 dll 存在: 找不到的原因是,安装程序自动设置在 Path 中的环境变量有误: 更改如下: 右击我的

新安装的MySQL启动报错The server quit without updating PID file

安装的MySQL启动报错The server quit without updating PID file [[email protected] mysql]# service mysqld restart MySQL server PID file could not be found!                  [失败] Starting MySQL.The server quit without updating PID file (/[失败]ysql/l ocalhost.loc

【转】解决编译安装NGINX时make报错

编译参数:--[[email protected]]#./configure--user=nginx--group=nginx--prefix=/usr/local/nginx--with-http_stub_status_module--with-http_ssl_mod 编译参数: --[[email protected] nginx-1.4.6]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with

新安装Windows 2012 启动报错0xc0000225

HP 台式机,支持UEFI安装:原有的机械硬盘安装了过Windows 2008,后删除掉系统盘,重新格式为数据盘,但是仍然是GPT分区. 加一块SSD硬盘. 用U盘启动安装Windows 2012.(这种安装方式,不支持UEFI,不支持安装到GPT硬盘,只支持安装到MBR硬盘) 启动后报错0xc0000225,回车后可以启动Windows 2012.问题是这样多麻烦啊 排错: 拔掉老的机械式大硬盘,启动一点问题木有啊 问题的解决: 后来在机器BIOS里面发现,原来BIOS里面优先启动UEFI设备

Yum编译安装Error Downloading Packages报错

1:执行yum clean all 清除缓存目录下的软件包及旧的headers: 2:接着执行 yum list重新列出所有已经安装和可以安装的软件包: 3:重新执行上述命令,发现yum编译成功: 注意:如果执行 yum list 报错,那就检查一下yum仓库是否有问题:并清除/etc/yum.repos.d/下多余.repo文件!

编译安装php5.6.30报错

[[email protected]_id01_u4_19.116 Software]# cat /etc/redhat-release CentOS release 6.8 (Final)...编译报错:make: *** [sapi/cli/php] Error 1 分析在编译安装php时出现 [undefined reference to libiconv_open']子类的错误信息,表示在 ./configure 没抓好些环境变数值,错误发生点在建立 [ -o sapi/cli/php]

centos7 安装docker后启动报错

启动docker $ sudo systemctl start docker 报错. 查看状态: $ systemctl status docker.service -l 加 -l 有的行信息很长,打印的时候会省略,加此参数则全部显示. 报错信息: Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel. Either boot into a newer kerne