
# 使用MySQL命令行公网连接实例
当不满足通过内网IP地址访问RDS实例的条件时，可以使用公网访问，建议单独绑定弹性公网IP连接弹性云服务器（或公网主机）与RDS for MySQL实例。
本章节以应用部署在Linux弹性云服务器为例，介绍SSL加密公网连接RDS for MySQL实例。SSL连接实现了数据加密功能，具有更高的安全性。
公网连接时支持弹性公网IP或NAT访问，当同时设置NAT和弹性公网IP时，会优先使用弹性公网IP访问。
#### 步骤1：购买ECS
1. [登录管理控制台](https://console.huaweicloud.com/ecm/?locale=zh-cn#/ecs/manager/vmList)，查看是否有弹性云服务器。
   - 有Linux弹性云服务器，执行[3]。
   
   - 无弹性云服务器，执行[2]。
   
   
   图1ECS实例   
   ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002247141609.png "点击放大") 
2. 购买弹性云服务器时，选择Linux操作系统，例如CentOS。
   由于需要在ECS下载MySQL客户端，因此需要为ECS绑定弹性公网IP（EIP）。
   购买Linux弹性云服务器请参考《弹性云服务器用户指南》中"[购买弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)"章节。
   
3. 在ECS实例基本信息页，查看ECS实例的区域和VPC。
   图2ECS基本信息   
   ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002212221592.png "点击放大") 
4. 在RDS for MySQL实例概览页，查看RDS实例的区域和VPC。
   图3MySQL概览   
   ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002247221713.png "点击放大") 
 
