0.前言
在当代技术领域,各类数据库层出不穷,有传统关系型数据库mysql、pgsql,有文档数据库es、mongodb,有分布式数据库TiDB等等,但是mysql还是凭借着许多优秀的特性稳坐数据库榜首,深受技术人员的青睐。今天我们就在rocky9 linux操作系统上编译安装一台mysql,带大家了解一下mysql的部署步骤和常用的配置。
1.准备工作
在部署之前我们先准备一下服务器和需要安装的mysql安装包。
1.1 服务器配置
| 操作系统 | IP地址 | cpu | 内存 |
|---|---|---|---|
| rocky9 linux | 192.168.159.172 | 2C | 4G |
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,设置日志同步到磁盘方式
#(1)MySQL 的事务日志中,为了性能和效率,可以配置每次事务提交后是否将日志缓冲刷到 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作为数据存储服务,还需要注意数据备份,数据安全等。
