Linux 下安装 Mysql 数据库

更新,Centos 7 离线安装 Mysql 5.7

近期的一个项目,需要使用 MySQL 5.7,但是甲方所提供的机器是不能访问外网环境的,所以只能通过离线安装的方式来搞,这里大概记录一下,备忘。

选择 Linux - Generic -> Compressed TAR Archive:(mysql-5.7.18-linux-glibc2.12-x86_64.tar.gz),版本按需下载即可;下面是具体的安装过程。

安装步骤

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

1
2
3
rpm -qa | grep mariadb
## 如果有的话,返回的是这种: mariadb-libs-5.5.60-1.el7_5.x86_64
rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64 --nodeps

创建用户和用户组

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

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

文件上传

如果甲方提供了 访问 VPN ,那么则通过 VPN 建立连接;或者通过甲方提供的方式将文件上传到指定的机器上

1
2
3
4
5
6
7
8
# 解压安装包,解压后会有一个mysql-5.7.18-linux-glibc2.12-x86_64.tar.gz包
tar -xvf mysql-5.7.18-linux-glibc2.5-x86_64.tar
# 解压 mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz包
tar -zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
# 此时会生成一个目录 mysql-5.7.18-linux-glibc2.5-x86_64,将其改名为 mysql
mv mysql-5.7.18-linux-glibc2.5-x86_64 mysql
# 将 mysql 移到 /usr/local/mysql
mv mysql /usr/local/

授权

按照下面的操作执行

1
2
3
4
5
6
7
cd /usr/local/
chown -R mysql mysql/
chgrp -R mysql mysql/
cd mysql/
# 创建 data 目录 /usr/local/mysql/data
mkdir data
chown -R mysql:mysql data

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

默认这个配置文件是不存在的,需要创建,并且填入配置信息;在 /usr/local/mysql/ 目录下创建文件并编辑

1
2
cd /usr/local/mysql/
vi my.cnf

具体配置信息大致如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[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=32M
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/ 目录下,执行安装操作。

1
2
# 执行安装命令
bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/

安装后,如下信息表示安装成功

2023-03-23 14:32:16 [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld –initialize
2023-03-23 14:32:20 [WARNING] The bootstrap log isn’t empty:
2023-03-23 14:32:20 [WARNING] 2023-03-23T06:32:16.437877Z 0 [Warning] –bootstrap is deprecated. Please consider using –initialize instead
2023-03-23T06:32:16.438432Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000)
2023-03-23T06:32:16.438439Z 0 [Warning] Changed limits: table_open_cache: 431 (requested 2000)

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

1
2
3
4
# 在 /usr/local/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

我的机器上是出现了如下的报错

1
2
3
4
 ERROR! MySQL server PID file could not be found!
Starting MySQL.Logging to '/usr/local/mysql/data/localhost.localdomain.err'.
2023-03-23T06:33:05.379438Z mysqld_safe Directory '/var/lib/mysql' for UNIX socket file don't exists.
ERROR! The server quit without updating PID file (/usr/local/mysql/data/localhost.localdomain.pid).

如果 /usr/local/mysql/data/localhost.localdomain.err 这个文件存在,就进去看一下具体原因,如果没有就按照以下步骤执行。

1
2
3
4
5
# 创建 /var/lib/mysql/
cd /var/lib/
mkdir mysql
# 提供读写的权限
chmod 777 /var/lib/mysql

配置环境变量,在配置文件中 export PATH=$PATH:/usr/local/mysql/bin

1
2
3
4
# 修改配置文件 /etc/profile
vi /etc/profile
# 立即生效
source /etc/profile

然后重新启动即可。

获取 mysql 安装后的初始密码

1
2
3
4
[root@localhost mysql]# cat /root/.mysql_secret
# Password set for user 'root@localhost' at 2023-03-23 14:32:16
# 这个就是对应的初始密码,随机生成的
cHx#-%,zRho!

登录 mysql 遇到的问题

1
2
3
mysql -uroot -p
# 此时输入密码后可能出现下面的问题
Can't connect to local MySQL server through socket '/tmp/mysql.sock'

解决方案:
1、首先保证在 my.cnf 文件中 socket 的配置如下:

1
2
3
4
...
[mysqld]
socket = /var/lib/mysql/mysql.sock
...

2、对 /tmp/mysql.sock 和 /var/lib/mysql/mysql.sock 建立软连接

1
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

修改密码

1
2
3
# 执行语句如下
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your password';
flush privileges;

添加远程访问权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 切换到 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

设置开机自启动服务

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

此时如果通过 远程访问还是访问不通,则可能是因为防火墙的问题;这里有两种解决办法

  • 直接关闭防火墙
    1
    systemctl stop firewalld
  • 开通防火墙,放开对 3306 的拦截
    1
    firewalld-cmd --zone=public --add-port=3306/tcp --permanent

Centos 7 在线安装 Mysql 5.7

最近在搞 Apollo ,熟悉的同学应该知道,Apollo 需要依赖 Mysql。本以为很容易搞定,但是却踩了一路坑,眼高手低,也参考了网上很多博客,果然是残缺就是美!本篇就简单记录一下这个过程,以便后面参考。

环境

| 软件 | 版本|
| ———— | ———— |
|linux | centOS 7|
| jdk | 8 |
| mysql| 5.7.24 |

准备

安装前,我们可以通过 rpm -qa | grep mysql 检测系统是否自带安装 MySQL,如果当前系统有安装且期望卸载的话,可以通过下面两种删除模式进行删除:

  • 普通删除模式:rpm -e mysql
  • 强力删除模式:rpm -e --nodeps mysql

安装

下载和安装

1、下载mysql安装包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

-2018-06-06 16:41:46-- https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
正在解析主机 dev.mysql.com (dev.mysql.com)... xxxx
正在连接 dev.mysql.com (dev.mysql.com)|xxxxx|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 302 Found
位置:https://repo.mysql.com//mysql57-community-release-el7-9.noarch.rpm [跟随至新的 URL]
--2018-06-06 16:41:48-- https://repo.mysql.com//mysql57-community-release-el7-9.noarch.rpm
正在解析主机 repo.mysql.com (repo.mysql.com)... xxxxx
正在连接 repo.mysql.com (repo.mysql.com)|xxxx|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:9224 (9.0K) [application/x-redhat-package-manager]
正在保存至: “mysql57-community-release-el7-9.noarch.rpm”

100%[==========================================================>] 9,224 --.-K/s 用时 0s

2018-06-06 16:41:48 (169 MB/s) - 已保存 “mysql57-community-release-el7-9.noarch.rpm” [9224/9224])

