文章目录
- 环境说明
- 数据库下载
- 安装
- 查询并卸载系统自带的数据库:Mariadb
- 创建用户和用户组
- 上传安装文件
- 获取安装包和修改名称
- 目录授权操作
- 配置文件的创建和配置信息
- 安装数据库
- 启动mysql及可能存在问题和解决方案
- 配置环境变量
- 获取mysql安装后的初始密码
- 添加远程访问权限
- 设置开机自启动服务
- 开通/关闭防火墙
- 安装中存在的问题
近期在做一个项目,需要搭建一个开发环境,数据库技术选型是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
插件,下载后上传到服务器中安装,具体步骤就不写啦。