admin 管理员组

文章数量: 1086019


2024年12月24日发(作者:fclose()函数返回一个什么)

一、先要卸载原先装的mysql以及软件包

1. 查找以前是否装有mysql

命令:rpm -qa|grep -i mysql

可以看到如下图的所示:

说明之前安装了:

5

5

2. 停止mysql服务、删除之前安装的mysql

删除命令:rpm -e –nodeps包名

# rpm -ev 5

# rpm –ev-–nodeps 5

3. 查找之前老版本mysql的目录、并且删除老版本mysql的文件和库

命令find / -name mysql

查找结果如下:

[root@localhost ~]# find / -name mysql

/var/lib/mysql

/var/lib/mysql/mysql

/usr/lib64/mysql

删除对应的mysql目录

rm -rf /var/lib/mysql

rm -rf /var/lib/mysql

rm -rf /usr/lib64/mysql

具体的步骤如图:查找目录并删除

4. 注意:卸载后/etc/不会删除,需要进行手工删除

rm -rf /etc/

5. 再次查找机器是否安装mysql

rpm -qa|grep -i mysql

无结果,说明已经卸载彻底、接下来直接安装mysql即可

/var/lib/mysql/ #数据库目录

2 /usr/share/mysql #配置文件目录

3 /usr/bin #相关命令目录

4 /etc/init.d/mysql #启动脚本

二、安装mysql数据库(所用的版本为mysql-5.7.13-linux-glibc2.5-x86_)

1. 创建mysql用户和用户组

A:用root用户登录系统,在root用户主目录下创建mysql用户和用户

2. 拷贝mysql包

a) 切换用户,进入刚创建的mysql用户主目录,

b) 将mysql-5.7.13-linux-glibc2.5-x86_拷贝到mysql用

户的主目录下。

c) 解压mysql-5.7.13-linux-glibc2.5-x86_文件到mysql

用户主目录下($tar -zxvf

mysql-5.7.13-linux-glibc2.5-x86_)

d) 解压成功之后,进入mysql目录查看,为了简单,将解压后的目录

重命名为mysql-5.7.13

3. 安装数据库

a) 进入 /home/mysql/mysql-5.7.13/目录下,在此目录下创建文件

夹data,作为mysql的数据目录,修改所属用户和用户组,并修改

其权限。

b) 进入 /home/mysql/mysql-5.7.9/bin 执行下列命令

[mysql@CentOSSeven bin]$ ./mysql_install_db --user=mysql

--basedir=/home/mysql/ --datadir=/home/mysql/mysql-5.7.13/data

出现错误信息:

2015-11-19 06:49:00 [WARNING] mysql_install_db is deprecated. Please

consider switching to mysqld --initialize

2015-11-19 06:49:07 [ERROR] The bootstrap log isn't empty:

2015-11-19T14:49:01.888730Z 0 [ERROR] Can't read from messagefile

'/usr/share/mysql/english/'

c) 提示mysql_install_db 命令已弃用,使用mysqld

[mysql@localhost bin]$ ./mysqld --user=mysql --basedir=/home/mysql/

--datadir=/home/mysql/mysql-5.7.13

2015-11-19T14:50:18.145225Z 0 [Warning] Changed limits: max_open_files:

1024 (requested 5000)

2015-11-19T14:50:18.145526Z 0 [Warning] Changed limits:

table_open_cache: 431 (requested 2000)

2015-11-19T14:50:20.812061Z 0 [Note] Shutting down plugin 'binlog'

2015-11-19T14:50:20.813161Z 0 [Note]

4. 配置文件

a) 进入root用户主目录,执行下列语句:

cd /home/mysql/mysql-5.7.13/support-files

mv /etc/

/etc/init.d/mysql

b)

通过命令vim /etc/init.d/mysql 编辑mysql文件,修改下面的两项

basedir=/home/mysql/mysql-5.7.13

datadir=/home/mysql/mysql-5.7.13/data

5. 配置环境变量

