连接MySQL数据库是使用MySQL的第一步。本章将详细介绍多种连接MySQL的方式,包括命令行连接和各种编程语言的连接方法。
MySQL提供了命令行客户端工具,可以直接在终端或命令提示符中连接数据库服务器。
mysql -h hostname -u username -p
| 参数 | 描述 | 示例 |
|---|---|---|
-h 或 --host |
MySQL服务器主机名 | -h localhost 或 -h 127.0.0.1 |
-u 或 --user |
MySQL用户名 | -u root 或 -u myuser |
-p 或 --password |
提示输入密码 | -p(安全输入) |
-P |
端口号(默认3306) | -P 3307 |
-D |
要使用的数据库 | -D mydatabase |
# 连接到本地MySQL服务器
mysql -u root -p
# 连接到远程MySQL服务器
mysql -h 192.168.1.100 -u myuser -p
# 连接到指定数据库
mysql -u root -p -D mydatabase
# 连接到指定端口
mysql -h localhost -P 3307 -u root -p
连接成功后,你会看到MySQL的命令提示符:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2854760 to server version: 8.0.33
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
mysql> exit
Bye
或者使用快捷键:Ctrl + D
mysql_connect() 函数在PHP 5.5.0中已废弃,在PHP 7.0.0中已移除。请使用MySQLi或PDO扩展。
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$database = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $database);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
// 关闭连接
$conn->close();
?>
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$database = "myDB";
// 创建连接
$conn = mysqli_connect($servername, $username, $password, $database);
// 检查连接
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
echo "连接成功";
// 关闭连接
mysqli_close($conn);
?>
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$database = "myDB";
try {
$conn = new PDO("mysql:host=$servername;dbname=$database", $username, $password);
// 设置PDO错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "连接成功";
} catch(PDOException $e) {
echo "连接失败: " . $e->getMessage();
}
// 关闭连接
$conn = null;
?>
import mysql.connector
from mysql.connector import Error
try:
connection = mysql.connector.connect(
host='localhost',
database='mydatabase',
user='username',
password='password'
)
if connection.is_connected():
db_info = connection.get_server_info()
print("成功连接到MySQL服务器,版本:", db_info)
except Error as e:
print("连接MySQL时出错:", e)
finally:
if connection.is_connected():
connection.close()
print("MySQL连接已关闭")
import pymysql
# 建立连接
connection = pymysql.connect(
host='localhost',
user='username',
password='password',
database='mydatabase',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
try:
with connection.cursor() as cursor:
# 执行SQL查询
sql = "SELECT * FROM users"
cursor.execute(sql)
result = cursor.fetchall()
print(result)
finally:
connection.close()
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MySQLConnection {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "username";
String password = "password";
try {
// 加载MySQL JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立连接
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println("成功连接到MySQL数据库");
// 关闭连接
connection.close();
} catch (ClassNotFoundException e) {
System.out.println("找不到MySQL JDBC驱动");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("连接MySQL数据库时出错");
e.printStackTrace();
}
}
}
const mysql = require('mysql2');
// 创建连接
const connection = mysql.createConnection({
host: 'localhost',
user: 'username',
password: 'password',
database: 'mydatabase'
});
// 连接数据库
connection.connect((err) => {
if (err) {
console.error('连接失败: ' + err.stack);
return;
}
console.log('连接成功,连接ID: ' + connection.threadId);
});
// 执行查询
connection.query('SELECT 1 + 1 AS solution', (err, results) => {
if (err) throw err;
console.log('查询结果: ', results[0].solution);
});
// 关闭连接
connection.end();
const mysql = require('mysql2');
// 创建连接池
const pool = mysql.createPool({
host: 'localhost',
user: 'username',
password: 'password',
database: 'mydatabase',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
// 从连接池获取连接
pool.getConnection((err, connection) => {
if (err) {
console.error('获取连接失败: ' + err);
return;
}
// 使用连接执行查询
connection.query('SELECT * FROM users', (err, results) => {
// 释放连接回连接池
connection.release();
if (err) {
console.error('查询失败: ' + err);
return;
}
console.log('查询结果: ', results);
});
});
| 参数 | 描述 | 默认值 |
|---|---|---|
host |
MySQL服务器地址 | localhost |
port |
MySQL服务器端口 | 3306 |
user |
用户名 | - |
password |
密码 | - |
database |
默认数据库 | - |
charset |
字符集 | utf8mb4 |
timeout |
连接超时时间(秒) | 30 |
# MySQL连接字符串格式
mysql://username:password@hostname:port/database
# 示例
mysql://root:mypassword@localhost:3306/mydatabase
mysql://user:pass@192.168.1.100:3307/production_db
ERROR 1045 (28000): Access denied for user 'username'@'localhost' (using password: YES)
解决方案:
ERROR 2003 (HY000): Can't connect to MySQL server on 'hostname' (111)
解决方案:
ERROR 1049 (42000): Unknown database 'database_name'
解决方案:
连接池可以显著提高应用程序的性能,特别是在高并发场景下。
// PHP MySQLi 连接选项
$conn = mysqli_init();
mysqli_options($conn, MYSQLI_OPT_CONNECT_TIMEOUT, 5);
mysqli_real_connect($conn, $host, $user, $pass, $db);
// PDO 持久连接
$options = [
PDO::ATTR_PERSISTENT => true
];
$conn = new PDO("mysql:host=$host;dbname=$db", $user, $pass, $options);
// 设置字符集为utf8mb4(支持emoji等特殊字符)
$conn->set_charset("utf8mb4");
// MySQLi SSL连接
$conn = mysqli_init();
mysqli_ssl_set($conn, NULL, NULL, '/path/to/ca.pem', NULL, NULL);
mysqli_real_connect($conn, $host, $user, $pass, $db);