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;