导读:本期聚焦于风铃创作的《linux下如何访问mysql数据库?几种常用连接方式详解》,敬请观看详情。mysql登录失败提示Access denied怎么办?远程连接数据库一直超时该怎么排查?在linux系统中访问mysql数据库是后端开发和运维工作的基本功。本文围绕命令行连接、远程访问配置、图形化工具使用三个方向展开,详细介绍mysql命令的基本用法、如何授权远程用户、修改bind-address地址、开放3306端口防火墙规则,以及使用Navicat等工具连接时的常见问题。同时整理了忘记root密码、字符集乱码、连接被拒绝等高频故障的解决思路,帮助你快速建立与数据库的稳定连接。

在linux环境下操作mysql数据库是后端开发和运维人员的日常。无论你是要在服务器上直接执行SQL语句,还是要从本地机器连接远程数据库,都离不开对连接方式的掌握。很多初学者装好mysql之后卡在第一步,不知道怎么登录,或者遇到Access denied报错无从下手。这篇文章把linux下访问mysql的几种主流方式讲清楚,并附上常见报错的处理办法。

linux下如何访问mysql数据库?几种常用连接方式详解

一、使用mysql命令行客户端本地登录

命令行是最基础也最常用的访问方式。mysql安装完成后,会在系统中提供mysql这个客户端命令。本地登录最简单的形式是直接输入用户名,让系统提示你输入密码:

mysql -u root -p
# 回车后输入密码,密码输入时不回显
Enter password:

登录成功后,终端会变成mysql>提示符,这时就可以执行SQL语句了。比如查看有哪些数据库、切换到某个库、执行查询:

SHOW DATABASES;
USE test_db;
SELECT * FROM users LIMIT 10;
EXIT;

除了交互式登录,mysql命令还支持直接在命令行执行SQL并返回结果,这在写shell脚本时特别有用:

# 直接执行一条SQL
mysql -u root -p'yourpassword' -e "SELECT VERSION();"

# 指定某个数据库并导入SQL文件
mysql -u root -p'yourpassword' test_db < /root/init.sql

需要注意几个常用参数:-h指定主机地址,默认是localhost;-P指定端口,注意是大写的P,默认3306;-u指定用户名;-p表示使用密码登录,密码可以紧贴着写在后面,也可以回车后输入。在脚本中把密码明文写在命令行有泄露风险,更稳妥的做法是把账号密码写在~/.my.cnf配置文件里:

# 编辑 ~/.my.cnf,加入以下内容并保存
[client]
user=root
password=yourpassword

# 设置权限为仅本人可读
chmod 600 ~/.my.cnf

# 之后直接输入mysql即可登录,无需再输密码
mysql

二、远程连接mysql数据库的配置

本地登录很简单,但实际工作中更多场景是从一台linux服务器或本地开发机连接另一台服务器上的mysql。这时如果直接用mysql -h 192.168.1.100 -u root -p去连,大概率会遇到两种报错:一种是Connection refused,一种是Access denied。这两种错误的排查思路完全不同。

首先解决Connection refused的问题。mysql默认的配置文件里有一项bind-address,它决定了mysql监听哪些网络接口。默认值通常是127.0.0.1,也就是只接受本机连接,远程请求根本到不了mysql进程。修改方法如下:

# 找到配置文件,常见路径(不同发行版可能不同)
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 或
sudo vim /etc/my.cnf

# 将 bind-address = 127.0.0.1 改为
bind-address = 0.0.0.0

# 重启mysql服务使配置生效
sudo systemctl restart mysql
# 或
sudo systemctl restart mysqld

接着要确认3306端口是否放行。如果服务器开启了防火墙或使用云服务器的安全组,必须放行3306端口:

# firewalld(CentOS常见)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

# ufw(Ubuntu常见)
sudo ufw allow 3306/tcp

然后处理Access denied的问题。即便网络通了,mysql本身也要授权远程用户才能登录。默认的root用户往往只允许localhost登录,需要专门创建或修改一个允许远程访问的账号:

-- 在mysql服务器上本地登录后执行
-- 方式一:创建一个新的远程用户,%表示允许任意主机连接
CREATE USER 'admin'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';
FLUSH PRIVILEGES;

-- 方式二:修改已有用户的host限制
UPDATE mysql.user SET host='%' WHERE user='admin' AND host='localhost';
FLUSH PRIVILEGES;

出于安全考虑,生产环境不建议把host设为%并授予全部权限,更好的做法是限定来源IP,例如'admin'@'192.168.1.%'只允许特定网段访问,并且只授予业务库的权限。

三、使用图形化工具和编程语言访问

命令行适合快速查询和管理,但如果要做复杂的数据浏览、表结构设计,图形化工具效率更高。在linux桌面环境下可以使用DBeaver、MySQL Workbench,跨平台且免费。windows或mac用户则常用Navicat、DataGrip等工具连接linux服务器上的mysql。配置时填写的四个要素是:主机IP、端口3306、用户名、密码,前提是第二部分讲的远程访问配置已经完成。

如果希望用编程方式访问,以python为例,安装pymysql库后几行代码即可建立连接:

import pymysql

# 建立连接
conn = pymysql.connect(
    host='192.168.1.100',
    port=3306,
    user='admin',
    password='StrongPass123!',
    database='test_db',
    charset='utf8mb4'
)

cursor = conn.cursor()
cursor.execute("SELECT id, name FROM users LIMIT 5")
for row in cursor.fetchall():
    print(row)

cursor.close()
conn.close()

php项目中最常用的是mysqli扩展和PDO,两者都支持连接远程mysql,PDO的优势是可以切换不同数据库驱动,写法更通用。无论哪种语言,连接时都建议显式指定utf8mb4字符集,避免中文数据出现乱码。

四、常见报错的排查思路

汇总几个高频问题。第一,忘记root密码:可以通过--skip-grant-tables参数启动mysql跳过权限验证,然后无密码登录修改密码,操作完记得去掉参数重启服务。第二,ERROR 2003表示连不上服务器,重点检查mysql服务是否运行、bind-address和防火墙。第三,ERROR 1045表示账号密码或host授权有问题,检查mysql.user表中该用户的host字段。第四,ERROR 1130提示host is not allowed to connect,说明用户没有远程授权,回到第二部分添加授权即可。第五,中文乱码通常是字符集问题,执行SHOW VARIABLES LIKE 'character%';查看各项编码,统一改成utf8mb4。

掌握这些内容后,在linux下访问mysql基本不会再有障碍。建议平时养成最小授权的习惯,远程账号只给必要权限、只允许指定IP连接,数据库安全往往就体现在这些细节上。

linux mysqlmysql连接命令mysql客户端修改时间:2026-09-11 02:04:31

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/0911/54387.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。