a) 切换到mysql用户主目录下

b) 编辑.bash_profile,通过命令(vi .bash_profile)

在其中加入export MYSQL_HOME=/home/mysql/mysql-5.7.13

exportPATH=$PATH:$MYSQL_HOME/bin

6. 添加开机服务

chkconfig --add mysql

chkconfigmysql on

7. 启动mysql

在mysql用户主目录执行命令service mysql start

三、问题解决

1. 问题描述:

MySQL server PID file could not be found! 或mysql PID file not

found and Can’t connect to MySQL through socket

问题解决:

这篇文章主要介绍了MySQL下PID文件丢失的相关错误的解决方法,具体的提示可能会是

"mysql PID file not found and Can’t connect to MySQL through socket ",需要的

朋友可以参考下

今天同事A找到我,说是Mysql server X的负载很高,查询很慢。他自己捣鼓了一阵未果

后,我们一起看了下。

[root@redhatvar]# uname -a

Linux xxx 5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 x86_64x86_6

4 GNU/Linux

[root@redhatvar]# mysql -u root -p -e “select version();”

+------------+

| version() |

+------------+

| 5.1.32-log |

+------------+

同事A的操作:

A一看mysql server有问题第一反应是重启mysql server,囧!!o(╯□╰)

但是又使用了错误的命令

[root@redhatvar]# /var/lib/mysql/libexec/mysqld restart ----操作①

100708 14:43:53 [ERROR] Fatal error: Please read "Security" section of the manu

al to find out how to run mysqld as root!

100708 14:43:53 [ERROR] Aborting

100708 14:43:53 [Note] /var/lib/mysql/libexec/mysqld: Shutdown complete

发现问题后,他又想起来应该是用下面的命令重启

[root@redhatvar]# service mysql restart ----操作②

MySQL manager or server PID file could not be found! [FAILED]

CTRL+C取消

这时候

[root@redhatvar]# ps aux | grepmysql

可以看到,系统又启动了一个Mysql进程,但是过一会后,会自动消失,这时候看日志可以

发现以下错误:

100708 15:26:52 [ERROR] Can't start server: Bind on TCP/IP port: Address alread

y in use

100708 15:26:52 [ERROR] Do you already have another mysqld server running on po

rt: 30017 ?

100708 15:26:52 [ERROR] Aborting

然后后面我们一起看。

首先我用client工具连接,发现mysql正常。web应用连接数据库也正常只是查询很慢。

其次我在命令下面,连接:

[root@redhatvar]# mysql -u root -p

提示:

Enter password:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/my

' (2)

这时候同事A提醒我,可以重启服务没关系。囧,o(╯□╰)o,他在建议我重启解决问题。

好吧,如他所愿。于是我先:

[root@redhatvar]# servicemysql stop

MySQL is running but PID file could not be found

然后去mysql data dir下面查看,果然没有pid file。

这时候我的第一反应是配置文件不对,导致不能正常停止和重启。

由于server是好的,因此我没有急着去比较以前备份的/etc/和/etc/。

我们先查找负载高的原因。因为命令行下无法进入mysql,在client下使用

复制代码

代码如下:

showprocesslist;

可以看到里面有很多locked的查询,其中等待时间最久的一个是一个select查询,显示正

在sending data,然后其余都是locked。

猜想是sending data的线程占用了“所有的分配给mysql的资源”,导致后来的线程全部挂

起,由于“查询(线程)是依次执行的”,后面locked的线程一直在等待前面sending data

的线程结束。(这一段是猜想的…)

sending data的这个线程U是一个select 查询,这个select对6张表进行了连接(公司的

一个实习生提交的一个查询),其中有两张表的数据量在10w左右,另外有张data表数据

量在 1000w左右,另外还有sum(distinct ) ,group by,order by… 可以想象下…不知道

要到何年何月这个查询才能执行完。

这个sending data的慢查询的processid为799,当机立断运行

复制代码

代码如下:

kill 799

然后再运行

复制代码

