rocky9 编译安装mysql8

开发与运维数据库

0.前言

在当代技术领域,各类数据库层出不穷,有传统关系型数据库mysql、pgsql,有文档数据库es、mongodb,有分布式数据库TiDB等等,但是mysql还是凭借着许多优秀的特性稳坐数据库榜首,深受技术人员的青睐。今天我们就在rocky9 linux操作系统上编译安装一台mysql,带大家了解一下mysql的部署步骤和常用的配置。

1.准备工作

在部署之前我们先准备一下服务器和需要安装的mysql安装包。

1.1 服务器配置

操作系统IP地址cpu内存
rocky9 linux192.168.159.1722C4G

1.2 安装包

安装包下载地址:https://dev.mysql.com/downloads/mysql/
本次安装包名称:mysql-8.0.41-linux-glibc2.28-x86_64.tar.xz
将安装包存放在服务器指定位置,我这里是放在/root/install/mysql目录,可以根据个人喜好更换。

2.安装mysql

服务器和安装包都准备好之后,就可以开始今天的部署了。

2.1 解压安装包

因为是安装包里面mysql已经编译好了,只需要解压到指定目录即可,命令如下:

cd /root/install/mysql
tar xf mysql-8.0.41-linux-glibc2.28-x86_64.tar.xz
mv mysql-8.0.41-linux-glibc2.28-x86_64 /usr/local/mysql

这里我指定的安装目录是/usr/local/mysql,大家可以根据个人喜好更换。

2.2 创建数据目录

启动mysql服务之前创建一下数据目录,命令如下:

mkdir -p /data/mysql/data /var/lib/mysql

其中/data/mysql/data存放存储数据的,/var/lib/mysql存放socket和pid文件的,同样可以根据个人喜好更换。

2.3 创建配置文件

新建一下mysql的配置文件,命令如下:

vim /etc/my.cnf

填写内容如下:

[mysqld]
# 允许访问地址
bind-address = 0.0.0.0

# 服务运行端口
port = 3306

# 服务运行用户
user = mysql

# 安装基础目录
basedir = /usr/local/mysql

# 套接字文件路径,用于连接数据库服务
socket = /var/lib/mysql/mysqld.sock

# 数据文件存储路径
datadir = /data/mysql/data

# pid文件存储路径
pid-file = /var/lib/mysql/mysql.pid

# 错误日志文件路径
log-error = /data/mysql/data/mysqld.log

# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

# 修改默认存储引擎
default-storage-engine = InnoDB

# 密码认证插件
default-authentication-plugin = mysql_native_password

# 最大连接数
max_connections = 1024

# 跳过主机名解析
skip-name-resolve

# 表名忽略大小写
lower_case_table_names = 1

# 设置时区
default-time-zone='+08:00'

# 空闲连接超时时间
wait_timeout = 3600

#-------------主从复制设置-----------------------
# 服务器ID,集群必填配置,区分机器编号,每台机器不同
server_id = 10
# 开启二进制日志,多用于主从复制,数据恢复
log_bin = /data/mysql/data/binlog
#设置binlog模式为行级记录
binlog_format = row
#binlog启用rows_query_event事件,可以记录原始的 SQL,如果不开启的话,则只能获取 SQL 对应的行数据
binlog_rows_query_log_events = 1
#设置binlog日志过期时间
expire_logs_days = 7
# 从服务器上中继日志的文件名
relay-log = relay-log-bin
# 从服务器中继日志索引文件名
relay-log-index = slave-relay-bin.index

#-------------多线程主从复制设置-----------------------
#基于组提交的并行复制方式,同一个数据库下可以有多个线程
slave-parallel-type = LOGICAL_CLOCK
#即可有8个线程来进行并行复制
slave-parallel-workers = 4
#以下两个参数是把主从复制信息存储到 innodb 表中,默认情况下主从复制信息是存储到文件系统中的,如果从服务器宕机,很容易出现文件记录和实际同步信息不同的情况,存储到表中则可以通过 innodb 的崩溃恢复机制来保证数据记录的一致性。并且性能可以有 50% ~ 80% 的提升
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = ON
#更改SQL模式,去除SQL模式中分组的ONLY_FULL_GROUP_BY
#mysql8.0 删除了NO_AUTO_CREATE_USER
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#mysql5.x
#sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#是否支持符号链接,即数据库或表可以存储在my.cnf中指定datadir之外的分区或目录,为0不开启
symbolic-links = 0
#是否开启慢查询日志收集
slow_query_log = 1
#慢查询时间,单位为秒,超过则为慢查询
long_query_time = 1
#慢查询记录的日志文件
slow_query_log_file = /data/mysql/data/mysql-slow.log

