ubuntu24安装mysql 8.0.46

1.更新系统软件包
在安装前,建议先更新系统的软件包列表以确保获取最新的软件信息:

sudo apt update
sudo apt upgrade -y


2. 安装 MySQL 8.0
执行以下命令安装 MySQL 服务器(Ubuntu 24 默认仓库提供的 MySQL 版本即为 8.0):

sudo apt install mysql-server -y


3. 启动服务并设置开机自启
安装完成后,MySQL 服务通常会自动启动。为确保万无一失,可以手动启动并设置开机自启:

sudo systemctl start mysql
sudo systemctl enable mysql
sudo systemctl restart mysql


4. 检查 MySQL 运行状态
确认 MySQL 是否成功运行:

sudo systemctl status mysql


当看到 Active: active (running) 时,说明服务已正常运行。
5. 登录并设置 Root 密码
Ubuntu 默认安装的 MySQL 没有设置 root 密码,且仅允许本地验证登录。直接回车即可登录:

sudo mysql -u root -p


登录成功后,执行以下 SQL 语句为 root 用户设置强密码(请将 ‘你的新密码’ 替换为你自己的密码):
完成后输入 quit; 退出。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
FLUSH PRIVILEGES;



6. 运行安全配置向导(可选但推荐)
MySQL 提供了安全配置脚本,可以帮助你移除匿名用户、禁止 root 远程登录、删除测试数据库等:

sudo mysql_secure_installation


7. 配置远程访问(可选)
如果你需要从其他机器远程连接该数据库,需要进行以下两步配置:
修改配置文件: 编辑 MySQL 配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf,找到 bind-address 并将其修改为允许所有 IP 访问:

bind-address = 0.0.0.0


授权远程用户: 登录 MySQL 后,为 root 用户(或新建用户)开启远程访问权限:

默认没有密码  设置新密码 兼容老系统
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourStrongPass@123';

GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '你的新密码' WITH GRANT OPTION;
FLUSH PRIVILEGES;
创建一个用于xiaoxing 授权ip 192.168.1.%  可以访问 my_database 数据库所有信息。

-- 推荐:创建专用用户(不要用 root!)
CREATE USER 'xiaoxing'@'192.168.1.%' IDENTIFIED BY '你的密码';

-- 授予所需权限(例如所有数据库,或指定库)
GRANT ALL PRIVILEGES ON my_database.* TO 'xiaoxing'@'192.168.1.%';

-- 刷新权限
FLUSH PRIVILEGES;
查看所有的用户

select user,host,plugin from mysql.user;

+---------------+-----------+
| User          | host      |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
3 rows in set (0.00 sec)

#允许任意ip访问mysql
UPDATE mysql.user SET host = '%' WHERE user = 'root';


创建一个数据库test

CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

show databases;
use test;
show tables;


重启服务并开放防火墙: 修改配置后需重启 MySQL 服务(sudo systemctl restart mysql)。如果系统开启了防火墙,还需开放 3306 端口:sudo ufw allow 3306/tcp。

避坑提示:关于表名大小写在 Linux 下默认安装的 MySQL 是严格区分表名和数据库名大小写的。如果你的业务代码没有严格区分大小写,建议在安装完、初始化数据之前,修改配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 下添加 lower_case_table_names=1 来关闭大小写敏感。注意:此参数必须在数据库初始化前配置,否则可能导致 MySQL 无法启动。

如何修改mysql 数据库目录

配置文件里面端口和数据库文件存放位置
# port		= 3306
# datadir	= /var/lib/mysql


# 先停掉 MySQL
systemctl stop mysql

# 复制数据(-a 保留权限、所有者等)
cp -a /var/lib/mysql/. /data1/mysql/

# 或者用 rsync
# rsync -av /var/lib/mysql/ /data1/mysql/

chown -R mysql:mysql /data1/mysql/
chmod 750 /data1/mysql          # 目录权限 750 足够,内部文件会自动继承之前的权限

修改mysql 数据库文件目录后 需要 配置 AppArmor(最容易被忽略的一步)

Ubuntu/Debian 的 AppArmor 默认只允许 MySQL 访问 /var/lib/mysql,访问新路径 /data1 会被拦截,报 Permission denied

# 编辑 MySQL 的 AppArmor 配置

vim /etc/apparmor.d/usr.sbin.mysqld

找到类似以下两行(通常在文件靠前位置):

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

在它们下面添加两行针对新路径的规则:

/data1/mysql/ r,
/data1/mysql/** rwk,

保存退出后,重新加载 AppArmor 规则:

systemctl restart apparmor


忘记密码如何操作

先停止mysqld57 / mysql8 服务

windows启动超级模式

.\mysqld.exe --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" --skip-grant-tables --console

直接
mysql -uroot  
进去操作

查看 root 用户认证方式

SELECT user,host,plugin FROM mysql.user;


-------------------------------------------------------------

linux  类似操作
sudo systemctl stop mysql

sudo mysqld_safe --skip-grant-tables --skip-networking &
或者
sudo /usr/bin/mysqld_safe --skip-grant-tables --skip-networking &

如果提示
Directory '/var/run/mysqld' for UNIX socket file don't exists.

sudo mkdir -p /var/run/mysqld
sudo chmod 755 /var/run/mysqld
sudo chown -R mysql:mysql /var/run/mysqld
在执行   sudo /usr/bin/mysqld_safe --skip-grant-tables --skip-networking &

查看 root 用户认证方式

SELECT user,host,plugin FROM mysql.user;

MySQL 8 在 --skip-grant-tables 下不能直接改密码,需要先执行:  mysql5.7 无视
FLUSH PRIVILEGES;


ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;

ps -ef | grep mysqld

sudo kill -9 PID   停掉刚刚的mysql

或者
sudo pkill mysqld
sudo pkill mysqld_safe

sudo systemctl start mysql

创建用户

CREATE USER 'root'@'223.93.145.203' IDENTIFIED WITH mysql_native_password BY '你的密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'223.93.145.203';
FLUSH PRIVILEGES;

#创建指定用户 指定ip访问
CREATE USER 'scan'@'120.26.168.246' IDENTIFIED WITH mysql_native_password BY '你的密码';
#授权指定用户 访问 scan_cookies 这个数据库
GRANT ALL PRIVILEGES ON scan_cookies.* TO 'scan'@'120.26.168.246';
FLUSH PRIVILEGES;


ALTER USER 'root'@'223.93.145.203' IDENTIFIED WITH mysql_native_password BY 'MyPassword@123';
ALTER USER 'root'@'120.26.168.246' IDENTIFIED WITH mysql_native_password BY 'MyPassword@123';
FLUSH PRIVILEGES;