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.gz2.开始安装
2.1解压
tar -zxvf mysql-8.4.8.tar.gz
#解压后,源码在文件夹mysql-8.4.8目录中2.2创建编译目录,并进入编译目录
mkdir -p ~/mysql-build && cd ~/mysql-build2.3创建 mysql 系统用户
sudo groupadd -r mysql
sudo useradd -r -s /sbin/nologin -g mysql -d /usr/local/mysql mysql2.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 install2.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 --show3.后续配置
目录权限配置
# 设置安装目录归属
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;
评论区