数据库是按照一定的数据模型组织、存储和管理数据的系统。在计算机应用中,数据是核心资产,而数据库就是管理这些资产的专业工具。
数据库不仅仅是数据的集合,更是一个完整的数据管理系统,它提供了:
在众多数据库系统中,MySQL脱颖而出的原因:
MySQL是世界上最流行的开源关系型数据库管理系统(RDBMS),具有以下特点:
在安装MySQL之前,需要考虑以下因素:
# 更新Homebrew
brew update
# 安装MySQL
brew install mysql
# 启动MySQL服务
brew services start mysql
# 查看服务状态
brew services list
# 安全配置(首次运行)
mysql_secure_installation
# 更新包管理器
sudo apt update
# 安装MySQL服务器
sudo apt install mysql-server
# 启动服务
sudo systemctl start mysql
# 设置开机自启
sudo systemctl enable mysql
# 查看服务状态
sudo systemctl status mysql
# 安全配置
sudo mysql_secure_installation
# 下载MySQL APT配置包
wget https://dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb
# 安装配置包
sudo dpkg -i mysql-apt-config_0.8.15-1_all.deb
# 更新包列表
sudo apt update
# 安装MySQL服务器
sudo apt install mysql-server
# 安全配置
sudo mysql_secure_installation
安装完成后,通过以下命令验证MySQL是否正常运行:
# 检查MySQL服务状态
sudo systemctl status mysql # Linux/macOS
# 或通过服务管理器查看Windows服务状态
# 尝试连接MySQL
mysql -u root -p
# 在MySQL中执行基本命令
SELECT VERSION();
SHOW DATABASES;
# Windows
net start mysql
# macOS
brew services start mysql
# Linux
sudo systemctl start mysql
使用命令行客户端连接:
mysql -u root -p
输入密码后即可进入MySQL命令行界面。
MySQL自带的命令行客户端是最基础也是最强大的工具:
# 基本连接语法
mysql -h 主机名 -u 用户名 -p 密码 -P 端口号
# 常用参数说明
-h: 指定主机地址(默认localhost)
-u: 指定用户名(默认root)
-p: 提示输入密码
-P: 指定端口号(默认3306)
-D: 指定要连接的数据库
| 存储引擎 | 事务支持 | 行锁 | 外键支持 | 适用场景 |
|---|---|---|---|---|
| InnoDB | 支持 | 支持 | 支持 | OLTP应用、高并发场景 |
| MyISAM | 不支持 | 不支持 | 不支持 | OLAP应用、只读场景 |
| Memory | 不支持 | 表锁 | 不支持 | 临时表、缓存 |
| Archive | 不支持 | 行锁 | 不支持 | 归档数据、日志存储 |
SQL(Structured Query Language)是用于管理关系型数据库的标准语言,分为以下几类:
-- 查看MySQL版本信息
SELECT VERSION();
-- 查看当前数据库用户
SELECT USER();
-- 查看当前连接的数据库
SELECT DATABASE();
-- 查看服务器状态
SHOW STATUS;
-- 查看系统变量
SHOW VARIABLES;
-- 获取当前日期时间
SELECT NOW();
-- 获取当前日期
SELECT CURDATE();
-- 获取当前时间
SELECT CURTIME();
-- 获取时间戳
SELECT UNIX_TIMESTAMP();
-- 显示所有数据库
SHOW DATABASES;
-- 显示当前数据库中的所有表
SHOW TABLES;
-- 显示表的创建语句
SHOW CREATE TABLE 表名;
-- 显示表结构
DESCRIBE 表名;
或
DESC 表名;
-- 退出MySQL连接
EXIT;
或
QUIT;
或
\q
-- 显示当前连接信息
SHOW PROCESSLIST;
-- 终止指定连接
KILL 连接ID;
-- 刷新权限
FLUSH PRIVILEGES;
SELECT VERSION(); 查看MySQL版本SELECT USER(); 查看当前用户SELECT NOW(); 查看当前时间SHOW DATABASES; 查看所有数据库原因: 用户名/密码错误、权限不足、网络问题
解决方案: 检查用户名密码、确认用户权限、检查网络连接
原因: 端口被占用、配置文件错误、权限问题
解决方案: 检查端口占用、验证配置文件、检查文件权限
解决方案:
原因: 其他MySQL实例或应用占用了3306端口
解决方案:
netstat -ano | findstr 3306查看占用进程,然后结束该进程lsof -i :3306查看占用进程,然后使用kill命令结束原因: 数据库、表或连接使用了不同的字符集,导致乱码
解决方案:
CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;mysql -u root -p --default-character-set=utf8mb4ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;原因: 用户缺少相应的操作权限
解决方案:
GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost';FLUSH PRIVILEGES;SHOW GRANTS FOR 'user'@'localhost';原因: MySQL配置的内存使用超过系统可用内存
解决方案:
innodb_buffer_pool_size参数,一般设置为系统内存的50-70%max_connections参数值原因: 系统防火墙或网络防火墙阻止了MySQL端口
解决方案:
sudo ufw allow 3306(Ubuntu)或修改iptables规则原因: 文件权限、字符集不匹配、SQL语法错误
解决方案:
mysql -u root -p database < file.sql导入数据mysqldump -u root -p database > file.sql导出数据原因: 缺少索引、查询语句优化不足、配置不合理
解决方案:
EXPLAIN分析查询执行计划OPTIMIZE TABLE tablename;原因: 不同MySQL版本的语法或功能差异
解决方案:
SELECT VERSION();原因: 复杂查询生成的临时表超过了配置的临时表空间大小
解决方案:
tmp_table_size和max_heap_table_size参数值