2、安装

1
2
3
4
5
rpm -ivh mysql57-community-release-el7-9.noarch.rpm

准备中... ################################# [100%]
正在升级/安装...
1:mysql57-community-release-el7-9 ################################# [100%]

3、下载安装依赖包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
yum install mysql-server

已加载插件:fastestmirror, langpacks
mysql-connectors-community | 2.5 kB 00:00:00
mysql-tools-community | 2.5 kB 00:00:00
mysql57-community | 2.5 kB 00:00:00
(1/3): mysql-connectors-community/x86_64/primary_db | 20 kB 00:00:00
(2/3): mysql-tools-community/x86_64/primary_db | 41 kB 00:00:00
(3/3): mysql57-community/x86_64/primary_db | 144 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: mirrors.cn99.com
* extras: mirrors.cn99.com
* updates: mirrors.cn99.com
正在解决依赖关系
....

第一次下载这里会比较慢,no cache

基本操作

1、验证是否安装成功

  • mysqladmin –version

    mysqladmin Ver 8.42 Distrib 5.7.22, for Linux on x86_64

  • mysql -V

    mysql Ver 14.14 Distrib 5.7.24, for Linux (x86_64) using EditLine wrapper

2、启动 MySQL

sudo systemctl start mysqld

3、查看 MySQL 运行状态

sudo systemctl status mysqld

4、停止 MySQL

sudo systemctl stop mysqld

5、重启 MySQL

sudo systemctl restart mysqld

关于密码

Mysql 5.7 默认安装之后 root 是有密码的,获取 MySQL 的临时密码 为了加强安全性,MySQL 5.7 为 root 用户随机生成了一个密码,在 error log 中,关于 error log 的位置,如果安装的是 RPM 包,则默认是 /var/log/mysqld.log 。 只有启动过一次 mysql 才可以查看临时密码。

在利用 YUM 安装 mysql 数据库过程中,系统会自动生成一个临时密码,获取方式为:

grep ‘temporary password’ /var/log/mysqld.log

没有密码: 如果以前安装过 mysql,这时的 mysqld.log 中就不会有 temporary password这时就需要删除 mysql 残留的数据:

rm -rf /var/lib/mysql

执行完毕后需要重新启动 MySQL 服务:

sudo systemctl restart mysqld

这时就可以通过上面的命令去查找数据库生成的临时密码了

mysql 1130 错误

可能是你的帐号不允许从远程登陆,只能在 localhost。这个时候只要在 localhost 的那台电脑,登入 mysql 后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改成”%”

1
2
3
mysql -u root -pvmwaremysql>use mysql;
mysql> update user set host = '%' where user = 'root';
mysql> select host, user from user;

使得我们当前的账户和密码能够应用的所有的远程主机连接:

1
2
> GRANT ALL PRIVILEGES ON . TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
> FLUSH PRIVILEGES;
作者

卫恒

发布于

2019-06-05

更新于

2024-01-19

许可协议

评论