同一服务器上二进制安装mysql5.7和mysql5.6

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 一、二进制包与源码包的区别 二进制包和源码包是软件包的两种形式。源码包里面包含程序原始的代码,需要在计算机上进行编译后才可以产生可运行程序,所以源码安装时间会比较长;而二进制包里面包含已经编译过、可马上运行的程序,一般只需下载解包后即可使用。

一、二进制包与源码包的区别

二进制包和源码包是软件包的两种形式。源码包里面包含程序原始的代码,需要在计算机上进行编译后才可以产生可运行程序,所以源码安装时间会比较长;而二进制包里面包含已经编译过、可马上运行的程序,一般只需下载解包后即可使用。

rpm格式的包很好区分。二进制格式的包名字往往很长,并带有版本号、适应平台、适应硬件类型等信息,例如:mysql-5.7.24-el7-x86_64.tar.gz就是二进制包;而源码包仅仅就是带有版本号的tar包,例如:mysql-5.7.14.tar.gz

二、安装前准备

安装前最重要两个准备步骤就是:检查是否有默认的mysql,规划好目录。

1、检查是否默认的mysql
[root@jt ~]# rpm -qa |grep mysql
[root@jt ~]#
说明没有

2、规划好目录
准备在服务器上安装mysql5.6和5.7,所以安装目录和数据目录需要规划清晰,至少数据目录所在磁盘分区要足够大。