#### 步骤2：测试连通性并安装MySQL客户端
1. 登录ECS实例，请参见《弹性云服务器用户指南》中"[通过VNC登录Linux ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0136.html)"。
2. 在RDS"实例管理"页面，单击实例名称进入"概览"页面。
3. 选择"连接管理"，在"连接信息"模块获取实例的公网地址和数据库端口。
   图4连接信息   
   ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002247221729.png "点击放大")
   如果没有绑定公网地址，请参见[绑定弹性公网IP](https://support.huaweicloud.com/usermanual-rds-mysql/rds_public_accessibility.html#rds_public_accessibility__section3199593620428)。
   
4. 在ECS登录后页面，测试是否可以正常连接到在[3]中获取的公网地址的端口。
   ```
   curl -kv 公网地址:端口
   ```
   - 如果可以通信，说明网络正常，继续执行[5]。
   
   - 如果无法通信，请检查安全组规则。
     - 查看ECS的安全组的出方向规则，如果目的地址不为"0.0.0.0/0"且协议端口不为"全部"，需要将RDS实例的公网IP地址和端口添加到出方向规则。
       图5ECS的安全组   
       ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002212221600.png "点击放大") 
     
     - 查看RDS的安全组的入方向规则，需要将ECS实例的私有IP地址和端口添加到入方向规则，具体操作请参考[设置安全组规则](https://support.huaweicloud.com/usermanual-rds-mysql/rds_11_0009.html)。
      
    
5. 选择方法一或方法二，将MySQL客户端安装包导入ECS，并安装客户端。
 
- [方法一：执行命令获取安装包]
  1. 在ECS上，执行以下命令下载Linux系统的MySQL客户端安装包，该方式需要为ECS绑定EIP。
     - [8.0版本安装包](https://dev.mysql.com/get/mysql-community-client-8.0.28-1.el6.x86_64.rpm)：
       ```
       wget https://dev.mysql.com/get/mysql-community-client-8.0.28-1.el6.x86_64.rpm
       ```
       
     
     - [5.7版本安装包](https://dev.mysql.com/get/mysql-community-client-5.7.38-1.el6.x86_64.rpm)：
       ```
       wget https://dev.mysql.com/get/mysql-community-client-5.7.38-1.el6.x86_64.rpm
       ```
       
     
     
     ![](https://support.huaweicloud.com/usermanual-rds-mysql/public_sys-resources/note_3.0-zh-cn.png)
     建议您下载的MySQL客户端版本高于已创建的RDS实例中数据库版本。
     
  
  2. 执行以下命令安装MySQL客户端。
     - 8.0版本：
       ```
       rpm -ivh --nodeps mysql-community-client-8.0.28-1.el6.x86_64.rpm
       ```
       图6安装客户端   
       ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002322549361.png "点击放大") 
     
     - 5.7版本：
       ```
       rpm -ivh --nodeps mysql-community-client-5.7.38-1.el6.x86_64.rpm
       ```
       
     
     
     ![](https://support.huaweicloud.com/usermanual-rds-mysql/public_sys-resources/note_3.0-zh-cn.png)
     - 如果安装过程中报conflicts，可增加replacefiles参数重新安装，如下：
       ```
       rpm -ivh --replacefiles mysql-community-client-安装包版本号-1.el6.x86_64.rpm
       ```
       
     
     
     
     - 如果安装过程中提示需要安装依赖包，可增加nodeps参数重新安装，如下：
       ```
       rpm -ivh --nodeps mysql-community-client-安装包版本号-1.el6.x86_64.rpm
       ```
       
       
   
- [方法二：浏览器下载安装包]
  1. 在浏览器下载Linux系统的MySQL客户端安装包，然后将安装包上传到ECS。 您可以使用任何终端连接工具（如WinSCP、PuTTY等工具）将安装包上传至ECS。
     - 8.0版本： 打开[链接](https://downloads.mysql.com/archives/community/)，以mysql-community-client-8.0.28-1.el6.x86_64.rpm为例，下载安装包。
       图7下载MySQL 8.0安装包   
       ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002286475564.png "点击放大") 
     
     - 5.7版本： 打开[链接](https://downloads.mysql.com/archives/community/)，以mysql-community-client-5.7.38-1.el6.x86_64.rpm为例，下载安装包。
       图8下载MySQL 5.7安装包   
       ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002286532274.png "点击放大") 
     
     
     ![](https://support.huaweicloud.com/usermanual-rds-mysql/public_sys-resources/note_3.0-zh-cn.png)
     建议您下载的MySQL客户端版本高于已创建的RDS实例中数据库版本。
     
  
  2. 执行以下命令安装MySQL客户端。
     - 8.0版本：
       ```
       rpm -ivh --nodeps mysql-community-client-8.0.28-1.el6.x86_64.rpm
       ```
       图9安装客户端   
       ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002322622405.png "点击放大") 
     
     - 5.7版本：
       ```
       rpm -ivh --nodeps mysql-community-client-5.7.38-1.el6.x86_64.rpm
       ```
       
     
     
     ![](https://support.huaweicloud.com/usermanual-rds-mysql/public_sys-resources/note_3.0-zh-cn.png)
     - 如果安装过程中报conflicts，可增加replacefiles参数重新安装，如下：
       ```
       rpm -ivh --replacefiles mysql-community-client-安装包版本号-1.el6.x86_64.rpm
       ```
       
     
     
     
     - 如果安装过程中提示需要安装依赖包，可增加nodeps参数重新安装，如下：
       ```
       rpm -ivh --nodeps mysql-community-client-安装包版本号-1.el6.x86_64.rpm
       ```
       
       
   
#### 步骤3：使用命令行连接实例
在RDS"实例管理"页面，单击实例名称进入"概览"页，在"SSL"处，查看SSL开启状态。
- SSL未开启（默认），使用[非加密连接]。
- SSL已开启，只能使用[SSL加密连接]。加密连接实现了数据加密功能，具有更高的安全性。
 
- [非加密连接]
  
  1. 在ECS上，执行以下命令连接RDS for MySQL实例。
     ```
     mysql -h <host> -P <port> -u <userName> -p
     ```
     示例：
     ```
     mysql -h 172.16.0.31 -P 3306 -u root -p
     ```
     表1参数说明 
     | 参数             | 说明                                                            |
     |:---|:---|
     | \<*host*\>     | 公网地址在[3]中获取。          |
     | *\<port\>*     | 数据库端口，在[3]中获取。默认3306。 |
     | \<*userName*\> | 管理员账号root。                                                    |
        
     
  
  2. 出现如下提示时，输入数据库账号对应的密码：
     ```
     Enter password:
     ```
     图10连接成功   
     ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002286475568.png "点击放大") 
   
- [SSL加密连接]
  
  1. 在RDS"实例管理"页面，单击实例名称进入"概览"页面。
  
  2. 单击"SSL"处的"下载"，下载"Certificate Download"压缩包，解压后获取根证书（ca.pem）和捆绑包（ca-bundle.pem）。
  
  3. 将根证书（ca.pem）上传到ECS。
     ![](https://support.huaweicloud.com/usermanual-rds-mysql/public_sys-resources/note_3.0-zh-cn.png)
     - 推荐使用TLS v1.2及以上协议，低于该版本可能存在安全风险。您可以通过修改参数"loose_tls_version"的值设置加密协议，具体操作详见[修改RDS for MySQL实例参数](https://support.huaweicloud.com/usermanual-rds-mysql/rds_configuration.html)。
     
     - 根证书捆绑包（ca-bundle.pem）包含2017年4月之后的新根证书和原有根证书。
     
     - ca.pem和ca-bundle.pem都可以实现SSL连接，ca-bundle.pem文件包含ca.pem，使用ca.pem即可。
     
     - RDS for MySQL实例不支持X509认证方式。
       
  
  4. 在ECS上执行以下命令连接RDS for MySQL实例。
     ```
     mysql -h <host> -P <port> -u <userName> -p --ssl-ca=<caName>
     ```
     示例：
     ```
     mysql -h 172.16.0.31 -P 3306 -u root -p --ssl-ca=ca.pem
     ```
     表2参数说明 
     | 参数             | 说明                                                            |
     |:---|:---|
     | \<*host*\>     | 公网地址在[3]中获取。          |
     | *\<port\>*     | 数据库端口，在[3]中获取。默认3306。 |
     | \<*userName*\> | 管理员账号root。                                                    |
     | \<*caName*\>   | CA证书名称，该文件需放在执行该命令的路径下。                                       |
        
     
  
  5. 出现如下提示时，输入数据库账号对应的密码：
     ```
     Enter password:
     ```
     图11连接成功   
     ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002247141617.png "点击放大") 
   
#### 常见问题
#### 如果密码忘记了怎么办？
在"实例管理"页面，选择指定的实例，选择"更多 \> 重置密码"，输入新密码。
#### 连接失败的常见报错
- \[Warning\] Access denied for user 'username'@'yourIp' (using password: NO) 连接RDS for MySQL实例时出现该报错，请检查用户名或密码是否正确。
  
- \[Warning\] Access denied for user 'username'@'yourIp' (using password: YES) 连接RDS for MySQL实例时出现该报错，请检查用户名或密码是否正确。
  
- ERROR 2013：Lost connection to MySQL server during query 连接超时参数"wait_timeout"和"interactive_timeout"设置过小，RDS for MySQL会自动断开超时的空连接。具体请参见[MySQL客户端连接实例后会自动断开](https://support.huaweicloud.com/trouble-rds-mysql/rds_12_0014.html)。
  
- ERROR 1045 (28000): Access denied for user 'root'@'192.168.0.30' (using password: YES) 排除是否密码错误问题，确认该主机是否有连接数据库实例的权限，以及RDS for MySQL客户端和实例VIP是否可以连通。具体请参见[RDS for MySQL实例无法访问](https://support.huaweicloud.com/trouble-rds-mysql/rds_12_0010.html)。
  
- ERROR 1226 (42000): User 'test' has exceeded the 'max_user_connections' resource (current value:10) 排查是否限制了实例的连接数，导致连接失败。具体请参见[RDS for MySQL实例无法访问](https://support.huaweicloud.com/trouble-rds-mysql/rds_12_0010.html)。
  
- ERROR 1129 (HY000): Host '192.168.0.111' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 排查是否由于RDS for MySQL客户端连接数据库的失败次数(不包括密码错误)，超过了max_connect_errors的值，导致连接失败。具体请参见[RDS for MySQL实例无法访问](https://support.huaweicloud.com/trouble-rds-mysql/rds_12_0010.html)。
  
更多连接失败的排查方法，请参见[RDS实例连接失败怎么办](https://support.huaweicloud.com/rds-mysql_faq/rds_faq_0218.html)。
#### RDS实例绑定公网IP后无法ping通怎么办？
1. 在"实例管理"页面，选择目标实例，单击实例名称，进入实例的"概览"页面。
2. 在"安全组"处，单击安全组名称，进入安全组页面。
3. 检查安全组是否放通了"入方向"的"ICMP"规则。
   表3安全组规则 
   | 方向  | 策略 | 类型   | 协议端口    | 源地址/目的地址      | 描述                                                |
   |:---|:---|:---|:---|:---|:---|
   | 入方向 | 允许 | IPv4 | ICMP：全部 | 源地址：0.0.0.0/0 | 放通安全组内RDS的ICMP(全部)端口，用于外部通过**ping**命令测试RDS的网络连通性。 |
      
   
 
#### 后续操作
登录实例后，您可以创建数据库，进行数据迁移等操作，具体请参见：
- [通过界面可视化创建MySQL数据库](https://support.huaweicloud.com/usermanual-rds-mysql/rds_05_0019.html)
- [通过调用API创建MySQL数据库](https://support.huaweicloud.com/api-rds/rds_06_0007.html)
- [通过DAS管理MySQL数据库](https://support.huaweicloud.com/usermanual-das/das_04_0031.html)
- [迁移方案总览](https://support.huaweicloud.com/usermanual-rds-mysql/rds_05_0001_03.html)
 
