侧边栏壁纸
  • 累计撰写 52 篇文章
  • 累计创建 14 个标签
  • 累计收到 11 条评论

目 录CONTENT

文章目录

Ubuntu编译安装MySQL

Ywxmz
2026-03-22 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

1.依赖安装

在正式开始安装MySQL之前,需要安装相关的依赖,我这里是要安装MySQL8.4.8版本,

apt install -y cmake gcc g++ libcurl4-openssl-dev zlib1g-dev libtirpc-dev \
bison libncurses5-dev pkg-config git

然后需要把对对应的包下载下来,注意:需要下载正确的版本

wget https://cdn.mysql.com/Downloads/MySQL-8.4/mysql-8.4.8.tar.gz

2.开始安装

2.1解压

tar -zxvf mysql-8.4.8.tar.gz
#解压后,源码在文件夹mysql-8.4.8目录中

2.2创建编译目录,并进入编译目录

mkdir -p ~/mysql-build && cd ~/mysql-build

2.3创建 mysql 系统用户

sudo groupadd -r mysql
sudo useradd -r -s /sbin/nologin -g mysql -d /usr/local/mysql mysql

2.4CMake配置

# 重新执行 CMake 配置(确保配置正确)
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DCMAKE_BUILD_TYPE=Release \
/root/mysql-8.4.8    #根据你解压后的路径填写

2.5编译 + 安装

# 编译(-j 后接CPU核心数,例如4核写 -j4,加速编译)
make -j$(nproc)

# 安装(编译完成后执行)
sudo make install

2.6编译进程被杀死

如果出现以下报错

c++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
make[2]: *** [sql/CMakeFiles/sql_gis.dir/build.make:146: sql/CMakeFiles/sql_gis.dir/gis/difference_functor.cc.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/Makefile2:49148: sql/CMakeFiles/sql_gis.dir/all] Error 2

可能是Swap 分区不够的原因,可以创建一个swap分区或者扩大大小。

df -h /  # 查看根目录可用空间

建议至少8G可用

删除之前创建的无效 Swap 文件

sudo rm -f /swapfile

重新创建并启用 Swap

# 1. 用 dd 创建 8GB Swap 文件
sudo dd if=/dev/zero of=/swapfile bs=1G count=8

# 2. 设置权限(必须,否则无法启用)
sudo chmod 600 /swapfile

# 3. 格式化 Swap 文件
sudo mkswap /swapfile

# 4. 启用 Swap
sudo swapon /swapfile

# 5. 验证是否生效(此时必须有输出)
sudo swapon --show

3.后续配置

目录权限配置

# 设置安装目录归属
sudo chown -R mysql:mysql /usr/local/mysql
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql/data

初始化 MySQL(生成临时密码,务必保存)

sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data

创建服务文件

# 创建 mysqld 服务文件
sudo tee /etc/systemd/system/mysqld.service > /dev/null << EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
Type=notify
TimeoutSec=0
PermissionsStartOnly=true
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --datadir=/usr/local/mysql/data --socket=/tmp/mysql.sock
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
Environment=MYSQLD_PARENT_PID=1

PrivateTmp=false
EOF

创建配置文件

vim /etc/my.cnf
# ======================== MySQL 8.4.8 极简稳定配置 ========================
#注意:我的配置是基于当前程序部署了其他服务而配置的,请根据你的实际情况修改
[mysqld]
# 基础路径(编译安装路径)
basedir = /usr/local/mysql          
datadir = /usr/local/mysql/data      
socket = /tmp/mysql.sock            
pid-file = /usr/local/mysql/mysql.pid
user = mysql                        
port = 3306                         
bind-address = 0.0.0.0              
server-id = 1                       

# 字符集配置(8.4 原生支持,无弃用参数)
character-set-server = utf8mb4                 
collation-server = utf8mb4_unicode_ci          
init_connect = 'SET NAMES utf8mb4'             

# 连接配置(16G内存+PostgreSQL适配)
max_connections = 1000                        
max_connect_errors = 1000000                   
wait_timeout = 600                             
interactive_timeout = 600                      
connect_timeout = 10                           

# 日志配置(仅保留必要项,无弃用警告不影响启动)
log-error = /usr/local/mysql/data/mysql-error.log
log_error_verbosity = 3                        
slow_query_log = 1                             
slow_query_log_file = /usr/local/mysql/data/mysql-slow.log
long_query_time = 1                             
log_slow_admin_statements = 1                   
log_bin = /usr/local/mysql/data/mysql-bin      
binlog_format = ROW                             
max_binlog_size = 1G                            
binlog_expire_logs_seconds = 604800             
sync_binlog = 1                                 
log_replica_updates = 1                         

# InnoDB 核心配置(8.4 最低要求 + 16G内存适配)
innodb_buffer_pool_size = 8G                    # 16G内存分配8G
innodb_buffer_pool_instances = 8               
innodb_log_buffer_size = 128M                  
innodb_redo_log_capacity = 4G                   # 替代弃用的 innodb_log_file_size
innodb_data_file_path = ibdata1:5M:autoextend   # 8.4 最低5MB初始大小
innodb_file_per_table = 1                      
innodb_flush_log_at_trx_commit = 1             
innodb_flush_method = O_DIRECT                 
innodb_io_capacity = 3000                      
innodb_io_capacity_max = 6000                   
innodb_flush_neighbors = 0                     
innodb_read_io_threads = 8                      
innodb_write_io_threads = 8                     
innodb_thread_concurrency = 0                   
innodb_lock_wait_timeout = 50                   

# 安全与性能配置(仅保留必要项)
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
tmp_table_size = 128M                          
max_heap_table_size = 128M                     
sort_buffer_size = 1M                           
join_buffer_size = 1M                           
read_buffer_size = 1M                           
read_rnd_buffer_size = 2M                       
table_open_cache = 10000                       
table_definition_cache = 10000                  
thread_cache_size = 200                         

# ======================== 客户端配置 ========================
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8mb4                 

[mysql]
default-character-set = utf8mb4                 
prompt = "\u@\h [\d] > "                       

[mysqld_safe]
log-error = /usr/local/mysql/data/mysql-error.log
pid-file = /usr/local/mysql/mysql.pid

[mysqldump]
quick                                          
max_allowed_packet = 1G                        

配置环境变量

# 配置环境变量(全局生效)
sudo echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
source /etc/profile

启动服务

sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld

# 检查服务状态
sudo systemctl status mysqld

修改 root 密码

# 登录(输入初始化时的临时密码)
mysql -uroot -p

# 执行以下SQL修改密码(替换为你的新密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;
exit;

0

评论区