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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 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参数显示指定。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
174 41
|
1月前
|
SQL 关系型数据库 MySQL
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
这是一份详细的MySQL安装与配置教程,适合初学者快速上手。内容涵盖从下载到安装的每一步操作,包括选择版本、设置路径、配置端口及密码等。同时提供基础操作指南,如数据库管理、数据表增删改查、用户权限设置等。还介绍了备份恢复、图形化工具使用和性能优化技巧,帮助用户全面掌握MySQL的使用方法。附带常见问题解决方法,保姆级教学让你无忧入门!
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
|
1月前
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
238 17
|
1月前
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
133 11
|
1月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
3月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
1月前
|
存储 关系型数据库 MySQL
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
本文详细介绍了在 MySQL 中创建数据库和表的方法。包括安装 MySQL、用命令行和图形化工具创建数据库、选择数据库、创建表(含数据类型介绍与选择建议、案例分析、最佳实践与注意事项)以及查看数据库和表的内容。文章专业、严谨且具可操作性,对数据管理有实际帮助。
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
|
3月前
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
569 82
|
1月前
|
关系型数据库 MySQL 定位技术
MySQL与Clickhouse数据库:探讨日期和时间的加法运算。
这一次的冒险就到这儿,期待你的再次加入,我们一起在数据库的世界中找寻下一个宝藏。
61 9
|
29天前
|
存储 关系型数据库 MySQL
【赵渝强老师】OceanBase数据库从零开始:MySQL模式
《OceanBase数据库从零开始:MySQL模式》是一门包含11章的课程,涵盖OceanBase分布式数据库的核心内容。从体系架构、安装部署到租户管理、用户安全,再到数据库对象操作、事务与锁机制,以及应用程序开发、备份恢复、数据迁移等方面进行详细讲解。此外,还涉及连接路由管理和监控诊断等高级主题,帮助学员全面掌握OceanBase数据库的使用与管理。
119 5

推荐镜像

更多