彙總從連接登入、用戶授權、庫表 DDL/DML、備份恢復、字符集、元數據查詢的高頻命令,格式統一、範例豐富,適合打印貼工位或存入團隊 Wiki。
| 場景 | 命令 |
|---|---|
| 本地連接 (無密碼 root) | mysql -u root -p (回車後輸入密碼) |
| 本地連接 (帶密碼) | mysql -u root -p'password' (無空格) |
| 遠程連接 | mysql -h 192.168.1.100 -u root -p'password' |
| 指定端口 | mysql -h 192.168.1.100 -P 3307 -u root -p |
| 退出 | EXIT / QUIT / \q |
# 5.7+ 推薦
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';
# 兼容舊版
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
# 命令行工具
mysqladmin -u root -p'oldpass' password 'newpass'
-- 創建用戶
CREATE USER 'app'@'%' IDENTIFIED BY 'strongpass';
-- 授權 (常用模板)
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app'@'%';
GRANT ALL PRIVILEGES ON mydb.* TO 'admin'@'%' WITH GRANT OPTION;
-- 查看權限
SHOW GRANTS FOR 'app'@'%';
-- 回收權限
REVOKE INSERT ON mydb.* FROM 'app'@'%';
-- 修改密碼
ALTER USER 'app'@'%' IDENTIFIED BY 'newpass';
-- 刪除用戶
DROP USER 'app'@'%';
-- 列出所有用戶
SELECT User, Host FROM mysql.user;
CREATE DATABASE IF NOT EXISTS mydb CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
DROP DATABASE IF EXISTS mydb;
SHOW DATABASES;
USE mydb;
SELECT DATABASE(); -- 當前庫
SHOW CREATE DATABASE mydb;
-- 創建表 (標準範例)
CREATE TABLE `user` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用戶名',
`email` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '郵箱',
`password` CHAR(64) NOT NULL DEFAULT '' COMMENT '密碼哈希',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`),
KEY `idx_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';
-- 修改表
ALTER TABLE `user` ADD COLUMN `phone` VARCHAR(20) NOT NULL DEFAULT '' AFTER `email`;
ALTER TABLE `user` MODIFY COLUMN `username` VARCHAR(60) NOT NULL DEFAULT '';
ALTER TABLE `user` CHANGE COLUMN `phone` `mobile` VARCHAR(20) NOT NULL DEFAULT '';
ALTER TABLE `user` DROP COLUMN `mobile`;
ALTER TABLE `user` ADD UNIQUE INDEX `uk_mobile` (`mobile`);
ALTER TABLE `user` ADD INDEX `idx_created` (`created_at`);
ALTER TABLE `user` DROP INDEX `idx_created`;
RENAME TABLE `user` TO `user_v2`;
DROP TABLE IF EXISTS `user_v2`;
TRUNCATE TABLE `user_v2`; -- 清空數據、重置自增
-- 插入
INSERT INTO `user` (`username`,`email`,`password`) VALUES ('alice','alice@test.com','hash1');
INSERT INTO `user` (`username`,`email`,`password`) VALUES ('bob','bob@test.com','hash2'),('carol','carol@test.com','hash3');
-- 查詢
SELECT * FROM `user`;
SELECT `id`,`username` FROM `user` WHERE `email` = 'alice@test.com';
SELECT * FROM `user` ORDER BY `id` DESC LIMIT 10 OFFSET 20;
-- 更新
UPDATE `user` SET `email` = 'alice_new@test.com' WHERE `username` = 'alice';
-- 刪除
DELETE FROM `user` WHERE `username` = 'alice';
| 場景 | 命令 |
|---|---|
| 整庫備份 | mysqldump -u root -p mydb > mydb_$(date +%F).sql |
| 單表備份 | mysqldump -u root -p mydb user > user.sql |
| 只備份結構 | mysqldump -u root -p -d --add-drop-table mydb > struct.sql |
| 排除某表 | mysqldump -u root -p mydb --ignore-table=mydb.log > no_log.sql |
| 壓縮備份 | mysqldump -u root -p mydb | gzip > mydb.sql.gz |
| 恢復 (命令行) | mysql -u root -p mydb < mydb.sql |
| 恢復 (客戶端) | SOURCE /path/mydb.sql; |
| 並行導入 (8.0+) | mysqlpump -u root -p --parallel-schemas=4 mydb > dump.sql |
-- 查看支持字符集
SHOW CHARACTER SET;
-- 查看默認字符集
SHOW VARIABLES LIKE 'character_set_%';
-- 修改庫字符集
ALTER DATABASE mydb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
-- 修改表字符集
ALTER TABLE `user` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 連接指定字符集 (JDBC URL)
jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf8mb4
-- 版本、用戶、時間
SELECT VERSION(), USER(), NOW(), DATABASE();
-- 表狀態
SHOW TABLE STATUS LIKE 'user'\G
-- 表結構
DESC `user`;
SHOW COLUMNS FROM `user`;
SHOW CREATE TABLE `user`\G
-- 索引
SHOW INDEX FROM `user`;
-- 進程
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;
-- 全局狀態
SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_%';
-- 全局變量
SHOW GLOBAL VARIABLES LIKE 'max_connections';
SHOW GLOBAL VARIABLES LIKE 'innodb_%';
\G 結尾垂直顯示,適合寬表。tee /tmp/mysql.log 記錄會話;notee 關閉。pager less -SFX 設置分頁器,長結果可左右滾動、不換行。mysql -u root -p db_name < batch.sql。watch -n 1 'mysql -u root -p -e "SHOW GLOBAL STATUS LIKE \"Slow_queries\";"'收藏此手冊,MySQL 日常操作無需查文檔,指尖即得。