近期在做一个项目,需要搭建一个开发环境,数据库技术选型是MySQL5.7,在网上直接搜了很多关于安装MySQL5.7的教程,踩坑踩雷是必然了,为了以后再次安装方便,记一下笔记,毕竟在茫茫的技术文章中筛选,还是比较麻烦的。

环境说明

安装环境:CentOS7 64位

MySQL数据库版本:MySQL5.7

安装方式:离线安装(服务器环境没有外部网络

这里需要说明一下安装方式,很多人为了方便可能直接使用yum源,省去了很多步骤,但是对于公司内部的服务器是不能连接外网的,因此这里就只能自己上传安装包安装啦。

数据库下载

MySQL 5.7 Linux安装包下载:https://dev.mysql.com/downloads/mysql/5.7.html

这个地址进入后就是5.7.x版本,如果需要最新的版本,就要点击右侧的Looking for the latest GA versions?

另外需要注意的是下载的时候需要注册oracle账号,如果有直接登录,没有就自己注册。版本选择如下:

  • 使用Red Hat Enterprise Linux
    Select Version:5.7.35
    Select Operating System:Red Hat Enterprise Linux / Oracle Linux
    Select OS Version:Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit)
    列表中下载:
    Compressed TAR Archive:(mysql-5.7.35-el7-x86_64.tar.gz)
  • 使用Linux - Generic
    Select Version:5.7.35
    Select Operating System:Linux - Generic
    Select OS Version:Linux - Generic (glibc 2.12) (x86, 64-bit)
    列表中下载:
    Compressed TAR Archive:(mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz)【本文中使用的是这个版本5.7.30】

安装

查询并卸载系统自带的数据库:Mariadb

# 找到数据库mariadb,如果有会给出一个结果,结果是mariadb名称
rpm -qa | grep mariadb
# 如果存在就卸载
rpm -e --nodeps [mariadb名称]

创建用户和用户组

为了方便数据库管理,对于安装的MySQL数据库,生产上我们都会建立一个mysql用户和mysql用户组。

# 先检查mysql用户和用户组有没有被使用
cat /etc/group | grep mysql
cat /etc/passwd | grep mysql
# 添加mysql用户组
groupadd mysql
# 添加mysql用户并加入用户组
useradd -g mysql mysql
# 修改mysql用户的登陆密码(这里根据需要设置,可以略过)
passwd mysql

上传安装文件

上传部分不难,可以采用三种方式,一种是通过sftp,一种是通过rz命令上传,最后是使用scp命令来安装。这里采用scp,第一种需要在本地机器上安装sftp,本身是收费的需要破解;第二种是rz命令,这个要看远程服务器上安装此命名的支持,通过yum源安装很简单,执行yum -y install lrzsz即可,如果服务所在环境无法连接外网,那就要自己去找相关的安装包,麻烦。最终我是选择scp命令,不要安装插件。

scp D://softpackage/mysql-5.7.30-linux-glibc2.12-x86_64.tar root@192.168.233.131:/usr/local/

获取安装包和修改名称

# 解压安装包,解压后会有一个mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz包
tar -xvf mysql-5.7.30-linux-glibc2.12-x86_64.tar
# 解压mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz包
tar -zxvf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
# 此时会生成一个目录mysql-5.7.30-linux-glibc2.12-x86_64,将其改名为mysql
mv mysql-5.7.30-linux-glibc2.12-x86_64 mysql

目录授权操作

# 按照下面的操作执行
cd /usr/local/
chown -R mysql mysql/
chgrp -R mysql mysql/
cd mysql/
mkdir data
chown -R mysql:mysql data

配置文件的创建和配置信息

默认这个配置文件是不存在的,需要创建,并且填入配置信息。

# 在/usr/local/mysql/目录下创建文件并编辑(使用vi或者vim)
vim my.cnf

具体配置信息:

[mysql]
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8

[mysqld]
socket=/var/lib/mysql/mysql.sock
port=3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
explicit_defaults_for_timestamp=true
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

[mysql.server]
user=mysql
basedir=/usr/local/mysql

安装数据库

进入/usr/local/mysql/目录下,执行安装操作。

# 进入目录
cd /usr/local/mysql/
# 执行安装命令
bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/

安装成功输出的日志如下:

