Linux命令-mysql(MySQL服务器客户端工具)
·
mysql 是 MySQL 数据库的命令行客户端工具,用于连接、操作和管理 MySQL 数据库服务器。它不是 Linux 系统命令,而是 MySQL 数据库的客户端程序。
📖 基本语法
mysql [选项] [数据库名]
🎯 常用连接选项
| 选项 | 说明 |
|---|---|
-h, --host=主机名 |
数据库服务器主机(默认 localhost)。 |
-P, --port=端口号 |
数据库服务器端口(默认 3306)。 |
-u, --user=用户名 |
连接用户名(默认当前系统用户)。 |
-p, --password[=密码] |
密码提示。为安全起见,建议只写 -p 在提示时输入。 |
-S, --socket=套接字文件 |
用于本地连接的 Unix 套接字文件。 |
--protocol=协议 |
连接协议:tcp, socket, pipe, memory。 |
💡 核心用法示例
1. 连接数据库
# 连接到本地数据库(使用当前系统用户)
mysql
# 连接到本地数据库(指定用户,提示输入密码)
mysql -u root -p
# 连接到远程数据库
mysql -h db.example.com -u admin -p
# 连接到指定数据库
mysql -u user -p database_name
# 使用 socket 连接
mysql -u root -p -S /var/run/mysqld/mysqld.sock
2. 执行 SQL 语句
# 执行单条 SQL 语句
mysql -u root -p -e "SHOW DATABASES;"
# 执行多条 SQL 语句
mysql -u root -p -e "SHOW DATABASES; USE mysql; SHOW TABLES;"
# 从文件执行 SQL 脚本
mysql -u root -p < backup.sql
# 执行 SQL 并输出到文件
mysql -u root -p -e "SELECT * FROM users;" > output.txt
3. 交互式操作
进入 mysql 交互模式后,可以执行各种 SQL 命令:
-- 显示所有数据库
SHOW DATABASES;
-- 使用特定数据库
USE database_name;
-- 显示当前数据库的所有表
SHOW TABLES;
-- 查看表结构
DESCRIBE table_name;
DESC table_name;
SHOW COLUMNS FROM table_name;
-- 执行查询
SELECT * FROM users WHERE id = 1;
-- 退出 mysql
EXIT;
\q
QUIT;
🔧 常用客户端选项
| 选项 | 说明 |
|---|---|
-D, --database=数据库名 |
指定要使用的数据库。 |
-e, --execute=SQL语句 |
执行 SQL 语句并退出。 |
-f, --force |
遇到错误继续执行。 |
-v, --verbose |
显示详细输出。 |
-V, --version |
显示版本信息。 |
--batch, -B |
以制表符分隔格式输出,无边框。 |
--html |
生成 HTML 格式输出。 |
--xml |
生成 XML 格式输出。 |
--skip-column-names |
不显示列名。 |
--sigint-ignore |
忽略 SIGINT 信号(Ctrl+C)。 |
-H, --html |
以 HTML 格式输出(同 --html)。 |
-X, --xml |
以 XML 格式输出(同 --xml)。 |
📊 输出格式控制
# 默认表格格式
mysql -u root -p -e "SELECT * FROM users LIMIT 3;"
# 制表符分隔(适合脚本处理)
mysql -u root -p -B -e "SELECT * FROM users LIMIT 3;"
# 不显示列名
mysql -u root -p -B -N -e "SELECT * FROM users LIMIT 3;"
# HTML 格式输出
mysql -u root -p -H -e "SELECT * FROM users LIMIT 3;" > users.html
# XML 格式输出
mysql -u root -p -X -e "SELECT * FROM users LIMIT 3;" > users.xml
# 垂直格式显示(每列一行)
mysql -u root -p -E -e "SELECT * FROM users WHERE id=1;"
🔍 配置文件
MySQL 客户端可以从以下位置读取配置:
/etc/my.cnf- 全局配置文件/etc/mysql/my.cnf- 全局配置文件~/.my.cnf- 用户配置文件./.my.cnf- 当前目录配置文件
示例 ~/.my.cnf 配置:
[client]
host=localhost
user=root
password=your_password
database=mydb
port=3306
设置配置文件权限:
chmod 600 ~/.my.cnf
⚙️ 交互模式下的特殊命令
在 mysql 交互模式中,除了 SQL 语句,还可以使用以下命令(以反斜杠开头或特定关键字):
| 命令 | 说明 |
|---|---|
\c |
取消当前命令。 |
\q, exit, quit |
退出 mysql。 |
\G |
垂直显示结果(每列一行)。 |
\g |
执行命令(同 ;)。 |
\s |
显示服务器状态信息。 |
\h, help |
显示帮助信息。 |
\u, use |
切换数据库,如 \u dbname。 |
\r, reconnect |
重新连接到服务器。 |
\! |
执行系统 Shell 命令,如 \! ls。 |
\T |
开始记录输出到文件,如 \T /tmp/mysql.log。 |
\t |
停止记录输出。 |
\# 或 /*! */ |
MySQL 特有的注释,可在其他数据库忽略。 |
source 或 \. |
执行 SQL 脚本文件,如 source file.sql 或 \. file.sql。 |
system |
执行系统 Shell 命令,如 system ls。 |
status |
显示服务器状态。 |
nowarning |
忽略警告信息。 |
warnings |
显示警告信息。 |
charset |
切换字符集,如 charset utf8mb4。 |
📋 实用操作示例
1. 数据库备份与恢复
# 备份单个数据库
mysqldump -u root -p database_name > backup.sql
# 恢复数据库
mysql -u root -p database_name < backup.sql
# 备份所有数据库
mysqldump -u root -p --all-databases > all_backup.sql
# 只备份结构
mysqldump -u root -p --no-data database_name > structure.sql
# 只备份数据
mysqldump -u root -p --no-create-info database_name > data.sql
2. 批量操作
# 批量执行 SQL 文件
for file in *.sql; do
echo "处理文件: $file"
mysql -u root -p database_name < "$file"
done
# 从 CSV 导入数据
mysql -u root -p -e "LOAD DATA INFILE '/path/to/data.csv' INTO TABLE mytable FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';"
# 导出查询结果到 CSV
mysql -u root -p -B -e "SELECT * FROM users" | sed 's/\t/,/g' > users.csv
3. 脚本自动化
#!/bin/bash
# 自动备份数据库脚本
DB_USER="root"
DB_PASS="password"
DB_NAME="mydb"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 备份数据库
mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_DIR/${DB_NAME}_$DATE.sql"
# 压缩备份
gzip "$BACKUP_DIR/${DB_NAME}_$DATE.sql"
# 保留最近7天备份
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete
echo "备份完成: $BACKUP_DIR/${DB_NAME}_$DATE.sql.gz"
4. 数据库管理
-- 创建数据库
CREATE DATABASE newdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建用户并授权
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON newdb.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;
-- 查看用户权限
SHOW GRANTS FOR 'newuser'@'localhost';
-- 查看进程
SHOW PROCESSLIST;
-- 杀死进程
KILL process_id;
-- 查看系统变量
SHOW VARIABLES LIKE '%timeout%';
⚠️ 安全注意事项
-
密码安全:
# 不安全:密码在命令行中可见 mysql -u root -ppassword # 安全:提示输入密码 mysql -u root -p # 或使用配置文件 mysql --defaults-file=~/.my.cnf -
远程连接安全:
# 使用 SSL 连接 mysql --ssl-mode=REQUIRED -h remote_host -u user -p # 指定 SSL 证书 mysql --ssl-ca=/path/to/ca.pem --ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem -
执行危险操作前备份:
# 删除数据前先备份 mysqldump -u root -p database_name > backup_before_delete.sql mysql -u root -p -e "DELETE FROM large_table WHERE condition;"
🔧 故障排除
1. 连接问题
# 检查 MySQL 服务状态
systemctl status mysql
# 或
service mysql status
# 检查端口监听
netstat -tlnp | grep 3306
ss -tlnp | grep 3306
# 检查防火墙
sudo ufw status
sudo firewall-cmd --list-all
# 检查错误日志
tail -f /var/log/mysql/error.log
2. 权限问题
-- 检查用户权限
SELECT * FROM mysql.user WHERE User='username'\G
-- 修复权限
GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
3. 编码问题
-- 查看当前字符集设置
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 设置字符集
SET NAMES utf8mb4;
📌 最佳实践
- 使用配置文件:避免在命令行中暴露密码。
- 使用提示符:在脚本中使用
read -s安全读取密码:read -sp "MySQL 密码: " MYSQL_PASSWORD mysql -u root -p"$MYSQL_PASSWORD" -e "SHOW DATABASES;" - 备份重要数据:在执行
DROP、DELETE等操作前先备份。 - 使用事务:对于重要操作,使用事务确保数据一致性:
START TRANSACTION; -- 执行操作 COMMIT; -- 或回滚 ROLLBACK; - 监控性能:使用
EXPLAIN分析查询性能:EXPLAIN SELECT * FROM users WHERE age > 30;
mysql 客户端是管理 MySQL 数据库的强大工具,掌握其用法对于数据库管理员和开发人员都至关重要。无论是简单的查询还是复杂的数据库管理,都可以通过命令行高效完成。
更多推荐

所有评论(0)