📦 一、安装 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 | |
| Y | |
| Y | |
| 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(50) NOTNULL,
email VARCHAR(100) UNIQUE,
age INTDEFAULT0,
created_at TIMESTAMPDEFAULTCURRENT_TIMESTAMP
) ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;
-- 查看所有表
SHOWTABLES;
-- 查看表结构
DESC users;
-- 查看建表语句
SHOWCREATETABLEusers;
-- 删除表
DROPTABLEusers;
-- 修改表名
RENAMETABLEusersTO members;
-- 添加列
ALTERTABLEusersADDCOLUMN phone VARCHAR(20) AFTER 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/1024, 2) AS'数据大小(MB)',
ROUND(index_length/1024/1024, 2) AS'索引大小(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/1024, 2) AS'大小(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,并使用强密码。
夜雨聆风