添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Azure Database for MySQL 单一服务器即将停用。 强烈建议升级到 Azure Database for MySQL 灵活服务器。 有关迁移到 Azure Database for MySQL 灵活服务器的详细信息,请参阅 Azure Database for MySQL 单一服务器的最新动态

在本快速入门中,你将使用 Node.js 连接到 Azure Database for MySQL。 然后使用 SQL 语句在 Mac、Linux 和 Windows 平台的数据库中查询、插入、更新和删除数据。

本文假设你熟悉如何使用 Node.js 进行开发,但不熟悉如何使用 Azure Database for MySQL。

  • 具有活动订阅的 Azure 帐户。 免费创建帐户
  • Azure Database for MySQL 服务器。 使用 Azure 门户创建 Azure Database for MySQL 服务器 使用 Azure CLI 创建 Azure Database for MySQL 服务器
  • 确保已使用 Azure 门户 Azure CLI 将服务器的防火墙规则添加到连接的 IP 地址

    安装 Node.js 和 MySQL 连接器

    根据自己的平台,按照相应部分中的说明安装 Node.js 。 使用 npm 将 mysql2 包及其依赖项安装到项目文件夹中。

    Windows Linux (Ubuntu/Debian) Linux (RHEL/CentOS) Linux (SUSE) macOS
  • 运行 NPM 工具,将 mysql2 库安装到项目文件夹中。

    cd c:\nodejsmysql\
    "C:\Program Files\nodejs\npm" install mysql2
    "C:\Program Files\nodejs\npm" list
    
  • 通过检查 npm list 输出文本来验证安装。 随着新修补程序的发布,版本号可能会变化。

  • 运行以下命令安装 Node.jsnpm(适用于 Node.js 的包管理器)。

     # Using Ubuntu
     sudo curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
     sudo apt-get install -y nodejs
     # Using Debian
     sudo curl -sL https://deb.nodesource.com/setup_14.x | bash -
     sudo apt-get install -y nodejs
    
  • 运行以下命令创建项目文件夹 mysqlnodejs,并在该文件夹中安装 mysql2 包。

    mkdir nodejsmysql
    cd nodejsmysql
    npm install --save mysql2
    npm list
    
  • 通过检查 npm list 输出文本来验证安装。 随着新修补程序的发布,版本号可能会变化。

    运行代码示例

  • 将 JavaScript 代码粘贴到新文本文件中,然后使用文件扩展名 .js 将其保存到项目文件夹中(例如 C:\nodejsmysql\createtable.js 或 /home/username/nodejsmysql/createtable.js)。

  • 将代码中的 hostuserpassworddatabase 配置选项替换为你在创建服务器和数据库时指定的值。

  • 获取 SSL 证书:从 https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem 下载通过 SSL 与 Azure Database for MySQL 服务器进行通信所需的证书,并将证书文件保存到本地驱动器。

    对于 Microsoft Internet Explorer 和 Microsoft Edge:下载完成之后,将证书重命名为 DigiCertGlobalRootCA.crt.pem。

    请查看以下链接,了解主权云中的服务器证书:Azure 政府由世纪互联运营的 Microsoft AzureAzure 德国

  • ssl 配置选项中,用此本地文件的路径替换 ca-cert 文件名。

  • 打开命令提示符或 bash shell,然后将目录更改为项目文件夹 cd nodejsmysql

  • 若要运行应用程序,请输入 node 命令并后接文件名,例如 node createtable.js

  • 在 Windows 上,如果 Node 应用程序不在环境变量路径中,则可能需要使用完整路径来启动 Node 应用程序,例如 "C:\Program Files\nodejs\node.exe" createtable.js

    进行连接,创建表,然后插入数据

    通过以下代码进行连接,然后使用 CREATE TABLE 和 INSERT INTO SQL 语句加载数据。

    mysql.createConnection() 方法用于与 MySQL 服务器对接。 connect() 函数用于与服务器建立连接。 query() 函数用于针对 MySQL 数据库执行 SQL 查询。

    const mysql = require('mysql2');
    const fs = require('fs');
    var config =
        host: 'mydemoserver.mysql.database.azure.com',
        user: 'myadmin@mydemoserver',
        password: 'your_password',
        database: 'quickstartdb',
        port: 3306,
        ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
    const conn = new mysql.createConnection(config);
    conn.connect(
        function (err) { 
        if (err) { 
            console.log("!!! Cannot connect !!! Error:");
            throw err;
           console.log("Connection established.");
               queryDatabase();
    function queryDatabase(){
        conn.query('DROP TABLE IF EXISTS inventory;', function (err, results, fields) { 
            if (err) throw err; 
            console.log('Dropped inventory table if existed.');
            conn.query('CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);', 
                function (err, results, fields) {
                    if (err) throw err;
            console.log('Created inventory table.');
        conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['banana', 150], 
                function (err, results, fields) {
                    if (err) throw err;
            else console.log('Inserted ' + results.affectedRows + ' row(s).');
        conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['orange', 154], 
                function (err, results, fields) {
                    if (err) throw err;
            console.log('Inserted ' + results.affectedRows + ' row(s).');
        conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['apple', 100], 
        function (err, results, fields) {
                    if (err) throw err;
            console.log('Inserted ' + results.affectedRows + ' row(s).');
        conn.end(function (err) { 
        if (err) throw err;
        else  console.log('Done.') 
    

    使用以下代码进行连接,并使用 SELECT SQL 语句读取数据。

    mysql.createConnection() 方法用于与 MySQL 服务器对接。 connect() 方法用于与服务器建立连接。 query() 方法用于针对 MySQL 数据库执行 SQL 查询。 结果数组用于保存查询结果。

    const mysql = require('mysql2');
    const fs = require('fs');
    var config =
        host: 'mydemoserver.mysql.database.azure.com',
        user: 'myadmin@mydemoserver',
        password: 'your_password',
        database: 'quickstartdb',
        port: 3306,
        ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
    const conn = new mysql.createConnection(config);
    conn.connect(
        function (err) { 
            if (err) { 
                console.log("!!! Cannot connect !!! Error:");
                throw err;
            else {
                console.log("Connection established.");
                readData();
    function readData(){
        conn.query('SELECT * FROM inventory', 
            function (err, results, fields) {
                if (err) throw err;
                else console.log('Selected ' + results.length + ' row(s).');
                for (i = 0; i < results.length; i++) {
                    console.log('Row: ' + JSON.stringify(results[i]));
                console.log('Done.');
        conn.end(
            function (err) { 
                if (err) throw err;
                else  console.log('Closing connection.') 
    

    使用以下代码进行连接,并使用 UPDATE SQL 语句更新数据。

    mysql.createConnection() 方法用于与 MySQL 服务器对接。 connect() 方法用于与服务器建立连接。 query() 方法用于针对 MySQL 数据库执行 SQL 查询。

    const mysql = require('mysql2');
    const fs = require('fs');
    var config =
        host: 'mydemoserver.mysql.database.azure.com',
        user: 'myadmin@mydemoserver',
        password: 'your_password',
        database: 'quickstartdb',
        port: 3306,
        ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
    const conn = new mysql.createConnection(config);
    conn.connect(
        function (err) { 
            if (err) { 
                console.log("!!! Cannot connect !!! Error:");
                throw err;
            else {
                console.log("Connection established.");
                updateData();
    function updateData(){
           conn.query('UPDATE inventory SET quantity = ? WHERE name = ?', [200, 'banana'], 
                function (err, results, fields) {
                    if (err) throw err;
                    else console.log('Updated ' + results.affectedRows + ' row(s).');
           conn.end(
               function (err) { 
                    if (err) throw err;
                    else  console.log('Done.') 
    

    使用以下代码进行连接,并使用 DELETE SQL 语句删除数据。

    mysql.createConnection() 方法用于与 MySQL 服务器对接。 connect() 方法用于与服务器建立连接。 query() 方法用于针对 MySQL 数据库执行 SQL 查询。

    const mysql = require('mysql2');
    const fs = require('fs');
    var config =
        host: 'mydemoserver.mysql.database.azure.com',
        user: 'myadmin@mydemoserver',
        password: 'your_password',
        database: 'quickstartdb',
        port: 3306,
        ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
    const conn = new mysql.createConnection(config);
    conn.connect(
        function (err) { 
            if (err) { 
                console.log("!!! Cannot connect !!! Error:");
                throw err;
            else {
                console.log("Connection established.");
                deleteData();
    function deleteData(){
           conn.query('DELETE FROM inventory WHERE name = ?', ['orange'], 
                function (err, results, fields) {
                    if (err) throw err;
                    else console.log('Deleted ' + results.affectedRows + ' row(s).');
           conn.end(
               function (err) { 
                    if (err) throw err;
                    else  console.log('Done.') 
    

    若要清理本快速入门中使用的所有资源,请使用以下命令删除该资源组:

    az group delete \
        --name $AZ_RESOURCE_GROUP \
        --yes
    

    使用导出和导入功能迁移数据库

  •