2019-03-08 18:11:07 [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
2019-03-08 18:11:24 [WARNING] The bootstrap log isn't empty:
2019-03-08 18:11:24 [WARNING] 2019-03-08T10:11:07.208602Z 0 [Warning] --bootstrap is deprecated. Please consider using --initialize instead

安装成功后设置文件及目录权限:

# 此时还是在mysql目录下执行
cp ./support-files/mysql.server /etc/init.d/mysqld
chown 777 my.cnf
chmod +x /etc/init.d/mysqld

启动mysql及可能存在问题和解决方案

# 启动脚本
/etc/init.d/mysqld restart

可能出现的问题一:

MySQL server PID file could not be found![FAILED]
Starting MySQL.Logging to '/usr/local/mysql/data/CDH-141.err'.
..The server quit without updating PID file (/usr/local/mysql/data/CDH-141.pid).[FAILED]

解放方案:

此时需要检查是否有进程占用

# 如果执行此命令后没有对应的占用应用,就无需操作,如果有就需要将其杀死
ps aux|grep mysql
# 杀死占用的进程后重新启动
/etc/init.d/mysqld restart

可能存在的问题二:

Starting MySQL.Logging to '/usr/mysql/mysql-5.7.35/data/localhost.localdomain.err'.
2021-08-13T01:01:52.896471Z mysqld_safe Directory '/var/lib/mysql' for UNIX socket file don't exists.
ERROR! The server quit without updating PID file (/usr/mysql/mysql-5.7.35/data/localhost.localdomain.pid).

如果/usr/mysql/mysql-5.7.35/data/localhost.localdomain.err这个文件存在,就进去看一下具体原因,如果没有就按照以下步骤执行。(我在安装的时候这个文件就是不存在的)。

解决方案:

# 创建 /var/lib/mysql/
cd /var/lib/
mkdir mysql
# 提供读写的权限
chmod 777 /var/lib/mysql

配置环境变量

# 修改配置文件/etc/profile,增加export PATH=$PATH:/usr/local/mysql/bin
vim /etc/profile
# 立即生效
source /etc/profile

获取mysql安装后的初始密码

cat /root/.mysql_secret
# 输出的结果如下
Password set for user 'root@localhost' at 2019-03-08 17:40:42
poc3u0mO_luv # 这个就是对应的初始密码,随机生成的

修改密码和存在的问题解决方案

mysql -uroot -p
# 此时输入密码后可能出现下面的问题
Can't connect to local MySQL server through socket '/tmp/mysql.sock'
# 解决方案如下:
# 首先保证在my.cnf文件中socket的配置如下:
[mysqld]
socket = /var/lib/mysql/mysql.sock
# 然后对/tmp/mysql.sock和/var/lib/mysql/mysql.sock建立软连接
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

上面的问题解决后重新输入用户名密码即可进入到mysql,可以将密码修改成自己的。

-- 执行语句如下
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
-- 操作结束后,通过exit命令退出,然后重新登录,验证修改的密码是否生效

添加远程访问权限

-- 登录数据
-- 切换到mysql数据库
use mysql;
-- 更新权限
update user set host='%' where user = 'root';
-- 查询一下是否修改成功
select host,user from user;
-- 结果如下表示成功,root用户的host已经修改为'%'
--+-----------+---------------+
--| host      | user          |
--+-----------+---------------+
--| %         | root          |
--| localhost | mysql.session |
--| localhost | mysql.sys     |
--+-----------+---------------+
-- 上面的修改结束后,退出数据库,重启数据库服务生效
/etc/init.d/mysqld restart

设置开机自启动服务

# 将mysqld服务加入到系统服务
chkconfig --level 35 mysqld on
# 检查mysqld服务是否已经生效
chkconfig --list mysqld
# 增加mysqld服务控制脚本执行权限
chmod +x /etc/init.d/mysqld

开通/关闭防火墙

这里有两种方式,一种是简单粗暴的关闭防火墙,第二种就是将数据库的3306端口放开。

# 第一种:关闭防火墙(centos7关闭防火墙的方式和centos6是不同的)
systemctl stop firewalld
# 第二种:开通防火墙,放开对3306的拦截
firewalld-cmd --zone=public --add-port=3306/tcp --permanent

到这里基本算是结束了,可以通过本地的客户端连接,创建数据库、建表啦。

安装中存在的问题

在我自己安装过程中没有遇到此问题,但是在我开文中参考的问题中提到这个问题,如果遇到可以参考一下。

错误信息:

在安装过程中出现./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory错误。

解决:切回root用户,执行以下命令即可。

yum install libaio

但是这个解决方案不适用于无法连接外网的服务器。可以通过网上找到libaio插件,下载后上传到服务器中安装,具体步骤就不写啦。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