[root@jt ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  2.3G   35G   7% /
devtmpfs        911M     0  911M   0% /dev
tmpfs           920M     0  920M   0% /dev/shm
tmpfs           920M  340K  920M   1% /run
tmpfs           920M     0  920M   0% /sys/fs/cgroup
tmpfs           184M     0  184M   0% /run/user/0
[root@jt ~]# mkdir /usr/local/mysql-5.7
[root@jt ~]# mkdir /usr/local/mysql-5.6
[root@jt ~]# mkdir -p /mydata/mysql-5.7
[root@jt ~]# mkdir -p /mydata/mysql-5.6

根分区空间最大,数据目录就设置在这里。

3、添加mysql用户组

[root@jt ~]# groupadd mysql
[root@jt ~]# useradd -r -g mysql -s /bin/false mysql
[root@jt ~]# chown -R mysql:mysql /usr/local/mysql-5.7
[root@jt ~]# chown -R mysql:mysql /usr/local/mysql-5.6

三、安装mysql5.7

将二进制mysql包上传到服务器后,解压:

[root@jt tmp]# tar xf mysql-5.7.24-el7-x86_64.tar.gz
[root@jt tmp]# cd mysql-5.7.24-el7-x86_64
[root@jt mysql-5.7.24-el7-x86_64]# ls
COPYING  README  bin  docs  include  lib  man  share  support-files
[root@jt mysql-5.7.24-el7-x86_64]# mv ./* /usr/local/mysql-5.7

确定mysql配置文件,进行必要的参数设置:
image

初始化mysql:

[root@jt bin]# ./mysqld --defaults-file=/etc/my5-7.cnf --initialize --user=mysql --basedir=/usr/local/mysql-5.7 --datadir=/mydata/mysql-5.7

初始化时指定好配置文件,--defaults-file参数必须放在第一位,否则报错;这里初始化的目的是以mysql用户身份生成数据目录下的一些必要文件,例如:
image

在初始化命令的最后一条输出记录中,告诉了我们root@localhost用户的临时密码,等启动mysql后,可以通过这个临时密码登陆mysql。

启动mysql:

[root@jt ~]# ./mysqld_safe --defaults-file=/etc/my5-7.cnf --user=mysql &

通过前面给定的临时密码,登陆数据库后,首先必须要修改密码才能做其它操作。

四、安装mysql5.6

将二进制包上传后,解压:

[root@jt tmp]# tar xf mysql-5.6.42-linux-glibc2.12-x86_64.tar.gz
[root@jt tmp]# cd mysql-5.6.42-linux-glibc2.12-x86_64
[root@jt mysql-5.6.42-linux-glibc2.12-x86_64]# mv ./* /usr/local/mysql-5.6/

拷贝一份mysql5.7的配置文件,并做相应的改动,注意目录改为5.6的,尤其注意端口号改为3307:
image

初始化mysql5.6:

[root@jt scripts]# ./mysql_install_db --defaults-file=/etc/my5-6.cnf --datadir=/mydata/mysql-5.6/ --basedir=/usr/local/mysql-5.6/ --user=mysql

mysql5.6的初始化通过basedir的scripts目录下的mysql_install_db命令来完成。
启动数据库,进入bin目录下,启动mysql5.6:

[root@jt bin]# ./mysqld_safe --defaults-file=/etc/my5-6.cnf --user=mysql &

mysql5.6可以直接空密码进入,并无初始密码,进去后可以给root用户改个密码。

五、配置mysql命令和服务

1、添加mysql命令到环境变量中
mysql的命令都在安装目录下的bin目录里,将这个目录添加到环境变量中,这样就不用每次都用命令的绝对路径。

在文件/etc/profile中末尾添加如下一行:
PATH=$PATH:/usr/local/mysql-5.7/bin:/usr/local/mysql-5.6/bin
[root@jt ~]# source /etc/profile

注意️:
当我想要根据mysqld_safe命令重启mysql5.6时,系统根据PATH变量找到的是mysql5.7的mysqld_safe命令,因此若不指定该命令的绝对路径会出现如下情况:
image

这种情况就是用mysql5.7的mysqld_safe命令启动了mysql5.6的数据库,因此,在同一个服务器上有多个mysql版本时,对于mysql5.6的启动还是要指定mysqld_safe命令的绝对路径比较好。

2、将mysql5.7添加到系统服务中
将support-files下的mysql.server文件拷贝到/etc/init.d/目录下:

[root@jt support-files]# cp mysql.server /etc/init.d/mysql5-7

vim打开/etc/init.d/mysql5-7文件,找到文件中的如下几个参数位置,并设置:

basedir=/usr/local/mysql-5.7
datadir=/mydata/mysql-5.7
other_args="--defaults-file=/etc/my5-7.cnf"

除此之外需要改动代码,改动后如下图标记处:
image

上面图中标记处,是service mysql5-7 start的实际执行命令,可以看出是调用了mysqld_safe命令的,而服务器上有两个版本的mysql实例,所以该命令必须指定配置文件位置,因此用到了$other_args参数,令:other_args="--defaults-file=/etc/my5-7.cnf"。而该参数的最开始位置在--pid-file参数后面,而--defaults-file文件必须位于第一位置,所以需要将$other_args参数调到第一位置,如上图标记处。

将mysql服务添加到服务列表中:

[root@jt support-files]# chkconfig --add mysql5-7

这样就可以通过chkconfig命令查看到mysql5.7的系统服务了,这里是将mysql5.7服务命名为mysql5-7,之后可以通过service mysql5-7 start来启动mysql。

3、将mysql5.6添加到系统服务中
将support-files下的mysql.server文件拷贝到/etc/init.d/目录下:

[root@jt support-files]# cp mysql.server /etc/init.d/mysql5-6

vim打开/etc/init.d/mysql5-6文件,找到文件中的如下几个参数位置,并设置:

basedir=/usr/local/mysql-5.6
datadir=/mydata/mysql-5.6
other_args="--defaults-file=/etc/my5-6.cnf"

除此之外需要改动代码,改动位置如前一步骤一致。

将mysql服务添加到服务列表中:

[root@jt support-files]# chkconfig --add mysql5-6

这样就可以通过chkconfig命令查看到mysql5.6的系统服务了,这里是将mysql5.6服务命名为mysql5-6,之后可以通过service mysql5-6 start来启动mysql

六、安装过程的问题记录:

1、在初始化mysql5.7时执行mysqld命令报如下错误:

[root@jt bin]# ./mysqld --help
./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

说明没有环境缺少libaio和libaio-devel包:
yum install libaio*

2、在使用mysqld命令指定配置文件时,总是报错:

[root@jt bin]# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql-5.7 --datadir=/mydata/mysql-5.7 --defaults-file==/etc/my5-7.cnf
2019-01-03T07:52:43.670298Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-01-03T07:52:44.734671Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-01-03T07:52:44.853486Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-01-03T07:52:44.916334Z 0 [ERROR] unknown variable 'defaults-extra-file==/etc/my5-7.cnf'
2019-01-03T07:52:44.916356Z 0 [ERROR] Aborting

排查发现是--defaults-file参数必须放在命令的第一位才行。说明:mysqld和mysqld_safe命令若是指定--defaults-file参数时,该参数必须放在第一位置,否则命令会报错。

3、如果有Aborting的错误提示:
2019-01-03 23:20:10 12678 [ERROR] Aborting
错误提示aborting,这十有八九是配置文件中有参数配置错误,主要排查:参数有没有写错、目录有没有创建或者权限是否正确。

4、在初始化mysql5.6时,首次执行mysql_install_db命令时,发生如下报错:

[root@jt scripts]# ./mysql_install_db --defaults-file=/etc/my5-6.cnf --user=mysql --datadir=/mydata/mysql-5.6/
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "en_US.UTF-8"

这是linux系统环境的问题,
需要在/root/.bashrc文件末尾添加:export LC_ALL=C
并安装:yum install autoconf
将basedir目录的属主和属组改为mysql:chown -R mysql:mysql /usr/local/mysql-5.6。

5、设置mysql系统服务时遇到的问题:
本次在服务器安装了两个不同版本的mysql,并且有两个单独的配置文件。因此在添加mysql服务时遇到的问题比较多。

设置mysql系统服务,实际上就是把support-files目录下的mysql.server 文件复制到/etc/init.d/目录下,之后执行的service mysql start等命令都是执行mysql.server脚本文件。

在最开始设置时,只是将mysql.server文件里的basedir和datadir参数设置了一下,导致mysql5.7启动方式不准确而且mysql5.6启动时一直报错;究其原因就是:通过service mysql start方式启动mysql实际上是调用了mysqld_safe命令,而这种命令调用并不是按照我配置的/etc/my5-7.cnf配置文件启动的。这在脚本文件可以看到,如下图:
image

通过上面截图的倒数第二行,发现service mysql start的命令启动mysql实际上是调用了mysqld_safe命令来启动mysql,看后面只指定了--datadir和--pid-file参数,另外还有个$other_args变量;那么这种启动方式实际上没有指定我配置的/etc/my5-7.cnf和/etc/my5-7.cnf配置文件的,如果不显示指定的话系统是找不到的,不是期望的启动方式。

因此$other_args参数提供了指定配置文件的方式,在脚本文件中找到other_args参数的赋值语句,如下图:
image

根据后面的注释,表示这里可以添加我们期望的参数,因此令:other_args="--defaults-file = /etc/my5-7.cnf"。
此外,mysqld_safe命令若指定了--defaults-file参数的话,该参数需要位于第一位置,所以将命令中$other_args参数挪到第一位置,如图:
image

作出如上的改动后,就可以将mysql5.6和mysql5.7都添加到系统服务中,以后可以通过service * start的命令形式启动数据库了。

6、mysql查找配置文件的顺序
可以用如下命令去看mysql查找配置文件的顺序:

[root@jt ~]# mysql --help|grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

当几个配置文件中包含同一个参数时,mysql会以最后一个文件中的参数为准。在本次安装中,两个版本的配置文件分别是/etc/my5-7.cnf和/etc/my5-6.cnf;在初始化和启动mysql时,让mysql按照默认的方式去配置文件肯定是不行的,因此需要通过--defaults-file参数显示指定。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL8.0生产环境二进制标准安装
MySQL8.0生产环境二进制标准安装
|
1月前
|
存储 关系型数据库 MySQL
使用Docker快速部署Mysql服务器
本文介绍了如何使用Docker快速部署MySQL服务器,包括下载官方MySQL镜像、启动容器、设置密码、连接MySQL服务器以及注意事项。
146 18
|
2月前
|
关系型数据库 MySQL Java
腾讯云服务器的使用、服务器中使用Docker安装常见的软件、如何将一个项目发布到服务器
这篇文章介绍了在腾讯云服务器上使用Docker安装常见软件的过程,包括安装MySQL、Redis和Tomcat,并提供了解决连接问题的方法。同时,还涉及了服务器中安装JDK 1.8的步骤和如何将项目打包部署到服务器上的指导,包括注意事项和操作提示。
腾讯云服务器的使用、服务器中使用Docker安装常见的软件、如何将一个项目发布到服务器
|
2月前
|
关系型数据库 MySQL 网络安全
有关使用Navicat 无法成功连接腾讯云服务器上Mysql的问题解决
这篇文章提供了解决Navicat无法连接腾讯云服务器上MySQL问题的步骤,包括调整防火墙设置、更新MySQL权限和检查远程连接配置。
有关使用Navicat 无法成功连接腾讯云服务器上Mysql的问题解决
|
2月前
|
应用服务中间件 Docker 容器
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
这篇文章介绍了在Docker中安装Tomcat的过程,包括搜索Tomcat镜像、拉取镜像、目录挂载的准备、创建并挂载容器,以及如何进入容器和进行测试。文中还说明了如何将WAR包部署到Tomcat服务器并访问部署的应用。
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
|
2月前
|
关系型数据库 MySQL Linux
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
|
2月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL5.7生产环境二进制标准安装
MySQL5.7生产环境二进制标准安装
|
2月前
|
敏捷开发 数据可视化 测试技术
阿里云云效产品使用合集之怎么在php composer安装自己服务器的代码
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
18天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
20天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
160 11

推荐镜像

更多
下一篇
无影云桌面