下载安装包 mysql-8.0.44-linux-glibc2.28-x86_64.tar.xz
https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.44-linux-glibc2.28-x86_64.tar.xz
bash
sudo tar -xvf mysql-8.0.44-linux-glibc2.28-x86_64.tar.xz
sudo mv mysql-8.0.44-linux-glibc2.28-x86_64 /usr/local/
cd /usr/local/mysql
sudo mkdir data tmp log
设置权限
bash
sudo groupadd -r mysql
sudo useradd -r -s /sbin/nologin -g mysql -d /usr/local/mysql mysql
sudo chown -R mysql:mysql /usr/local/mysql/data
sudo chmod -R 700 /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql/log
sudo chmod -R 755 /usr/local/mysql/log
sudo chown -R mysql:mysql /usr/local/mysql/tmp
sudo chmod -R 755 /usr/local/mysql/tmp
sudo chown mysql:mysql /usr/local/mysql
sudo chmod 755 /usr/local/mysql
编写配置
bash
sudo vim /etc/my.cnf
配置内容如下
txt
[client]
port = 3306
socket = /usr/local/mysql/tmp/mysqld.sock
default-character-set = utf8mb4
[mysqld]
# 基础配置(保留你的核心项)
port = 3306
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
tmpdir = /usr/local/mysql/tmp
socket = /usr/local/mysql/tmp/mysqld.sock
pid-file = /usr/local/mysql/log/mysql.pid
log_error = /usr/local/mysql/log/error.log
slow_query_log_file = /usr/local/mysql/log/slow.log
explicit_defaults_for_timestamp=true
lower_case_table_names=1
# 字符集(MySQL8默认utf8mb4,显式配置避免乱码)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
# 核心性能优化(1核2G)
user = mysql
bind-address = 0.0.0.0 # 允许远程连接(按需关闭)
skip-name-resolve # 关闭DNS解析,提升连接速度
back_log = 64 # 连接请求队列大小
max_connections = 100 # 最大连接数(低配避免内存溢出)
max_connect_errors = 100000
# 内存优化(关键:总占用控制在1G内)
table_open_cache = 256
table_definition_cache = 256
open_files_limit = 65535
tmp_table_size = 64M
max_heap_table_size = 64M
join_buffer_size = 1M
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
# InnoDB核心(1核2G)
default-storage-engine = InnoDB
innodb_buffer_pool_size = 1G # 内存的50%(2G内存分配1G)
innodb_buffer_pool_instances = 1 # 单实例即可
innodb_log_file_size = 256M # 日志文件大小(不超过4G)
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2 # 性能优先(每秒刷盘,允许1秒数据丢失)
innodb_flush_method = O_DIRECT # 绕过系统缓存,提升IO效率
innodb_file_per_table = 1 # 每张表独立ibd文件
innodb_io_capacity = 100 # 适配普通HDD/低性能SSD
innodb_autoextend_increment = 64
innodb_lock_wait_timeout = 10 # 锁等待超时时间
# 日志优化
slow_query_log = 1 # 开启慢查询日志
long_query_time = 1 # 超过1秒的查询记录
log_queries_not_using_indexes = 1 # 记录未使用索引的查询
log_slow_admin_statements = 1 # 记录管理类慢查询(如ALTER)
general_log = 0 # 关闭通用日志(生产环境禁用)
# 其他优化
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_allowed_packet = 64M # 最大数据包大小
wait_timeout = 600 # 空闲连接超时
interactive_timeout = 600
skip-external-locking # 关闭外部锁
初始化mysqld
bash
sudo ./mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql
设置启动服务
bash
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
vim /usr/lib/systemd/system/mysqld.service
mysqld.service 内容如下
bash
[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]
Type=forking
User=mysql
Group=mysql
# 调用 mysql.server 启动/停止
ExecStart=/etc/init.d/mysql start
ExecStop=/etc/init.d/mysql stop
ExecReload=/etc/init.d/mysql reload
# 重启策略
Restart=on-failure
RestartSec=5
# 限制资源
LimitNOFILE=65535
PrivateTmp=true
修改 mysql.server
bash
vim /usr/local/mysql/support-files/mysql.server
sh
# 原内容(默认是空/默认路径)
basedir=
datadir=
# 修改后(适配你的安装路径)
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
bash
# 启动服务
systemctl start mysqld
# 检查服务状态
systemctl status mysqld
# 设置开机自启
systemctl enable mysqld
# 停止服务(测试)
systemctl stop mysqld
查看初始密码
bash
cd /usr/local/mysql/log
sudo cat error.log

登录mysql & 设置秘密
bash
mysql -uroot -p
sql
#更新密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
flush privileges;
#开启远程
#grant all privileges on *.* to root@'%' identified by '123456';
show databases;
use mysql;
update user set host="%" where user='root';
flush privileges;
GRANT ALL ON *.* TO 'root'@'%';
flush privileges;
exit;
搞定了