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;

搞定了

相关推荐
Xの哲學2 小时前
Linux VxLAN深度解析: 从数据平面到内核实现的全面剖析
linux·服务器·算法·架构·边缘计算
添砖java‘’2 小时前
Linux信号机制详解:从产生到处理
linux·c++·操作系统·信号处理
MC皮蛋侠客3 小时前
Linux C++使用GDB调试动态库崩溃问题完全指南
linux·c++
Wang's Blog3 小时前
RabbitMQ: 消息发送、连接管理、消息封装与三种工程方案
linux·ubuntu·rabbitmq
Vect__3 小时前
初识操作系统
linux
若风的雨3 小时前
pcie bar 地址对齐规则
linux
CQ_YM4 小时前
Linux线程控制
linux·c语言·开发语言·线程
zengxiaobai4 小时前
客户端 address 不足
linux
代码游侠4 小时前
学习笔记——线程控制 - 互斥与同步
linux·运维·笔记·学习·算法