外观
MySQL 常用命令
连接与断开命令
连接数据库
基本连接
bash
mysql -u root -p指定主机和端口连接
bash
mysql -h hostname -P port -u username -p使用套接字文件连接
bash
mysql -S /path/to/mysql.sock -u username -p连接到指定数据库
bash
mysql -u username -p database_name执行单条SQL命令
bash
mysql -u username -p -e "SELECT * FROM table_name"断开连接
sql
EXIT;
-- 或
QUIT;
-- 或使用快捷键 Ctrl+D数据库管理命令
创建数据库
基本创建
sql
CREATE DATABASE database_name;指定字符集和排序规则创建
sql
CREATE DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;创建数据库(如果不存在)
sql
CREATE DATABASE IF NOT EXISTS database_name;查看数据库
查看所有数据库
sql
SHOW DATABASES;查看当前数据库
sql
SELECT DATABASE();
-- 或
SELECT schema_name FROM information_schema.schemata WHERE schema_name = DATABASE();查看数据库创建语句
sql
SHOW CREATE DATABASE database_name;切换数据库
sql
USE database_name;修改数据库
修改字符集和排序规则
sql
ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;修改数据库名称(MySQL 5.1.7+)
sql
ALTER DATABASE old_name RENAME TO new_name;
-- 或使用 RENAME DATABASE(不推荐,可能导致数据丢失)删除数据库
基本删除
sql
DROP DATABASE database_name;删除数据库(如果存在)
sql
DROP DATABASE IF EXISTS database_name;表管理命令
创建表
基本创建
sql
CREATE TABLE table_name (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);创建表(如果不存在)
sql
CREATE TABLE IF NOT EXISTS table_name (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
);复制表结构
sql
CREATE TABLE new_table LIKE existing_table;复制表结构和数据
sql
CREATE TABLE new_table AS SELECT * FROM existing_table;查看表
查看当前数据库的所有表
sql
SHOW TABLES;查看表结构
sql
DESCRIBE table_name;
-- 或
SHOW COLUMNS FROM table_name;查看表创建语句
sql
SHOW CREATE TABLE table_name;查看表状态
sql
SHOW TABLE STATUS LIKE 'table_name';修改表
添加列
sql
ALTER TABLE table_name ADD COLUMN column_name VARCHAR(50) NOT NULL;修改列
sql
ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR(100) NULL;修改列名
sql
ALTER TABLE table_name CHANGE COLUMN old_name new_name VARCHAR(50);删除列
sql
ALTER TABLE table_name DROP COLUMN column_name;添加主键
sql
ALTER TABLE table_name ADD PRIMARY KEY (id);添加索引
sql
ALTER TABLE table_name ADD INDEX idx_name (column_name);添加唯一索引
sql
ALTER TABLE table_name ADD UNIQUE INDEX idx_unique_name (column_name);删除表
基本删除
sql
DROP TABLE table_name;删除表(如果存在)
sql
DROP TABLE IF EXISTS table_name;批量删除表
sql
DROP TABLE IF EXISTS table1, table2, table3;清空表
清空表数据(保留表结构)
sql
TRUNCATE TABLE table_name;使用DELETE清空表(逐行删除,可回滚)
sql
DELETE FROM table_name;数据操作命令
插入数据
插入单行数据
sql
INSERT INTO table_name (name, age) VALUES ('John', 30);插入多行数据
sql
INSERT INTO table_name (name, age) VALUES
('John', 30),
('Jane', 25),
('Bob', 35);插入查询结果
sql
INSERT INTO table_name (name, age)
SELECT name, age FROM another_table WHERE status = 1;查询数据
基本查询
sql
SELECT * FROM table_name;查询指定列
sql
SELECT name, age FROM table_name;带WHERE条件查询
sql
SELECT * FROM table_name WHERE age > 25;排序查询
sql
SELECT * FROM table_name ORDER BY age DESC;分组查询
sql
SELECT age, COUNT(*) FROM table_name GROUP BY age;分页查询
sql
SELECT * FROM table_name LIMIT 10 OFFSET 20;
-- 或 MySQL 5.0+ 支持的简写
SELECT * FROM table_name LIMIT 20, 10;联表查询
sql
SELECT t1.name, t2.order_no
FROM users t1
JOIN orders t2 ON t1.id = t2.user_id;更新数据
基本更新
sql
UPDATE table_name SET age = 31 WHERE name = 'John';批量更新
sql
UPDATE table_name SET status = 0 WHERE created_at < '2023-01-01';使用子查询更新
sql
UPDATE table_name SET age = (SELECT MAX(age) FROM another_table) WHERE id = 1;删除数据
基本删除
sql
DELETE FROM table_name WHERE id = 1;批量删除
sql
DELETE FROM table_name WHERE status = 0;使用子查询删除
sql
DELETE FROM table_name WHERE id IN (SELECT user_id FROM another_table WHERE status = 0);用户与权限管理命令
用户管理
创建用户
sql
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';创建用户(使用特定认证插件)
sql
CREATE USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password';查看用户
sql
SELECT user, host FROM mysql.user;
-- 或
SHOW USERS; -- MySQL 8.0+ 支持修改用户密码
sql
-- MySQL 5.7.6+
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';
-- MySQL 5.7.5及之前
SET PASSWORD FOR 'username'@'localhost' = PASSWORD('new_password');删除用户
sql
DROP USER 'username'@'localhost';权限管理
授予权限
sql
-- 授予所有权限(不推荐)
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
-- 授予特定数据库的所有权限
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
-- 授予特定表的SELECT和INSERT权限
GRANT SELECT, INSERT ON database_name.table_name TO 'username'@'localhost';查看用户权限
sql
SHOW GRANTS FOR 'username'@'localhost';撤销权限
sql
-- 撤销特定权限
REVOKE INSERT ON database_name.table_name FROM 'username'@'localhost';
-- 撤销所有权限
REVOKE ALL PRIVILEGES ON *.* FROM 'username'@'localhost';刷新权限
sql
FLUSH PRIVILEGES;索引管理命令
创建索引
普通索引
sql
CREATE INDEX idx_name ON table_name (column_name);唯一索引
sql
CREATE UNIQUE INDEX idx_unique_name ON table_name (column_name);联合索引
sql
CREATE INDEX idx_name_age ON table_name (name, age);全文索引
sql
CREATE FULLTEXT INDEX idx_fulltext_content ON table_name (content);查看索引
sql
SHOW INDEX FROM table_name;
-- 或
SHOW INDEXES FROM table_name;删除索引
sql
DROP INDEX idx_name ON table_name;事务管理命令
事务控制
开始事务
sql
START TRANSACTION;
-- 或
BEGIN;提交事务
sql
COMMIT;回滚事务
sql
ROLLBACK;保存点
sql
SAVEPOINT savepoint_name;
-- 回滚到保存点
ROLLBACK TO SAVEPOINT savepoint_name;
-- 删除保存点
RELEASE SAVEPOINT savepoint_name;查看事务隔离级别
查看全局隔离级别
sql
SELECT @@GLOBAL.transaction_isolation;
-- 或 MySQL 5.7及之前
SELECT @@GLOBAL.tx_isolation;查看会话隔离级别
sql
SELECT @@SESSION.transaction_isolation;
-- 或 MySQL 5.7及之前
SELECT @@SESSION.tx_isolation;设置事务隔离级别
设置全局隔离级别
sql
SET GLOBAL transaction_isolation = 'READ COMMITTED';
-- 或 MySQL 5.7及之前
SET GLOBAL tx_isolation = 'READ-COMMITTED';设置会话隔离级别
sql
SET SESSION transaction_isolation = 'REPEATABLE READ';
-- 或 MySQL 5.7及之前
SET SESSION tx_isolation = 'REPEATABLE-READ';性能监控命令
查看服务器状态
查看所有状态变量
sql
SHOW GLOBAL STATUS;
-- 或查看会话状态
SHOW SESSION STATUS;查看特定状态变量
sql
SHOW GLOBAL STATUS LIKE 'Connections';
-- 或使用SELECT
SELECT @@GLOBAL.Connections;查看InnoDB状态
sql
SHOW ENGINE INNODB STATUS;查看当前进程
sql
SHOW PROCESSLIST;
-- 或查看完整进程列表
SHOW FULL PROCESSLIST;查看慢查询日志状态
sql
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'slow_query_log_file';
SHOW VARIABLES LIKE 'long_query_time';查看锁状态
查看表锁
sql
SHOW OPEN TABLES WHERE In_use > 0;查看行锁
sql
SELECT * FROM information_schema.innodb_locks;
SELECT * FROM information_schema.innodb_lock_waits;配置管理命令
查看配置变量
查看所有全局变量
sql
SHOW GLOBAL VARIABLES;
-- 或查看会话变量
SHOW SESSION VARIABLES;查看特定配置变量
sql
SHOW GLOBAL VARIABLES LIKE 'max_connections';
-- 或使用SELECT
SELECT @@GLOBAL.max_connections;修改配置变量
修改全局变量(需要重启服务生效)
sql
SET GLOBAL max_connections = 200;修改会话变量(仅当前会话生效)
sql
SET SESSION wait_timeout = 300;MySQL 8.0持久化配置
sql
SET PERSIST max_connections = 200;备份与恢复命令
备份命令
使用mysqldump备份单个数据库
bash
mysqldump -u username -p database_name > backup.sql备份多个数据库
bash
mysqldump -u username -p --databases db1 db2 > backup.sql备份所有数据库
bash
mysqldump -u username -p --all-databases > backup.sql备份数据库结构(不包含数据)
bash
mysqldump -u username -p --no-data database_name > structure.sql使用XtraBackup备份(热备份)
bash
xtrabackup --backup --target-dir=/path/to/backup --user=username --password=password恢复命令
使用mysql命令恢复
bash
mysql -u username -p database_name < backup.sql恢复所有数据库
bash
mysql -u username -p < backup.sql使用XtraBackup恢复
bash
# 准备备份
xtrabackup --prepare --target-dir=/path/to/backup
# 恢复备份
xtrabackup --copy-back --target-dir=/path/to/backup日志管理命令
查看日志配置
sql
SHOW VARIABLES LIKE '%log%';开启/关闭日志
慢查询日志
sql
SET GLOBAL slow_query_log = ON;
SET GLOBAL slow_query_log_file = '/path/to/slow.log';
SET GLOBAL long_query_time = 1;二进制日志
sql
SET GLOBAL log_bin = ON;
SET GLOBAL log_bin_basename = '/path/to/binlog';错误日志
sql
SET GLOBAL log_error = '/path/to/error.log';查看二进制日志
查看二进制日志列表
sql
SHOW BINARY LOGS;查看当前二进制日志
sql
SHOW MASTER STATUS;查看二进制日志内容
bash
mysqlbinlog /path/to/binlog.000001复制管理命令
主从复制配置
主库查看状态
sql
SHOW MASTER STATUS;从库配置主库信息
sql
CHANGE MASTER TO
MASTER_HOST = 'master_host',
MASTER_USER = 'replication_user',
MASTER_PASSWORD = 'replication_password',
MASTER_LOG_FILE = 'binlog.000001',
MASTER_LOG_POS = 107;启动从库复制
sql
START SLAVE;
-- MySQL 8.0+ 推荐使用
START REPLICA;查看从库状态
sql
SHOW SLAVE STATUS\G;
-- MySQL 8.0+ 推荐使用
SHOW REPLICA STATUS\G;停止从库复制
sql
STOP SLAVE;
-- MySQL 8.0+ 推荐使用
STOP REPLICA;其他常用命令
查看MySQL版本
命令行方式
bash
mysql --version
-- 或
mysql -VSQL方式
sql
SELECT VERSION();
-- 或
SHOW VARIABLES LIKE 'version';查看字符集
sql
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';查看存储引擎
查看支持的存储引擎
sql
SHOW ENGINES;查看默认存储引擎
sql
SHOW VARIABLES LIKE 'default_storage_engine';优化表
sql
OPTIMIZE TABLE table_name;分析表
sql
ANALYZE TABLE table_name;检查表
sql
CHECK TABLE table_name;修复表
sql
REPAIR TABLE table_name;常用工具命令
mysqladmin工具
查看服务器状态
bash
mysqladmin -u username -p status查看服务器变量
bash
mysqladmin -u username -p variables关闭服务器
bash
mysqladmin -u username -p shutdown刷新权限
bash
mysqladmin -u username -p flush-privilegesmysqlcheck工具
检查所有数据库
bash
mysqlcheck -u username -p --all-databases修复所有数据库
bash
mysqlcheck -u username -p --all-databases --repair优化所有数据库
bash
mysqlcheck -u username -p --all-databases --optimizemysqlimport工具
bash
mysqlimport -u username -p database_name data.txt常用函数
字符串函数
sql
CONCAT('Hello', ' ', 'World') -- 连接字符串
SUBSTRING('Hello World', 1, 5) -- 截取子字符串
UPPER('hello') -- 转换为大写
LOWER('HELLO') -- 转换为小写
LENGTH('Hello') -- 获取字符串长度
TRIM(' Hello ') -- 去除首尾空格数值函数
sql
ABS(-10) -- 绝对值
ROUND(3.14159, 2) -- 四舍五入
CEIL(3.14) -- 向上取整
FLOOR(3.99) -- 向下取整
RAND() -- 生成随机数日期时间函数
sql
NOW() -- 当前日期时间
CURDATE() -- 当前日期
CURTIME() -- 当前时间
DATE_ADD(NOW(), INTERVAL 1 DAY) -- 日期加法
DATE_SUB(NOW(), INTERVAL 1 MONTH) -- 日期减法
DATEDIFF('2023-12-31', '2023-01-01') -- 日期差聚合函数
sql
COUNT(*) -- 计数
SUM(amount) -- 求和
AVG(score) -- 平均值
MAX(price) -- 最大值
MIN(price) -- 最小值总结
MySQL命令是数据库管理和维护的基础,掌握常用命令对于DBA和开发人员来说至关重要。本文档总结了MySQL在连接管理、数据库管理、表操作、数据操作、用户权限管理、索引管理、事务管理、性能监控、配置管理、备份恢复等方面的常用命令,涵盖了日常运维工作中的大部分场景。
在实际使用中,应根据具体业务场景和MySQL版本选择合适的命令,并注意命令的安全性和性能影响。同时,建议定期备份数据,确保数据安全,并持续监控数据库性能,及时优化和调整配置。
