MySQL - 连接
MySQL - 连接到服务器
Section titled “MySQL - 连接到服务器”要与 MySQL 数据库交互,客户端应用程序必须建立到服务器的连接。此过程需要提供凭据和连接详细信息。本教程涵盖了如何从命令行和各种编程语言安全地连接到 MySQL。
每个 MySQL 连接都需要以下核心参数:
- 主机(Host):运行 MySQL 服务器的 IP 地址或主机名(例如,
localhost、127.0.0.1或远程 IP)。 - 用户(User):您连接所用的数据库用户名(例如,
root、app_user)。 - 密码(Password):指定用户的密码。
- 端口(Port):服务器监听的 TCP/IP 端口。默认是
3306。 - 数据库(Database)(可选):连接后您要使用的特定数据库。
使用 mysql 命令行客户端连接
Section titled “使用 mysql 命令行客户端连接”mysql 命令行工具是与服务器交互最直接的方式。它对于管理和调试至关重要。
mysql -h [hostname] -u [username] -P [port] -p [database_name]-p 标志会安全地提示您输入密码。切勿直接在命令行中输入密码,如 -pYourPassword,因为它将显示在您的命令历史记录中。
要以 root 用户身份连接到本地服务器:
# 命令mysql -u root -p
# 服务器将提示您输入密码Enter password: ********成功连接后,您将看到 mysql> 提示符。
Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1234Server version: 8.0.30
mysql>要断开连接,请键入 exit 或 quit。
mysql> exitBye现代密码管理
Section titled “现代密码管理”root 密码通常在 MySQL 安装过程中设置。如果您需要更改它或任何其他用户的密码,请使用 ALTER USER 语句。
-- 以具有足够权限的用户身份连接(例如 root)-- 然后执行此命令更改 root 用户的密码ALTER USER 'root'@'localhost' IDENTIFIED BY 'a-new-secure-password';旧教程中的 SET PASSWORD 命令仍然有效,但 ALTER USER 是推荐的现代语法。
从应用程序代码连接
Section titled “从应用程序代码连接”以下是从流行编程语言连接到 MySQL 的现代、安全示例。
最佳实践:安全凭据管理
Section titled “最佳实践:安全凭据管理”警告:切勿将凭据(主机、用户、密码)直接硬编码到源代码中。这是一个重大的安全风险。相反,请从环境变量或专用的秘密管理服务(如 HashiCorp Vault 或 AWS Secrets Manager)加载它们。
PHP(使用 PDO)
Section titled “PHP(使用 PDO)”PDO (PHP Data Objects) 提供了一个一致、安全的数据库访问接口。
<?php// 从环境变量加载凭据$host = getenv('DB_HOST') ?: '127.0.0.1';$db = getenv('DB_NAME') ?: 'my_app_db';$user = getenv('DB_USER') ?: 'app_user';$pass = getenv('DB_PASS') ?: 'secret';$port = getenv('DB_PORT') ?: '3306';$charset = 'utf8mb4';
$dsn = "mysql:host=$host;port=$port;dbname=$db;charset=$charset";$options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false,];
try { $pdo = new PDO($dsn, $user, $pass, $options); echo "Connected to database successfully!";} catch (\PDOException $e) { // 在实际应用程序中,记录错误并显示通用消息 error_log($e->getMessage()); http_response_code(503); die("Service unavailable. Please try again later.");}?>Node.js(使用 mysql2/promise)
Section titled “Node.js(使用 mysql2/promise)”mysql2 库是一个流行的、高性能的选择。将其与 promise 和 async/await 结合使用可以生成清晰、现代的代码。对于实际应用程序,请始终使用连接池。
import mysql from 'mysql2/promise';
// 在实际应用程序中,使用连接池// const pool = mysql.createPool({ ...配置 });
async function testConnection() { let connection; try { connection = await mysql.createConnection({ host: process.env.DB_HOST || 'localhost', user: process.env.DB_USER || 'app_user', password: process.env.DB_PASS || 'secret', database: process.env.DB_NAME || 'my_app_db' });
console.log('Connected to MySQL successfully!'); // 您现在可以执行查询,例如 await connection.execute('SELECT 1');
} catch (error) { console.error('Failed to connect to MySQL:', error); } finally { if (connection) { await connection.end(); console.log('Connection closed.'); } }}
testConnection();