乐于分享
好东西不私藏

MySQL 安装与使用教程(Ubuntu 26.04 LTS)

MySQL 安装与使用教程(Ubuntu 26.04 LTS)

📦 一、安装 MySQL

1.1 更新软件源

sudo apt update

1.2 安装 MySQL Server

sudo apt install mysql-server -y

1.3 验证安装

# 查看版本
mysql --version

# 查看服务状态
sudo systemctl status mysql

出现 active (running) 即表示安装成功 ✅

1.4 设置开机自启

sudo systemctl enable mysql

🔒 二、安全初始化

2.1 运行安全脚本

sudo mysql_secure_installation

脚本会依次询问:

问题
建议选择
是否启用密码验证策略?
N
(个人开发环境选N,生产环境选Y)
设置root密码
输入你想设的密码
移除匿名用户?
Y
禁止root远程登录?
Y
删除test数据库?
Y
重新加载权限表?
Y

🔑 三、登录与用户管理

3.1 登录 MySQL

# 方式一:root用户(需要sudo)
sudo mysql

# 方式二:用密码登录
mysql -u root -p

3.2 修改root密码认证方式

Ubuntu 26.04的MySQL默认使用 auth_socket 认证,需改为密码认证才能远程登录:

-- 在MySQL命令行内执行
ALTERUSER'root'@'localhost'IDENTIFIEDWITH mysql_native_password BY'你的密码';
FLUSHPRIVILEGES;

3.3 创建新用户

-- 创建用户并授权所有权限
CREATEUSER'myuser'@'localhost'IDENTIFIEDBY'你的密码';
GRANTALLPRIVILEGESON *.* TO'myuser'@'localhost';
FLUSHPRIVILEGES;

-- 只授权特定数据库
CREATEUSER'myuser'@'localhost'IDENTIFIEDBY'你的密码';
GRANTALLPRIVILEGESON mydb.* TO'myuser'@'localhost';
FLUSHPRIVILEGES;

3.4 查看已有用户

SELECTuser, host, authentication_string FROM mysql.user;

📂 四、数据库基本操作

4.1 数据库操作

-- 创建数据库
CREATEDATABASE mydb DEFAULTCHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 查看所有数据库
SHOWDATABASES;

-- 使用数据库
USE mydb;

-- 删除数据库
DROPDATABASE mydb;

4.2 表操作

