在Linux系统中连接MySQL数据库是运维和开发中的常见需求,无论是进行数据库管理、数据查询还是应用程序开发,掌握正确的连接方法都至关重要,本文将详细介绍Linux环境下连接MySQL的多种方式,包括准备工作、命令行连接、图形界面工具连接以及编程语言连接,并附常见问题解决方案。
连接前的准备工作
在尝试连接MySQL之前,需确保以下条件满足,否则可能导致连接失败:
-
MySQL服务运行状态:MySQL服务必须在目标服务器(本地或远程)上正常运行,可通过以下命令检查:
- Ubuntu/Debian系统:
sudo systemctl status mysql
- CentOS/RHEL系统:
sudo systemctl status mysqld
若服务未运行,使用sudo systemctl start mysql
(或mysqld
)启动。
- Ubuntu/Debian系统:
-
安装MySQL客户端:Linux系统默认可能未安装MySQL客户端,需手动安装:
- Ubuntu/Debian:
sudo apt update && sudo apt install mysql-client
- CentOS/RHEL:
sudo yum install mysql-community-client
- Ubuntu/Debian:
-
确认用户权限:确保连接用户具有访问权限,可通过以下命令查看用户及权限:
mysql -u root -p -e "SELECT user, host FROM mysql.user;"
若用户权限不足,需使用管理员账户(如root)授权,
GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES;
命令行连接MySQL(最常用方式)
MySQL命令行客户端是Linux环境下最直接的连接工具,支持交互式和非交互式操作。
基本连接语法
mysql [选项] -u 用户名 -p [数据库名]
常用选项如下(可通过表格清晰对比):
选项 | 含义 | 示例 |
---|---|---|
-h, --host |
指定MySQL服务器主机名或IP地址 | -h 192.168.1.100 (连接远程服务器) |
-P, --port |
指定MySQL服务端口(默认3306) | -P 3307 (非默认端口) |
-u, --user |
指定连接用户名 | -u root |
-p, --password |
指定密码(推荐交互输入,避免明文暴露) | -p (输入时隐藏密码) |
-D, --database |
指定连接后默认进入的数据库 | -D test_db |
-e, --execute |
执行SQL语句后退出(非交互式) | -e "SHOW DATABASES;" |
交互式连接示例
连接本地MySQL(默认用户root,需输入密码):
mysql -u root -p
连接远程MySQL(指定IP和端口):
mysql -h 192.168.1.100 -P 3306 -u remote_user -p
连接成功后,会显示MySQL版本和欢迎信息,进入mysql>
命令行界面,可执行SQL语句(如SHOW DATABASES;
、USE db_name;
),退出使用EXIT;
或Ctrl+D
。
非交互式连接(适合脚本自动化)
通过-e
参数直接执行SQL命令,无需进入交互界面,适合Shell脚本:
mysql -u root -p -e "SELECT COUNT(*) FROM users WHERE status='active';" test_db
执行后会直接返回查询结果,输入密码后自动退出。
图形界面工具连接(适合可视化操作)
对于习惯图形界面的用户,可通过第三方工具连接MySQL,操作更直观。
MySQL Workbench(官方推荐)
- 安装:
Ubuntu/Debian:sudo apt install mysql-workbench
CentOS/RHEL:下载官方RPM包或使用sudo yum install mysql-workbench
- 连接步骤:
- 打开MySQL Workbench,点击“+”号添加新连接。
- 填写连接名称(如“Local MySQL”)、主机名(默认localhost)、端口(3306)、用户名(root)及密码。
- 点击“Test Connection”测试,成功后点击“OK”保存。
- 双击连接进入管理界面,可执行SQL、管理数据库等。
DBeaver(通用数据库工具)
- 安装:
Ubuntu/Debian:sudo apt install dbeaver
CentOS/RHEL:下载官方RPM包或使用sudo yum install dbeaver
- 连接步骤:
- 打开DBeaver,点击“数据库”→“连接”→“MySQL”。
- 填写主机、端口、用户名、密码,选择驱动(默认自动识别)。
- 点击“完成”测试连接,成功后可在左侧管理数据库,右侧编辑SQL。
编程语言连接MySQL(应用程序开发)
在开发中,常通过编程语言连接MySQL,以下是Python和PHP的示例。
Python(使用PyMySQL库)
-
安装PyMySQL:
pip install pymysql
-
示例代码:
import pymysql # 连接参数 conn = pymysql.connect( host='localhost', user='root', password='your_password', database='test_db', port=3306 ) try: with conn.cursor() as cursor: # 执行查询 cursor.execute("SELECT id, name FROM users;") results = cursor.fetchall() for row in results: print(f"ID: {row[0]}, Name: {row[1]}") finally: conn.close()
PHP(使用MySQLi扩展)
-
安装MySQLi:
Ubuntu/Debian:sudo apt install php-mysql
CentOS/RHEL:sudo yum install php-mysql
-
示例代码:
<?php $conn = new mysqli('localhost', 'root', 'your_password', 'test_db', 3306); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } $result = $conn->query("SELECT id, name FROM users;"); while ($row = $result->fetch_assoc()) { echo "ID: " . $row['id'] . ", Name: " . $row['name'] . "<br>"; } $conn->close(); ?>
常见问题解决
-
连接被拒绝(ERROR 2003)
- 原因:MySQL服务未启动、防火墙拦截、用户host权限不足(如用户仅允许
localhost
,但尝试远程连接)。 - 解决:
- 确认服务状态:
systemctl status mysql
; - 检查防火墙:
sudo ufw allow 3306
(Ubuntu)或firewall-cmd --add-port=3306/tcp --permanent
(CentOS); - 修改用户权限:
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'password';
。
- 确认服务状态:
- 原因:MySQL服务未启动、防火墙拦截、用户host权限不足(如用户仅允许
-
密码错误(ERROR 1045)
- 原因:输入密码错误、用户不存在、密码过期。
- 解决:
- 重置root密码(需跳过权限表):
- 停止MySQL:
systemctl stop mysql
; - 跳过权限表启动:
mysqld_safe --skip-grant-tables &
; - 无密码登录:
mysql -u root
; - 更新密码:
UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='root';
; - 重启MySQL:
systemctl restart mysql
。
- 停止MySQL:
- 重置root密码(需跳过权限表):
FAQs
Q1:忘记MySQL root密码怎么办?
A1:可通过“跳过权限表”方式重置密码,步骤如下:
- 停止MySQL服务:
sudo systemctl stop mysql
; - 以安全模式启动:
sudo mysqld_safe --skip-grant-tables &
; - 无密码登录MySQL:
mysql -u root
; - 执行更新密码语句:
USE mysql; UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root'; FLUSH PRIVILEGES;
- 重启MySQL服务:
sudo systemctl restart mysql
,使用新密码登录。
Q2:Linux连接MySQL时出现“Can’t connect to MySQL server on ‘localhost’ (111)”错误,如何解决?
A2:该错误通常表示无法连接到MySQL的TCP端口,原因及解决方法:
- MySQL服务未运行:检查服务状态并启动:
sudo systemctl start mysql
; - 端口被占用:使用
netstat -tuln | grep 3306
查看端口占用情况,若被其他进程占用,修改MySQL配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf
)中的port = 3306
为其他端口; - Socket文件问题:若使用Socket连接(默认),检查
/var/run/mysqld/mysqld.sock
是否存在,可通过ln -s /tmp/mysql.sock /var/run/mysqld/mysqld.sock
创建软链接。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/32045.html