同一台服务器上安装mysql5.5和mysql5.7 不同版本的实例

hello,大家好,我是jordy,欢迎大家一起交流学习,我的qq:1760282809,363232564 ;

【背景】

公司新启动的项目,之前因为历史原因,选择数据库版本的时候决策失误,刚开始的时候用的是mysql 5.5版本,但在上线前讨论决定统一为5.7版本;于是想把原来安装了5.5版本的服务器升级为5.7版本;具体过程是:保持5.5版本正常提供服务,然后源码编译安装5.7版本,在安装完毕启动服务测试没有问题后,导出5.5版本的数据。然后导入5.7版本,彻底没有问题后,stop5.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
都监听了;
 
同时,如果在/etc/init.d/mysql55 或mysql57 用这脚步启动实在排查不出问题的时候,直接可以进入到各自的basedir/bin 目录后,用命令启动,类似:
mysqld_safe --defaults-file=/path/my57.cnf &
 
mysql 导出数据库:
mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysql 导入数据库:
登录到mysql后,执行命令: source 数据库文件路径
mysql> source /tmp/xxx.sql

查看数据库创建:
show create database dbname
CREATE DATABASE `fzsf_dev` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */
 
mysql 5.5 版本修改用户密码:
update user set Password = PASSWORD('123') WHERE user = 'root';
flush privileges;

5.7及以上版本,修改密码:
update user set authentication_string = PASSWORD('test3g4ip&') WHERE user = 'root';
flush privileges;

启动数据库时,查看当前版本默认的sql_mode的值:
mysql> select @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                                                |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
 
如果需要修改mysql5.7版本默认的sql_mode的值,则需要在.cnf 文件中 显式增加sql_mode项并定义其值,如:
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

查看mysql 版本的方法:
1.在basedir/bin/下,执行mysqld -V 
2.mysql>select version();

给数据库增加不同权限的账号:
项目中调用时的账号(应用和数据位于同一个机器上时:)


grant select, insert, update, delete on *.* to 'testfzsf_pro'@'localhost' identified by 'test&$ka2s';
grant select, insert, update, delete on *.* to 'testfzsf_inner'@'172.19.22.%' identified by 'test*YPvzT';


项目中调用时的账号(应用和数据位于不同一个机器上时:)
grant select, insert, update, delete on *.* to 'testfzsf_pro'@'x.x.x.x' identified by 'test&$ka2s';

grant select, insert, update, delete on *.* to 'testfzsf_inner'@'172.19.22.%' identified by 'test*YPvzT';

如果是想用mysqladmin,比如要新建一个用户用mysqladmin来备份数据库,则这个用户必须要有super权限;
如 GRANT all   ON *.* TO 'backer@'localhost'  identified by 'test*YPvzT';

消除权限:
如 revoke all privileges on *.* to 'username'@'host';
 
查看某个账号的权限:
show grants for yfbfzsf_pro@'localhost';

在mysql 数据库内核中 ,数据库 账号 权限的 优先级默认顺序是:
【gloal, db, table, column 四个级别】
权限问题很有意思,等有时间我会给大家一一补充说明,嘿嘿^_^
具体的加载顺序及流程,在持续跟踪,自测并研究中......
 
欢迎大家一起多多交流,我的qq:1760282809,363232564
祝大家工作愉快~ 
【大家可搜索并关注我的微信公众号,名称:jordy的世界
后续会有持续更新,更多精彩等着您!】



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值