-- 创建表
CREATETABLEusers (
idINT AUTO_INCREMENT PRIMARY KEY,
nameVARCHAR(50NOTNULL,
    email VARCHAR(100UNIQUE,
    age INTDEFAULT0,
    created_at TIMESTAMPDEFAULTCURRENT_TIMESTAMP
ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;

-- 查看所有表
SHOWTABLES;

-- 查看表结构
DESC users;

-- 查看建表语句
SHOWCREATETABLEusers;

-- 删除表
DROPTABLEusers;

-- 修改表名
RENAMETABLEusersTO members;

-- 添加列
ALTERTABLEusersADDCOLUMN phone VARCHAR(20AFTER email;

-- 删除列
ALTERTABLEusersDROPCOLUMN phone;

-- 修改列类型
ALTERTABLEusersMODIFYCOLUMNnameVARCHAR(100);

✏️ 五、数据增删改查(CRUD)

5.1 插入数据(INSERT)

-- 插入单条
INSERTINTOusers (name, email, age) VALUES ('张三''zhangsan@example.com'25);

-- 插入多条
INSERTINTOusers (name, email, age) VALUES
    ('李四''lisi@example.com'30),
    ('王五''wangwu@example.com'28);

5.2 查询数据(SELECT)

-- 查询所有
SELECT * FROMusers;

-- 查询指定列
SELECTname, email FROMusers;

-- 条件查询
SELECT * FROMusersWHERE age > 25;

-- 模糊查询
SELECT * FROMusersWHEREnameLIKE'张%';

-- 排序
SELECT * FROMusersORDERBY age DESC;

-- 分页(每页10条,第2页)
SELECT * FROMusersLIMIT10OFFSET10;

-- 统计
SELECTCOUNT(*) AS total FROMusers;
SELECT age, COUNT(*) AScountFROMusersGROUPBY age;

5.3 更新数据(UPDATE)

-- ⚠️ 务必带WHERE,否则全表更新!
UPDATEusersSET age = 26WHEREname = '张三';

-- 同时更新多个字段
UPDATEusersSET email = 'new@example.com', age = 27WHEREid = 1;

5.4 删除数据(DELETE)

-- ⚠️ 务必带WHERE,否则全表删除!
DELETEFROMusersWHEREid = 1;

-- 清空整表(比DELETE快,重置自增ID)
TRUNCATETABLEusers;

🔗 六、远程访问配置

6.1 修改监听地址

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

找到 bind-address,改为:

# 仅允许本机
bind-address = 127.0.0.1

# 允许所有IP连接(注意安全风险)
bind-address = 0.0.0.0

# 允许指定IP
bind-address = 192.168.1.100

6.2 创建远程用户

CREATEUSER'myuser'@'%'IDENTIFIEDBY'你的密码';
GRANTALLPRIVILEGESON mydb.* TO'myuser'@'%';
FLUSHPRIVILEGES;

6.3 重启生效

sudo systemctl restart mysql

6.4 防火墙放行

sudo ufw allow 3306/tcp

6.5 远程连接测试

# 在另一台机器上
mysql -h 服务器IP -u myuser -p

💾 七、备份与恢复

7.1 导出数据库

# 导出单个数据库
mysqldump -u root -p mydb > mydb_backup.sql

# 导出所有数据库
mysqldump -u root -p --all-databases > all_backup.sql

# 只导出表结构(不含数据)
mysqldump -u root -p --no-data mydb > mydb_schema.sql

# 导出并压缩
mysqldump -u root -p mydb | gzip > mydb_backup.sql.gz

7.2 导入数据库

# 导入sql文件
mysql -u root -p mydb < mydb_backup.sql

# 从压缩文件恢复
gunzip < mydb_backup.sql.gz | mysql -u root -p mydb

7.3 定时备份(可选)

# 添加到crontab,每天凌晨3点备份
crontab -e

添加一行:

0 3 * * * mysqldump -u root -p你的密码 mydb | gzip > /home/wwx818/backup/mydb_$(date +\%Y\%m\%d).sql.gz

⚡ 八、常用管理命令

8.1 服务管理

sudo systemctl start mysql    # 启动
sudo systemctl stop mysql     # 停止
sudo systemctl restart mysql  # 重启
sudo systemctl status mysql   # 查看状态

8.2 常用SQL管理语句

-- 查看当前连接数
SHOWSTATUSLIKE'Threads_connected';

-- 查看MySQL配置变量
SHOWVARIABLESLIKE'max_connections';

-- 查看慢查询日志状态
SHOWVARIABLESLIKE'slow_query%';

-- 查看正在执行的SQL
SHOWPROCESSLIST;

-- 杀掉某个连接
KILL 连接ID;

-- 查看各表占用空间
SELECT
    table_name AS'表名',
    table_rows AS'行数',
ROUND(data_length/1024/10242AS'数据大小(MB)',
ROUND(index_length/1024/10242AS'索引大小(MB)'
FROM information_schema.tables
WHERE table_schema = 'mydb'
ORDERBY data_length DESC;

🔧 九、常见问题排查

Q1: 忘记root密码

# 1. 停止MySQL
sudo systemctl stop mysql

# 2. 以安全模式启动(跳过权限验证)
sudo mysqld_safe --skip-grant-tables &

# 3. 无密码登录
mysql -u root

# 4. 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;

# 5. 退出并重启正常模式
sudo systemctl restart mysql

Q2: 连接报错 "Access denied"

-- 检查用户和host
SELECTuser, host FROM mysql.user;

-- 如果用户host是localhost,远程连不上,需要创建'%'用户
CREATEUSER'root'@'%'IDENTIFIEDBY'密码';
GRANTALLPRIVILEGESON *.* TO'root'@'%'WITHGRANTOPTION;
FLUSHPRIVILEGES;

Q3: 中文乱码

-- 查看字符集
SHOWVARIABLESLIKE'character%';

-- 确保数据库和表使用utf8mb4
CREATEDATABASE mydb DEFAULTCHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

Q4: 磁盘空间不足

-- 查看各数据库大小
SELECT
    table_schema AS'数据库',
ROUND(SUM(data_length + index_length)/1024/10242AS'大小(MB)'
FROM information_schema.tables
GROUPBY table_schema
ORDERBYSUM(data_length + index_length) DESC;

📌 十、速查表

操作
命令
安装
sudo apt install mysql-server -y
登录
mysql -u root -p
创建库
CREATE DATABASE 库名;
创建表
CREATE TABLE 表名 (...);
插入
INSERT INTO 表名 VALUES (...);
查询
SELECT * FROM 表名 WHERE 条件;
更新
UPDATE 表名 SET 字段=值 WHERE 条件;
删除
DELETE FROM 表名 WHERE 条件;
备份
mysqldump -u root -p 库名 > file.sql
恢复
mysql -u root -p 库名 < file.sql
状态
sudo systemctl status mysql

💡 提示:生产环境建议开启慢查询日志、定期备份、限制远程访问IP,并使用强密码。

相关学习资料