#-------------InnoDB性能优化设置-----------------------
#1,设置索引和数据缓冲区大小
#   该设置对 InnoDB 表来说非常重要,因为 InnoDB 相比 MyISAM 表对缓冲更为敏感,如果使用默认值十分影响性能。一般设置物理内存的 60% - 70%
innodb_buffer_pool_size = 1G

#2,设置Redo日志文件大小
#    通常,redo日志文件的总大小应足够大,以使服务器可以消除工作负载活动中的高峰和低谷,这通常意味着有足够的redo日志空间来处理一个小时以上的写活动。
#    设置完后一定记得把MySQL安装目录地址下的`ib_logfile0``ib_logfile1`删除掉。否则重启MySQL启动失败
# redo日志大小,设置为 innodb_buffer_pool_size * 0.25
innodb_log_file_size = 200M

# 默认值为2,即2组redo日志
innodb_log_files_in_group = 2

#3,设置缓冲池实例个数
#   innodb_buffer_pool_instances 可以开启多个内存缓冲池,把需要缓冲的数据 hash 到不同的缓冲池中,这样可以并行的内存读写。该参数值默认为 1,推荐设置 4 个或 8 个。
innodb_buffer_pool_instances = 4

#4,设置日志同步到磁盘方式
#(1MySQL 的事务日志中,为了性能和效率,可以配置每次事务提交后是否将日志缓冲刷到 log file 以进行数据持久化,这就是变量 innodb_flush_log_at_trx_commit 的作用。innodb_flush_log_at_trx_commit 有 3 种可选值:
#    0:代表大约每秒写入到日志并同步到磁盘,数据库故障会丢失 1 秒左右事务数据。
#    1:为每执行一条 SQL 后写入到日志并同步到磁盘,I/O 开销大,执行完 SQL 要等待日志读写,这种方式即使系统崩溃也不会丢失任何数据,但效率低。
#    2:代表只把日志写入到系统缓存区,再每秒同步到磁盘,效率很高,如果服务器故障,才会丢失事务数据。
#(2)对数据安全性要求不是很高的推荐设置 2,性能高,修改后效果明显。
innodb_flush_log_at_trx_commit = 2

#5,设置独享表空间
#   默认是共享表空间(参数值为 0),共享表空间 idbdata 文件不断增大,影响一定的 I/O 性能。推荐开启独立表空间模式(参数值为 1),每个表的索引和数据都存在自己独立的表空间中,可以实现单表在不同数据库中移动。
#    共享表空间:某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在 data 目录下。默认的文件名为 :ibdata1 初始化为 10M。
#    独占表空间:每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个 .frm 表描述文件,还有一个 .ibd 文件。其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。
innodb_file_per_table = 1

[client]
socket = /var/lib/mysql/mysqld.sock
default-character-set = utf8mb4

[mysqld_safe]
socket = /var/lib/mysql/mysqld.sock

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

这里涉及的配置还是挺多的,除了常见的设置连接IP、端口和数据目录、连接数等,还有一些主从复制和引擎优化的配置,可以多研究一下每个配置的作用,根据需要修改特定配置。

2.4 创建mysql用户

创建一下mysql用户,并将mysql相关目录赋权给mysql用户,命令如下:

useradd -s /sbin/nologin mysql
chown -R mysql:mysql /data/mysql/
chown -R mysql:mysql /var/lib/mysql/

2.5 初始化mysqld服务

以上准备就绪之后就可以初始化mysql数据库了,初始命令如下:

./mysqld --initialize --user=mysql

之后就可以看到/data/mysql/data目录下生成了一些初始数据文件:

ll /data/mysql/data/

可以看到如下文件:

