1.1.1. 通过命令行或客户端连接MySQL实例
前置要求
• 已购买并创建MySQL实例,详细操作请参考如何创建MySQL实例。
• 已在实例中创建好数据库和账号,详细操作请参考如何创建数据库与如何创建数据库用户
使用命令行连接MySQL实例
本文以Linux系统为例连接MySQL实例,您需要在本地服务器或ECS服务器提前安装好MySQL。安装方法如下:
• CentOS:执行命令 sudo yum install mysql。
• Ubuntu:执行命令 sudo apt-get update,并执行 sudo apt install mysql-server。
提醒
如果您具备内网连接条件可直接使用内网地址连接MySQL实例,减小连接的延迟以获得最快的响应时间。
内网连接条件:当应用部署在弹性云服务器上,且该弹性云服务器与MySQL实例处于同一区域,同一VPC时,建议单独使用内网IP连接弹性云服务器与关系型数据库实例。
通过命令行连接MySQL实例
1. 登陆服务器连接MySQL实例,例如弹性云主机服务器或者本地服务器。
² 说明
创建并使用弹性云主机的方法请参考弹性云主机快速入门的创建弹性云主机
2. 执行连接MySQL实例命令。
mysql -h 连接地址 -P端口 -u用户名 -p密码
参数说明:
• -h:主机IP,即关系数据库MySQL版“实例管理”页面该集群对应的实例列表中,主机的“连接地址”。
• -P:数据库端口,为“实例信息”页面中的数据库端口。
• -u:用户名,即 MySQL数据库帐号(默认管理员帐号为 root)。
• -p:密码,即MySQL数据库帐号对应的密码,为创建数据库实例时指定的密码,可以执行命令后输入,防止密码明文显示。
场景 | 需获取的RDS实例地址类型 | 获取方式 |
满足内网连接条件 | RDS内网地址 | 访问控制中心的关系数据库MySQL版的“实例管理”页面,在上方选择地域,点击目标实例名称后在基本信息中查看内网地址与数据库端口。 |
1.从弹性云主机实例连接MySQL实例,但是不满足内网连接条件 | ||
2.从本地设备访问MySQL实例 | RDS外网地址 | |
图1:连接命令示例:
图2:连接成功:
² 说明
若连接MySQL失败,请查看文末常见的连接失败问题及解决方法
通过客户端连接MySQL实例
windows操作系统中,您可以通过使用MySQL客户端连接MySQL实例,本操作以MySQL Workbench 8.0.29为例,介绍如何通过客户端连接MySQL实例,其他客户端可以参考以下操作。
1. 到MySQL Workbench官网下载并安装MySQL Workbench。
2. 启动MySQL Workbench,打开Database > Connect to Database 。
3. 根据要求输入连接信息,点击OK完成连接。
参数说明:
• Hostname:MySQL实例的地址,需绑定弹性公网IP后获取外网地址。
• Port:数据库端口,为“实例信息”页面中的数据库端口。
• Username:用户名,即 MySQL数据库帐号(默认管理员帐号为 root)。
• Password:密码,即MySQL数据库帐号对应的密码,为创建数据库实例时指定的密码。
常见的连接失败问题与解决方法
报错信息 | 原因及其解决方法 |
mysql conmand not found | 服务器未安装MySQL,可参考以下命令进行安装: |
CentOS:执行命令sudo yum install mysql。 | |
Ubuntu:执行命令sudo apt-get update,并执行sudo apt install mysql-server。 | |
Access denied for use 'xxxx'(using password:YES) | 输入的账号或密码错误,可在访问MySQL实例列表中查看对应目标实例ID的账号管理。 |
Unknown MySQL server host 'xxxx' | 输入的MySQL实例地址错误,请重新确认地址。 |
Can't connect to mysql sever on ‘xxxx’ | |
Cannot Connect to Database Server | |
Your connection attempt failed for user ‘xxxx’ to the MySQL server | 请根据连接场景重新确认RDS连接地址类型与安全组规则设置。 |
1.1.1. 通过应用程序连接MySQL实例
参数说明
示例程序代码中的参数说明如下:
参数 | 说明 |
host | MySQL实例的内网地址或外网地址。 |
port | 根据您使用的连接地址选择对应的端口。 |
yourDatabase | 所连接的数据库名称。 |
yourUserName | 所访问MySQL实例的账号名称。 |
yourPassword | 所访问MySQL实例的账号对应的密码 |
示例程序代码
² 说明
以下示例程序代码以数据库中的User表为例,实际运行中请按照您的需求填写。
• Java代码示例:
以Maven为例,需要在pom.xml文件中导入DriverManager依赖,例如:
</dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.1.0</version>
</dependency>
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class DbConnection
{
public static void main(String args[]) {
String connectionUrl= "jdbc:mysql://host:port/yourDatabase";
ResultSet resultSet;
try (Connection connection=DriverManager.getConnection(connectionUrl,"yourUsername","yourPassword");
Statement statement = connection.createStatement()) {
//输入您想要执行的SQL
String selectSql = "SELECT * FROM `User`"; 。
resultSet = statement.executeQuery(selectSql);
//打印出查询结果中想要的列
while (resultSet.next()) {
System.out.println(resultSet.getString("UserName"));
}
}
catch (SQLException e) {
e.printStackTrace();
}
}
}• Python3代码示例:
² 说明
• Python3安装命令:pip3 install PyMySQL
• Python2安装命令:pip install pymysql==0.9.3
import pymysql
db_config = {
'host': 'host',
'user': 'user',
'port': port,
'password': 'yourPassword',
'database': 'yourDatabase'
}
connection = pymysql.connect(db_config)
try:
with connection.cursor() as cursor:
# 输入您想要执行的SQL
sql = "SELECT * FROM `User`"
cursor.execute(sql)
for result in cursor:
print(result)
finally:
connection.close()• C代码示例:
² 说明
运行环境需先安装mysql.h头文件,以CentOS为例,安装命令如下:
sudo yum install mysql-devel
#include <stdio.h>
#include <mysql.h>
#include <string.h>
int main(void)
{
MYSQL *t_mysql;
MYSQL_RES *res = NULL;
MYSQL_ROW row;
int rc, i, fields;
int rows;
char select[] = "select * from User"; // 输入希望执行的SQL。
t_mysql = mysql_init(NULL);
if(NULL == t_mysql){
printf("init failed\n");
}
if(NULL == mysql_real_connect(t_mysql, "host", "yourUsername", "yourPassword", "yourDatabase",
port>, NULL, 0)){
printf("connect failed\n");
}
if(mysql_real_query(t_mysql, select, strlen(select)) != 0){
printf("select failed\n");
}
res = mysql_store_result(t_mysql);
if (NULL == res) {
printf("mysql_restore_result(): %s\n", mysql_error(t_mysql));
return 0;
}
fields = mysql_num_fields(res);
while ((row = mysql_fetch_row(res))) {
for (i = 0; i < fields; i++) {
printf("%s\t", row[i]);
}
printf("\n");
}
mysql_close(t_mysql);
}