centos7 免安装mysql5.7及配置(支持多个mysql)

一) 下载免安装包:

复制代码
 mysql下载地址: https://dev.mysql.com/downloads/mysql/

下载时,选择以前5.7版本:

image

下载第一个TAR压缩包:

image

二) 定义安装路径并解压安装包

1、假设需要把MySQL放到 /usr/local/qhs/mysql5.7 目录下运行, 则手工创建目录 /usr/local/qhs/mysql5.7, 下文把此目录称为【安装目录】

2、上传压缩包到 【安装目录】 下; 执行 如下命令

复制代码
 [root@localhost~]# tar -xzvf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz

会在目录下解压出 mysql-5.7.35-linux-glibc2.12-x86_64 目录,该目录即为mysql的运行目录,此目录下有 bin 等mysql目录;

三)创建系统mysql组和mysql用户

检查mysql组和用户是否存在,如无则创建

复制代码
 [root@localhost~]# cat /etc/group | grep mysql 

 [root@localhost~]# cat /etc/passwd | grep mysql

若不存在,则创建如下:

复制代码
# 创建mysql用户组
[root@localhost~]# groupadd mysql
# 创建一个用户名为mysql的用户,并加入mysql用户组
[root@localhost~]# useradd -g mysql mysql
# 制定password 为mysql
[root@localhost~]# passwd mysql
Changing password for user mysql.
New password: 
BAD PASSWORD: The password is a palindrome
Retype new password: 
passwd: all authentication tokens updated successfully.

四)更改【安装目录】所属的组和用户

复制代码
cd /usr/local/qhs/
# 更改所属的组和用户
[root@localhost local]# chown -R mysql mysql5.7/
[root@localhost local]# chgrp -R mysql mysql5.7/

五)创建mysql的数据目录和日志目录

复制代码
# 创建数据和日志存储目录(目录可以随意指定,但必须存在,这两个目录在下一步中会使用,这两个目录的所有者必须是mysql用户)
[root@localhost mysql5.7]# cd /usr/local/qhs/mysql5.7/
[root@localhost mysql]# mkdir data
[root@localhost mysql]# mkdir logs
# 修改所有者
[root@localhost mysql]# chown -R mysql:mysql data

六)定义mysql的 my.cnf 文件

此文件是mysql的运行定义文件,需要根据实际情况修改,然后放置到指定目录下,一般情况下,如果不特别说明(比如系统中只有一个MySQL),就放在 /etc 目录下;如果系统需要装多个mysql,那么每个MySQL对应的 my.cnf 文件就需要放在各自配置的目录下:

创建 my.cnf文件

my.cnf内容如下:

复制代码
[mysqld]
#下面语句的作用主要是当前本机登录不需要密码,可以注释掉
skip-grant-tables
#mysql安装目录,也就是 mysql的 bin 的父目录
basedir=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/
#mysql数据库目录,也就是上面步骤创建的data目录,必须存在
datadir=/usr/local/qhs/mysql5.7/data
#mysql数据库监听端口,可以按需修改,不同mysql开启不同的端口
port = 3307
character_set_server=utf8
max_allowed_packet = 512M
innodb_log_file_size = 2048M
[mysqld_safe]
#错误日志,也就是上面步骤创建的data目录下的一个文件,此文件可以不存在
log-error=/usr/local/qhs/mysql5.7/data/error.log
#pid文件,此配置项有的说不需要,反正我配置上是没有问题的,data目录必须存在
pid-file=/usr/local/qhs/mysql5.7/data/mysqld.pid
#临时目录可以不存在,只要指定就好
tmpdir=/tmp/mysql5.7
#
# include all files from the config directory
#
#!includedir /etc/my.cnf.d
## 不建议开日志,所有的操作都记录文件太大
# general-log=1
# log-output=FILE
# general-log-file=/data_disk/mysql/logs/mysql.log
slow_query_log=1
long_query_time=3
slow_query_log_file=/data_disk/mysql/logs/slowquery.log
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB 
lower_case_table_names=1
max_allowed_packet=16M

场景一: 系统只有一个MySQL,放在默认目录 /etc/ 下(强烈建议按照场景二配置,因为我是用的场景二,主要是不知道当修改了data目录后,是否需要按照场景二去修改support-files文件里的内容):

复制代码
# 进入/etc文件夹下
[root@localhost mysql]# cd /etc
# 编辑my.cnf
[root@localhost etc]# vim my.cnf

场景二: 系统有多个MySQL,放在各自配置目录下,例如本例放在 /usr/local/mysql5.7/ mysql-5.7.35-linux-glibc2.12-x86_64/目录下(建议放到my.cnf的basedir 目录下,以免有各种问题):

放在目录下之后,还需要配置如下,进入mysql运行目录的support-files文件夹(与bin同级), 编辑mysql.server文件