total 79564
-rw-r-----. 1 mysql mysql       56 Nov 11 11:04  auto.cnf
-rw-r-----. 1 mysql mysql      180 Nov 11 11:04  binlog.000001
-rw-r-----. 1 mysql mysql       31 Nov 11 11:04  binlog.index
-rw-------. 1 mysql mysql     1705 Nov 11 11:04  ca-key.pem
-rw-r--r--. 1 mysql mysql     1112 Nov 11 11:04  ca.pem
-rw-r--r--. 1 mysql mysql     1112 Nov 11 11:04  client-cert.pem
-rw-------. 1 mysql mysql     1705 Nov 11 11:04  client-key.pem
-rw-r-----. 1 mysql mysql   327680 Nov 11 11:04 '#ib_16384_0.dblwr'
-rw-r-----. 1 mysql mysql  8716288 Nov 11 11:04 '#ib_16384_1.dblwr'
-rw-r-----. 1 mysql mysql     6252 Nov 11 11:04  ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 Nov 11 11:04  ibdata1
drwxr-x---. 2 mysql mysql     4096 Nov 11 11:04 '#innodb_redo'
drwxr-x---. 2 mysql mysql        6 Nov 11 11:04 '#innodb_temp'
drwxr-x---. 2 mysql mysql      143 Nov 11 11:04  mysql
-rw-r-----. 1 mysql mysql     2556 Nov 11 11:04  mysqld.log
-rw-r-----. 1 mysql mysql 26214400 Nov 11 11:04  mysql.ibd
-rw-r-----. 1 mysql mysql      188 Nov 11 11:04  mysql-slow.log
drwxr-x---. 2 mysql mysql     8192 Nov 11 11:04  performance_schema
-rw-------. 1 mysql mysql     1705 Nov 11 11:04  private_key.pem
-rw-r--r--. 1 mysql mysql      452 Nov 11 11:04  public_key.pem
-rw-r--r--. 1 mysql mysql     1112 Nov 11 11:04  server-cert.pem
-rw-------. 1 mysql mysql     1705 Nov 11 11:04  server-key.pem
drwxr-x---. 2 mysql mysql       28 Nov 11 11:04  sys
-rw-r-----. 1 mysql mysql 16777216 Nov 11 11:04  undo_001
-rw-r-----. 1 mysql mysql 16777216 Nov 11 11:04  undo_002

3.启动mysql数据库

经过上述操作,mysql就已经部署好了,接下来我们就启动mysql服务。

3.1 创建mysql启动文件

我们使用systemd的方式来管理mysql服务,创建一下service文件,命令如下:

vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
User=mysql
Group=mysql
[Install]
WantedBy=multi-user.target

创建完service文件之后,记得reload一下,命令如下:

systemctl daemon-reload

3.2 启动mysqld

启动mysqld服务,只需要一条命令,如下:

systemctl start mysqld

3.3 设置开机自启

systemctl enable mysqld --now
Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /etc/systemd/system/mysql.service

3.4 检查mysqld服务

systemctl status mysqld
mysql.service - MySQL Server
     Loaded: loaded (/etc/systemd/system/mysql.service; enabled; preset: disabled)
     Active: active (running) since Tue 2025-11-11 11:08:15 CST; 29s ago
    Process: 16492 ExecStart=/usr/local/mysql/support-files/mysql.server start (code=exited, status=0/SUCCESS)
   Main PID: 16505 (mysqld_safe)
      Tasks: 42 (limit: 10892)
     Memory: 459.6M
        CPU: 1.362s
     CGroup: /system.slice/mysql.service
             ├─16505 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql/data --pid-file=/var/lib/mysql/mysql.pid
             └─17120 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/data/mysql/da>

Nov 11 11:08:13 localhost.localdomain systemd[1]: Starting MySQL Server...
Nov 11 11:08:15 localhost.localdomain mysql.server[16492]: Starting MySQL.. SUCCESS!
Nov 11 11:08:15 localhost.localdomain systemd[1]: Started MySQL Server.

congratulation,可以看到mysqld启动成功了。

4.连接mysql数据库

mysql已经启动完成了,接下来我们连接下mysql试下。

4.1 数据库初始密码

首次启动mysql,密码会生成在/data/mysql/data/mysqld.log日志文件中,获取密码命令如下:

grep "temporary pass" /data/mysql/data/mysqld.log
2025-11-11T03:04:22.935412Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: lffm:Yuql2(t

之后通过以下命令连接数据库:

mysql -uroot -p
Enter password:

然后输入初始化密码,即可连接上数据库。

4.2 修改初始密码

通过初始密码初始连接数据库之后,之后修改密码后才能操作数据库,修改密码命令如下:

alter user root@localhost identified by "dianlian.123";
flush privileges;

4.3 root开放远程访问

有些时候需要开放root账号允许远程访问,命令如下:

use mysql;
update user set host="%" where user="root";

这之后就可以通过客户端使用root账号远程连接mysql数据库了。

5.总结

到这里mysql就已经部署完成了,并且也可以正常访问和使用了,编译安装的整个过程还是比较简单的,主要是要注意mysql相关的配置,对于mysql的性能、主从复制影响比较大,然后Mysql作为数据存储服务,还需要注意数据备份,数据安全等。

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
云原生数据库 veDB 核心技术剖析与展望
veDB 是一款分布式数据库,采用了云原生计算存储分离架构。本次演讲将为大家介绍火山引擎这款云原生数据库的核心技术原理,并对未来进行展望。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论