代码如下:

showprocesslist;

可以看到前面locked的线程在一个个依次执行,后面还有好多个跟线程U类似的select线

程,全部kill掉后,被堵塞的别的正常的几个Update,select,insert操作很快就执行完了。

而后,web应用恢复正常,速度变快。

返回linux命令行,使用

[root@redhatvar]# top

<1 显示cpu使用情况>

这时候可以发现server负载恢复正常。

下面解决无法正常关闭重启的情况。

也就是因为前面同事的误操作引起的

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/my

' (2)

和MySQL manager or server PID file could not be found! [FAILED]

的错误。

我前面不是怀疑是配置文件里面有什么无法识别的参数选项么。

通过

[root@redhatvar]# diff /etc/ /etc/

发现,配置文件没有问题。

#我的server的hostname,mysqlpid文件默认名字为,如果没有在/etc/my.

cnf里面指定特定和pid filename和pid file path的话,这个文件是跟mysql数据在一起的。

[root@redhatvar]# diff /etc/ /etc/

这时候通过

#切换到mysql data dir(mysql的数据文件目录下)

#你们的mysql data dir或许跟我的不一样哦,我的是/var/lib/mysql/var/

[root@redhatvar]# cd /var/lib/mysql/var/

获取mysql用户运行的mysql进程的pid,然后导入到文件里面

[root@redhatvar]# echo `ps aux | grepmysql | grep "user=mysql" | grep -v "grep"

| awk '{print $2}'`>>

#注意这里的跟hostname相关,这里是我的

将文件的属主和属主组改为mysql:mysql

[root@redhatvar]# chownmysql:

然后运行

[root@redhatvar]# mysql -u root -p

还是会提示:

Enter password:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/my

' (2)

[root@redhatvar]# ls /tmp | grep sock

果然没有这个文件

但是这时候运行

[root@redhatvar]# servicemysql status

显示

MySQL running (10949) [ OK ]

恩,pid file文件恢复正常,然后运行

[root@redhatvar]# servicemysql restart

Shutting down MySQL.[ OK ]

Starting MySQL.[ OK ]

这时候再运行

[root@redhatvar]# ls /tmp | grep sock

可以发现重启后,/tmp下有了这个文件。

大家可以搜索下的用途以及使用产生等等。

同事A的操作①导致pid文件丢失,操作②导致文件丢失,大家感兴趣可以去v

i mysqld脚本和server mysql脚本,然后导致service mysql status/stop/start/restart运行

异常,导致命令行下mysql -u root -p登录mysql异常。

That's all.

2. 问题描述:

MySQL server PID file could not be found![失败]

The server quit without updating PID file

(/usr/local/mysql/data/).[失败]

问题解决:

Google了下,问题可能的原因有多种,具体什么原因最好的办法是先查看下错误

日志:

1、可能是/usr/local/mysql/data/文件没有写的权限

解决方法:给予权限,执行 “chown -R mysql:mysql /var/data” “chmod -R 755

/usr/local/mysql/data” 然后重新启动mysqld!

2、可能进程里已经存在mysql进程

解决方法:用命令“ps -ef|grepmysqld”查看是否有mysqld进程,如果有使用“kill

-9 进程号”杀死,然后重新启动mysqld!

3、可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。

解决方法:去mysql的数据目录/data看看,如果存在,就赶快

把它删除掉吧,它就是罪魁祸首了。本人就是使用第三条方法解决的!

4、mysql在启动时没有指定配置文件时会使用/etc/配置文件,请打开这

个文件查看在[mysqld]节下有没有指定数据目录(datadir)。

解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data

5、skip-federated字段问题

解决方法:检查一下/etc/文件中有没有没被注释掉的skip-federated字段,

如果有就立即注释掉吧。

6、错误日志目录不存在

解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限

7、selinux惹的祸,如果是centos系统,默认会开启selinux

解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为

SELINUX=disabled后存盘退出重启机器试试。


本文标签: 文件 用户 目录 使用 解决