复制代码
#和上面 my.cnf 的配置一样,是mysql的运行目录
basedir=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/
#和上面 my.cnf 的配置一样,是mysql的data目录
datadir=/usr/local/qhs/mysql5.7/data/
#没搞清楚,我是原样使用,反正配置时没有这个文件
lockdir='/var/lock/subsys5.7'
#没搞清楚,我是原样使用,反正配置时没有这个文件
lock_file_path="$lockdir/mysql5.7"
#没搞清楚,我是原样使用,也就是data目录加一个pid文件,此文件运行时生成
mysqld_pid_file_path=/usr/local/mysql5.7/data/mysqld.pid
#!!! (非常重要) 搜索conf后再修改,这个在else语句里面, 这里的值就是当前MySQL的 my.cnf 文件所在位置(非常重要) !!!
conf=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/my.cnf

七) 初始化mysql

复制代码
[root@localhost mysql] /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/mysqld  --initialize-insecure  --datadir=/usr/local/qhs/mysql5.7/data/ --basedir=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/ --user=mysql

八)安全模式启动mysql

通过mysqld_safe启动

复制代码
[root@localhost mysql]# /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/mysqld_safe --defaults-file=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/my.cnf  --skip-grant-tables --skip-networking &

#添加--skip-networking参数,让实例关闭监听端口,自然也就无法建立TCP连接,而只能通过本地socket进行连接。

启动后,通过另外一个SSH命令窗口执行如下步骤

九)修改root密码,授权root远程连接

如下修改后,可通过执行 /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/mysql -uroot -p 来验证密码

复制代码
[root@localhost mysql]# /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64//bin/mysql 
>mysql> flush privileges;
>mysql> update mysql.user set authentication_string=password('Abcd123456') where host='localhost' and user='root';
>mysql> grant all privileges on *.* to 'root'@'%' identified by 'Abcd123456';
>mysql> flush privileges;
>mysql> exit

八) 把mysql启动做成服务

复制该mysql.server文件到/etc/init.d并重命名为mysql5.7(可按自己需要命名)

复制代码
[root@localhost mysql] cp -i /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/support-files/mysql.server /etc/init.d/mysql5.7

九) 启动/停止服务

复制代码
[root@localhost mysql] service mysql5.7 {start|stop|restart|reload|force-reload|status}
#启动时,如果抛错,可以到error日志中查看。
# 1---比如出现ERROR! The server quit without updating PID file /usr/local/develop/db/mysql5.7/data/mysqld.pid). 就说明进程起不来,而日志中提示
#[ERROR] Could not create unix socket lock file /var/lib/mysql/mysql.sock.lock.
#则需要手工创建文件夹/var/lib/mysql/ 并执行 chown -R mysql:mysql /var/lib/mysql/ 给它赋权;
#还有可能出现自定义的 my.cnf 被忽略的提示,这是因为 my.cnf 的权限不能是777 而应该是644,否则mysql会取默认的 /etc/ 下面的my.cnf

十)重启电脑

十一)启动mysql

把 my.cnf 文件中的 skip-grant-tables 注释掉

复制代码
 service mysql5.7 start|

十二)阿里云的注意事项

如果是阿里云上安装的mysql,还需要在实例的安全组属性中,添加3306(或对应端口)端口打开规则

点击ECS实例名称,进入ECS详情页面,在页面上可以查看该ECS的各种属性,其中就有一项是 安全组属性(千万不能直接用左边导航菜单的安全组,那个和当前ECS实例没有任何关系,配置了也没用)

FAQ: 启动失败一般是对应的日志文件不存在,或者目录没有权限。

如果服务注册失败,可以通过如下命令直接启动

mysqld --defaults-file=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/my.cnf --user=root &

若启动时候抛异常: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

则需要建立软连接:ln -s /usr/local/qhs/mysql5.7/mysql.sock /tmp/mysql.sock
最后编辑于:2024-12-14 11:45:34
© 著作权归作者所有,转载或内容合作请联系作者

喜欢的朋友记得点赞、收藏、关注哦!!!

相关推荐
我爱Jack35 分钟前
Spring Boot统一功能处理深度解析
java·spring boot·后端
小马爱记录40 分钟前
Sentinel微服务保护
spring cloud·微服务·架构·sentinel
RainbowJie12 小时前
Spring Boot 使用 SLF4J 实现控制台输出与分类日志文件管理
spring boot·后端·单元测试
面朝大海,春不暖,花不开2 小时前
Spring Boot MVC自动配置与Web应用开发详解
前端·spring boot·mvc
想用offer打牌2 小时前
面试回答喜欢用构造器注入,面试官很满意😎...
后端·spring·面试
发愤图强的羔羊2 小时前
SpringBoot异步导出文件
spring boot·后端
唐墨1232 小时前
PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的区别
java·后端·spring
ApiHug3 小时前
ApiHug 1.3.9 支持 Spring 3.5.0 + Plugin 0.7.4 内置小插件升级!儿童节快乐!!!
java·后端·spring·api·apihug·apismart
神仙别闹5 小时前
基于Java(SpringBoot、Mybatis、SpringMvc)+MySQL实现(Web)小二结账系统
java·spring boot·mybatis
趁你还年轻_6 小时前
Spring 官方推荐构造函数注入
java·spring·log4j