Ubuntu mysql8 tar.xz 安装

下载安装包 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;

搞定了

相关推荐
Championship.23.249 分钟前
Linux 3.0 音频机制深度解析:ALSA基础架构与传统音频驱动模型
linux·运维·音视频·alsa
哆啦A梦——30 分钟前
Ubuntu 虚拟机 Docker 与 MySQL 8.0.42 部署指南
mysql·ubuntu·docker
Tian_Hang33 分钟前
Linux基础知识(四)
linux·ide·驱动开发·计算机视觉·硬件工程·动画
HLC++1 小时前
Linux文件操作
linux·运维·服务器
晚风予卿云月1 小时前
【Linux】进程控制(二)——进程等待 全方位详解
linux·运维·服务器·进程控制·进程等待
上天_去_做颗惺星 EVE_BLUE1 小时前
【新 Linux 服务器上手全攻略】系统巡检、存储规划与开发环境初始化
linux·运维·服务器·ubuntu·macos·centos
Titan20241 小时前
Linux文件系统
linux·服务器
c238562 小时前
linux文件权限深入了解(下)
linux·运维·服务器
Zh&&Li2 小时前
保姆级安装AI全自动渗透工具(pentestswarm)
linux·运维·服务器·人工智能
das2m2 小时前
WSL2 Ubuntu 配置完美版 docker compose 指南
linux·ubuntu·docker