【背景】
公司某项目,用的是mysql 5.5版本,但在上线前讨论决定统一为5.7版本;于是想把原来安装了5.5版本的服务器升级为5.7版本;
具体过程是:保持5.5版本正常提供服务,然后源码编译安装5.7版本,在安装完毕启动服务测试没有问题后,导出5.5版本的数据。然后导入5.7版本,等测试彻底没有问题后,停止5.5版本,然后将项目彻底切换到5.7版本;为了保证万无一失,先找了另外一台服务器 模拟安装,升级了一遍;在安装过程中,遇到了以下的一些问题:
【问题描述】
安装完毕后,如果先启动5.5版本,则5.7版本就启动失败; 如果把5.5版本stop;然后如果先启动5.7版本,则5.5版本就启动失败;
并且报错都是:
Starting MySQL.. ERROR! The server quit without updating PID file
【关键文件】
5.5版本:
basedir:/home/work/app/mysql_5_5_41
datadir:/home/work/app/mysql_5_5_41/data
pid-file:/home/work/app/mysql_5_5_41/data/fzsf.serverbackup.pid
socket:/tmp/mysql55.sock
config-file:/home/work/app/mysql_5_5_41/my.cnf
5.7版本:
basedir:/home/work/app/mysql_5_7_18
datadir:/home/work/app/mysql_5_7_18/data
pid-file:/home/work/app/mysql_5_7_18/data/fzsf.serverbackup.pid
socket:/tmp/mysql57.sock
config-file:/home/work/app/mysql_5_7_18/my.cnf
一直找不到问题的原因在哪里:查看err_log文件,好像提示端口号都使用了3306 ,但是我在两个不同的配置文件中.cnf使用的端口号的确是不一样的,一个是3306,一个是3307,那么是不是mysql启动加载配置文件的时候,压根就没有加载上述的两个配置文件呢?
用以下命令查看了下mysql 加载配置文件的默认顺序:
[root@fzsf bin]# ./mysql --help|grep 'my.cnf'
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /home/work/app/mysql_5_5_41/etc/my.cnf ~/.my.cnf
于是我把配置文件mv到各自的datadir/etc/my.cnf 启动时还说不行,第二天上班时,我准备将配置文件就放到basedir/my.cnf 再试试:
config-file:/home/work/app/mysql_5_5_41/my.cnf
config-file:/home/work/app/mysql_5_7_18/my.cnf
结果,还真是,问题解决了。
root@fzsf mysql_5_5_41]# /etc/init.d/mysqld55 start
Starting MySQL.. SUCCESS!
[root@fzsf mysql_5_5_41]# /etc/init.d/mysqld57 start
Starting MySQL. SUCCESS!
[root@fzsf mysql_5_5_41]# ps aux | grep mysqld | grep -v grep
root 6653 0.0 0.0 106212 1548 pts/0 S 10:26 0:00 /bin/sh /home/work/app/mysql_5_5_41/bin/mysqld_safe --datadir=/home/work/app/mysql_5_5_41/data --pid-file=/home/work/app/mysql_5_5_41/data/fzsf.serverbackup.pid
mysql 6930 0.0 0.5 485080 45376 pts/0 Sl 10:26 0:00 /home/work/app/mysql_5_5_41/bin/mysqld --basedir=/home/work/app/mysql_5_5_41 --datadir=/home/work/app/mysql_5_5_41/data --plugin-dir=/home/work/app/mysql_5_5_41/lib/plugin --user=mysql --log-error=/home/work/app/mysql_5_5_41/data/fzsf.serverbackup.err --pid-file=/home/work/app/mysql_5_5_41/data/fzsf.serverbackup.pid --socket=/tmp/mysql55.sock --port=3306
root 6965 0.0 0.0 106216 1572 pts/0 S 10:26 0:00 /bin/sh /home/work/app/mysql_5_7_18/bin/mysqld_safe --datadir=/home/work/app/mysql_5_7_18/data --pid-file=/home/work/app/mysql_5_7_18/data/fzsf.serverbackup.pid
mysql 7120 0.0 2.4 1894552 197780 pts/0 Sl 10:26 0:00 /home/work/app/mysql_5_7_18/bin/mysqld --basedir=/home/work/app/mysql_5_7_18 --datadir=/home/work/app/mysql_5_7_18/data --plugin-dir=/home/work/app/mysql_5_7_18/lib/plugin --user=mysql --log-error=/home/work/app/mysql_5_7_18/data/fzsf.serverbackup.err --pid-file=/home/work/app/mysql_5_7_18/data/fzsf.serverbackup.pid --socket=/tmp/mysql57.sock --port=3307
查看端口:
netstat -anp|grep 3306
netstat -anp|grep 3307
都监听了;
总结:对于mysql在安装时默认的行为以及my.cnf 文件被默认搜索的路径的先后顺序搞明白了,这样的问题,还是能迎刃而解;
夜深了,晚安!俗话说:幸福是奋斗出来的?
最后附上一张闺女的靓照,为自己加油打气;
领取专属 10元无门槛券
私享最新 技术干货