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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 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
目录
相关文章
|
15天前
|
存储 SQL 关系型数据库
MySQL的安装&数据库的简单操作
本文介绍了数据库的基本概念及MySQL的安装配置。首先解释了数据库、数据库管理系统和SQL的概念,接着详细描述了MySQL的安装步骤及其全局配置文件my.ini的调整方法。文章还介绍了如何启动MySQL服务,包括配置环境变量和使用命令行的方法。最后,详细说明了数据库的各种操作,如创建、选择和删除数据库的SQL语句,并提供了实际操作示例。
58 13
MySQL的安装&数据库的简单操作
|
8天前
|
关系型数据库 MySQL Linux
Linux 安装 mysql 【使用 tar.gz | tar.xz安装包-离线安装】
在Linux系统中使用tar.xz压缩包安装MySQL数据库的详细步骤。包括下载MySQL压缩包,解压到指定目录,创建mysql用户和组,设置目录权限,初始化MySQL,配置my.cnf文件,启动服务,以及修改root用户密码。此外,还提供了如何设置Windows远程登录MySQL服务器的方法。
Linux 安装 mysql 【使用 tar.gz | tar.xz安装包-离线安装】
|
5天前
|
数据采集 中间件 关系型数据库
Mac系统通过brew安装mysql5.7后,启动报错的解决办法
Mac系统通过brew安装mysql5.7后,启动报错的解决办法
16 2
|
8天前
|
关系型数据库 MySQL Linux
Linux 安装 mysql【使用yum源进行安装】
这篇文章介绍了在Linux系统中使用yum源安装MySQL数据库的步骤,包括配置yum源、安装MySQL服务、启动服务以及修改root用户的默认密码。
Linux 安装 mysql【使用yum源进行安装】
|
2月前
|
弹性计算 关系型数据库 MySQL
centos7 mysql安装及配置
本文详细介绍了在阿里云服务器ECS上通过yum源安装MySQL 8.0.12的过程,包括更新yum源、下载并安装MySQL源、解决安装过程中可能遇到的问题等步骤。此外,还介绍了如何启动MySQL服务、设置开机自启、配置登录密码、添加远程登录用户以及处理远程连接异常等问题。适合初学者参考,帮助快速搭建MySQL环境。
158 8
centos7 mysql安装及配置
|
1月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
2月前
|
关系型数据库 MySQL Linux
Linux环境安装MySQL8.0.36使用rpm包安装,安装顺序是什么?
【8月更文挑战第23天】Linux环境安装MySQL8.0.36使用rpm包安装,安装顺序是什么?
165 1
|
18天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
20天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
160 11

推荐镜像

更多
下一篇
无影云桌面