Подключение к базе данных MySQL
Экземпляр БД RDS можно подключить как к публичной, так и к частной сети.
На этой странице
- Перед началом работы
- Подключение через MySQL-Front
- Подключение с помощью SSL-сертификата
По умолчанию RDS предоставляет плавающий IP-адрес.
Когда приложения развертываются на ВМ ECS, которая расположена в том же регионе, что и VPC и RDS, рекомендуется использовать плавающий IP-адрес для подключения к экземпляру RDS.
Безопасно и имеет высокую производительность. Рекомендуется использовать.
При невозможности подключения к экземпляру базы данных RDS через плавающий IP-адрес рекомендуется привязать EIP к экземпляру базы данных и подключить ECS.
Имеет низкий уровень безопасности. Для достижения более высокой скорости передачи данных и безопасности рекомендуется перенести приложения на ECS, который находится в той же подсети, что и этот экземпляр базы данных RDS. Также следует использовать плавающий IP-адрес для доступа к экземпляру базы данных.
Если ECS находится в той же подсети VPC , что и экземпляр RDS DB, то выделять EIP не нужно.
Перед началом работы
- Создайте и подключитесь к экземпляру ECS .
- Создайте группу безопасности (Security Group) .
- Создайте EIP и прикрепите его к экземпляру БД , если необходимо подключиться из публичной сети.
- Установите клиент для работы с MySQL:
- Для ОС на базе Linux — MySQL Client (en).
- Для ОС Windows — MySQL-Front. Подробнее о подключении ниже.
Подключение через MySQL-Front

- Скачайте и запустите утилиту MySQL-Front.
- В окне Add Session нажмите New .
- Введите параметры подключаемой БД:
- Name — название экземпляра БД. Если его не указать, то будет использоваться значение Host по умолчанию.
- Host — укажите для подключения:
- из частной сети — плавающий IP-адрес подключаемого экземпляра базы данных. Чтобы просмотреть плавающий IP-адрес и порт экземпляра базы данных в консоли RDS, зайдите в информацию об экземпляре БД MySQL и в блоке Connection Information скопируйте адрес Floating IP address .
- из публичной сети — EIP подключаемого экземпляра базы данных.
- Port — порт экземпляра БД. По умолчанию для MySQL — 3306.
- В Login Information укажите пользователя БД ( User ) и пароль БД ( Password ).
- Нажмите OK .
- В появившемся окне выберите соединение, которое было создано ранее, и нажмите Open .
Если информация о подключении верна, экземпляр базы данных будет успешно подключен.
Подключение с помощью SSL-сертификата
- Войдите в консоль управления Advanced.
- Инструкция по входу с помощью личного кабинета Cloud.ru
- Инструкция по входу в консоль для IAM-пользователей
mysql -h hostName> -P port> -u userName> -p --ssl-ca=caName>
- -h — укажите для подключения:
- из частной сети — плавающий IP-адрес подключаемого экземпляра базы данных. Чтобы просмотреть плавающий IP-адрес и порт экземпляра базы данных в консоли RDS, зайдите в информацию об экземпляре БД MySQL и в блоке Connection Information скопируйте адрес Floating IP address .
- из публичной сети — EIP подключаемого экземпляра базы данных.
Пример подключения с использованием SSL-сертификата
mysql -h 172.16.0.43 -P 3306 -u root -p –ssl-ca=ca.pem
Если информация о подключении верна, экземпляр базы данных будет успешно подключен.
Подключение к базе данных SQL с помощью C и C++
Эта публикация предназначена для разработчиков C и C++, выполняющих подключение приложений к службе «База данных SQL Azure». Публикация содержит несколько разделов, что дает возможность переходить сразу к интересующей вас теме.
Предварительные требования для выполнения инструкций руководства по C/C++
Убедитесь, что у вас есть указанные ниже компоненты.
- Активная учетная запись Azure. Если у вас нет такой учетной записи, вы можете зарегистрироваться для использования бесплатной пробной версии Azure.
- Visual Studio. Для разработки и запуска этого примера необходимо установить компоненты языка C++.
- Инструменты разработки Visual Studio для Linux. Если вы разрабатываете приложение на платформе Linux, необходимо также установить расширение Linux для Visual Studio.
База данных SQL Azure и SQL Server на виртуальных машинах
База данных SQL Azure основана на Microsoft SQL Server и предназначена для обеспечения высокого уровня доступности, производительности и масштабируемости. Использование Azure SQL по сравнению с собственной локальной базой данных дает множество преимуществ. Благодаря Azure SQL вам не нужно устанавливать, настраивать, обслуживать базу данных или управлять ею. Вы работаете только с содержимым и структурой базы данных. В нее встроены такие возможности, как отказоустойчивость и избыточность, которые так важны при работе с базами данных.
В данный момент Azure предлагает два варианта для размещения рабочих нагрузок сервера SQL: База данных SQL Azure (база данных как услуга) и сервер SQL на виртуальных машинах. Мы не будем подробно рассматривать различия между этими двумя вариантами, но отметим, что База данных SQL Azure является лучшим решением для новых облачных приложений, так как она позволяет экономить средства и оптимизировать производительность облачных служб. Если вы рассматриваете возможность переноса или расширения своих локальных приложений в облако, сервер SQL на виртуальной машине Azure может быть хорошим выбором. Чтобы было проще следовать инструкциям в этой статье, создадим экземпляр Базы данных SQL Azure.
Технологии доступа к данным: ODBC и OLE DB
Подключение к Базе данных SQL Azure ничем не отличается от обычной процедуры. В настоящее время существует два способа подключения к базам данных: ODBC и OLE DB. В последние годы корпорация Майкрософт поддерживает ODBC для доступа к собственным реляционным данным. Технология ODBC относительно проста и работает гораздо быстрее, чем OLE DB. Единственное предостережение — ODBC использует старый API в стиле C.
Шаг 1. Создание базы данных SQL Azure
Чтобы узнать, как создать образец базы данных, перейдите на страницу Начало работы . Также это можно сделать с помощью портала Azure, просмотрев короткий 2-минутный видеоролик.
Шаг 2. Получение строки подключения
После подготовки Базы данных SQL Azure необходимо выполнить следующие действия, чтобы найти информацию о подключении и добавить IP-адрес клиента для доступа через брандмауэр.
На портале Azure перейдите к строке подключения ODBC Базы данных SQL Azure с помощью команды Показать строки подключения к базам данных в обзоре базы данных:


Скопируйте содержимое строки ODBC (включает Node.js) [проверка подлинности SQL]. Оно будет использоваться позже для подключения из интерпретатора командной строки ODBC C++. Эта строка содержит такие сведения, как драйвер, сервер и другие параметры подключения к базе данных.
Шаг 3. Добавление IP-адреса в брандмауэр
Перейдите к разделу брандмауэра, где указан сервер, и добавьте IP-адрес клиента с помощью этих действий, чтобы установить подключение.

На этом этапе База данных SQL Azure настроена и готова к подключению из приложения C++.
Шаг 4. Подключение из приложения Windows C/C++
К Базе данных SQL Azure можно подключиться при помощи ODBC в Windows с использованием этого примера, созданного с использованием Visual Studio. В этом примере используется интерпретатор командной строки ODBC, с помощью которого можно подключиться к Базе данных SQL Azure. Данный пример принимает в качестве аргумента командной строки файл с именем базы данных-источника (DSN) или подробную строку подключения, скопированную на портале Azure ранее. Откройте страницу свойств для этого проекта и вставьте строку подключения в качестве аргумента команды, как показано ниже:

Убедитесь, что в строке подключения к базе данных указаны правильные сведения для проверки подлинности.
Запустите приложение, чтобы создать его. Должно появиться следующее окно, подтверждающее успешность подключения. Чтобы проверить подключение базы данных, можно выполнить базовые команды SQL, например создать таблицу:

Кроме того, файл DSN можно создать при помощи мастера, который запускается, если не указаны аргументы командной строки. Рекомендуется попробовать и этот вариант. Этот файл DSN можно использовать для автоматизации и защиты параметров проверки подлинности:

Поздравляем! Вы успешно установили подключение к базе данных SQL Azure при помощи C++ и ODBC в Windows. Чтобы сделать то же самое для платформы Linux, см. сведения дальше в этой статье.
Шаг 5. Подключение из приложения Linux C/C++
Возможно, вы еще не знаете об этом, но теперь в Visual Studio можно разрабатывать приложения C++ для Linux. Об этой новой возможности можно прочитать в записи блога Visual C++ for Linux Development (Разработка Visual C++ для Linux). Чтобы создавать приложения для Linux, необходим удаленный компьютер, на котором запущен дистрибутив Linux. Если у вас нет такого компьютера, его можно быстро настроить при помощи виртуальных машин Linux Azure.
Для выполнения инструкций этого руководства предположим, что у вас настроен дистрибутив Linux Ubuntu 16.04. Описанные здесь действия также должны работать для Ubuntu 15.10, Red Hat 6 и Red Hat 7.
С помощью следующих действий устанавливаются библиотеки, необходимые вашему дистрибутиву для SQL и ODBC:
sudo su sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/mssql-ubuntu-test/ xenial main" > /etc/apt/sources.list.d/mssqlpreview.list' sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893 apt-get update apt-get install msodbcsql apt-get install unixodbc-dev-utf16 #this step is optional but recommended*Запустите Visual Studio. Последовательно выберите «Средства» -> «Параметры» -> «Кроссплатформенный» -> «Диспетчер соединений» и добавьте подключение к компьютеру под управлением Linux:

После того как установлено подключение по протоколу SSH, создайте шаблон пустого проекта (Linux):

Затем можно добавить новый исходный файл C и заменить его этим содержимым. Используя API ODBC SQLAllocHandle, SQLSetConnectAttr и SQLDriverConnect, можно инициализировать и установить подключение к базе данных. Как и для образца Windows ODBC, необходимо заменить вызов SQLDriverConnect сведениями из параметров строки подключения к базе данных, ранее скопированными на портале Azure.
retcode = SQLDriverConnect( hdbc, NULL, "Driver=ODBC Driver 13 for SQL" "Server;Server=;Uid=;Pwd=;database=", SQL_NTS, outstr, sizeof(outstr), &outstrlen, SQL_DRIVER_NOPROMPT);Последнее что необходимо выполнить перед компиляцией — добавить odbc в качестве зависимости библиотеки:

Чтобы запустить приложение, откройте консоль Linux из меню Отладка:

Если подключение успешно, вы увидите имя текущей базы данных в консоли Linux:

Поздравляем! Вы успешно выполнили инструкции руководства и теперь можете подключиться к Базе данных SQL Azure из C++ на платформах Windows и Linux.
Получение полного решения C/C++ для этого руководства
Решение GetStarted, содержащее все примеры из этой статьи, можно найти в таких разделах GitHub:
- образец ODBC C++ Windows — загрузите образец ODBC C++ Windows для подключения к Azure SQL;
- образец ODBC C++ Linux — загрузите образец ODBC C++ Linux для подключения к Azure SQL.
Дальнейшие действия
- Ознакомьтесь с разделом Общие сведения о разработке базы данных SQL
- См. дополнительные сведения в справочнике по API ODBC
Дополнительные ресурсы
- Шаблоны разработки для мультитенантных приложений SaaS с использованием Базы данных Azure SQL
- Вы можете изучить все возможности Базы данных SQL
Подключение к базе данных на C++
Пытаюсь подключиться к базе данных SQL через плюсы. База в файле, сервер — локальный. Если отправить запрос на считывание из базы: SELECT * FROM Vertex , то выскакивает ошибка, что недопустимое имя «Vertex». Может быть кто-то знает, что не так происходит?

Отслеживать
2,815 5 5 золотых знаков 21 21 серебряный знак 39 39 бронзовых знаков
задан 1 июл 2019 в 6:58
145 1 1 серебряный знак 5 5 бронзовых знаков
database.Open(NULL) , точно NULL?
1 июл 2019 в 7:04@tCode если указано NULL, то открывается как раз диалоговое окно с выбором файлового источника данных. Я, если честно, первый раз работаю с базой на с++. Возможно, вы подскажите мне, как лучше Open(NULL) или не NULL 🙂
1 июл 2019 в 7:09
Что прописано в DSN? «не указаны столбцы для извлечения» — что непонятно в этой фразе?
1 июл 2019 в 7:30
@Akina не понятно, почему я не могу сделать SELECT из таблицы, если таблица есть.
1 июл 2019 в 7:59
Покажите DSN. Пока непонятно, откуда Вы делаете SELECT и как.
1 июл 2019 в 8:031 ответ 1
Сортировка: Сброс на вариант по умолчанию
По приведенным данным трудно понять, в чем ошибка. Я рекомендую вместо MFC использовать классический C API ODBC, который дает чуть больше контроля над происходящим.
Вот рабочий пример подключения к SQL Server с помощью ODBC:
#include #include #include #include #include WCHAR szDSN[] = L"Driver=;DSN='';SERVER=.\\sqlexpress;DATABASE=mydatabase;"; WCHAR query[] = L"SELECT * FROM Table"; void DisplayError(SQLSMALLINT t,SQLHSTMT h) < SQLWCHAR SqlState[6], Msg[SQL_MAX_MESSAGE_LENGTH]; SQLINTEGER NativeError; SQLSMALLINT i, MsgLen; SQLRETURN rc; SQLLEN numRecs = 0; SQLGetDiagField(t, h, 0, SQL_DIAG_NUMBER, &numRecs, 0, 0); // Get the status records. i = 1; while (i > int _tmain(int argc, _TCHAR* argv[]) < HENV hEnv = NULL; HDBC hDbc = NULL; HSTMT hStmt = NULL; int iConnStrLength2Ptr; WCHAR szConnStrOut[256]; SQLINTEGER rowCount = 0; SQLSMALLINT fieldCount = 0, currentField = 0; SQLWCHAR buf[128],colName[128]; SQLINTEGER ret; /* ODBC API return status */ RETCODE rc; setlocale(LC_ALL, "Russian"); /* Allocate an environment handle */ rc = SQLAllocEnv(&hEnv); /* Allocate a connection handle */ rc = SQLAllocConnect(hEnv, &hDbc); /* Connect to the database */ rc = SQLDriverConnect(hDbc, NULL, (WCHAR*)szDSN, SQL_NTS, (WCHAR*)szConnStrOut, 255, (SQLSMALLINT*)&iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT); if (SQL_SUCCEEDED(rc)) < wprintf(L"Successfully connected to database. Data source name: \n %s\n", szConnStrOut); /* Prepare SQL query */ wprintf(L"SQL query:\n %s\n", query); rc = SQLAllocStmt(hDbc, &hStmt); rc = SQLPrepare(hStmt, (SQLWCHAR*)query, SQL_NTS); /* Excecute the query */ rc = SQLExecute(hStmt); if (SQL_SUCCEEDED(rc)) < wprintf(L"\n- Columns -\n"); SQLNumResultCols(hStmt, &fieldCount); if (fieldCount >0) < for (currentField = 1; currentField wprintf(L"\n"); /* Loop through the rows in the result set */ rc = SQLFetch(hStmt); while (SQL_SUCCEEDED(rc)) < wprintf(L"- Record #%d -\n", (int)rowCount); for (currentField = 1; currentField if (ret wprintf(L"%d: %s\n", (int)currentField, buf); > wprintf(L"\n"); rc = SQLFetch(hStmt); rowCount++; >; rc = SQLFreeStmt(hStmt, SQL_DROP); > else < wprintf(L"Error: Number of fields in the result set is 0.\n"); >> else < wprintf(L"SQL Failed\n"); DisplayError(SQL_HANDLE_STMT, hStmt); >> else < wprintf(L"Couldn't connect to %s\n", szDSN); DisplayError(SQL_HANDLE_DBC, hDbc); >/* Disconnect and free up allocated handles */ SQLDisconnect(hDbc); SQLFreeHandle(SQL_HANDLE_DBC, hDbc); SQLFreeHandle(SQL_HANDLE_ENV, hEnv); getchar(); return 0; >Если нужно подключиться к mdf-файлу, строка подключения szDSN будет иметь вид:
Driver=;DSN='';SERVER=.\\SQLEXPRESS;AttachDBFileName=C:\\base\\db.mdf;Параметры строки подключения:
- Driver: по ситуации (в зависимости от того, к какой версии SQL Server на какой ОС и как именно подключаетесь и что пытаетесь делать) возможно понадобится поменять на SQL Server Native Client XX.0 , где ХХ — используемая версия. Например SQL Server Native Client 11.0 для SQL 2012.
- Server: путь к экземпляру вида (IP или имя сервера)\(имя экземпляра) . Точка означает localhost. Если используется экземпляр по умолчанию, имя экземпляра и косую черту нужно опустить
- DataBase: имя БД, уже присоединенной к серверу.
- AttachDBFileName: путь к файлу БД для подключения (Внимание — при таком сценарии он будет открыт монопольно, пока вы работаете с соединением!).
Для аутентификации по логину и паролю необходимо добавить UID=login;PWD=password (по умолчанию используется Windows-аутентификация от имени текущего пользователя).
Если не уверены в параметрах соединения, можно поэкспериментировать через Панель управления — Администрирование — Источники данных ODBC. Создаете файловый DSN с нужными параметрами, тестируете его, а затем открываете в блокноте и копируете параметры.
SQLite
SQLite представляет одну из самых популярных систем баз данных. И мы можем использовать SQLite в наших приложениях на языке C. Более того сама SQLite написана на языке C.
Для работы с SQlite нам необходимы соответствующие файлы. Самый простой вариант — взять файлы с исходным кодом с официального сайта SQLite со страницы https://www.sqlite.org/download.html:

Нужный нам файл называется «sqlite-amalgamation-xxxxxxxxx.zip». Он представляет архив с исходными файлами SQLite. Если мы его загрузим и распакуем, то увидим в нем несколько файлов:

Здесь нас будут интересовать два файла: sqlite3.c и sqlite3.h . Положим из в одну папку с главным файлом программы (допустим, он называется app.c ):

Для создания подключения к базе данных применяется функция sqlite3_open
int sqlite3_open(const char *filename, sqlite3 **ppDb );
Первый параметр функции представляет имя файла базы данных. Второй параметр — объект sqlite3** , который и будет представлять подключение к базе данных. Через объект sqlite3 в дальнейшем можно взаимодействовать с базой данных.
Результатом функции является числовой код. Если он равен значению константы SQLITE_OK (число 0), то подключение к бд успешно установлено. Если же он равен 1 или представляет другое число, то произошла ошибка.
После завершения работы с базой данных следует закрыть подключение. Для этого применяется функция sqlite3_close()
int sqlite3_close(sqlite3*);
В качестве параметра функция принимает указатель на закрываемое подключение. И также возвращает числовой код результата (0 — при успешном закрытии).
Например, откроем и закроем подключение к базе данных:
#include #include "sqlite3.h" int main() < sqlite3 *db; // указатель на базу данных // открываем подключение к базе данных int result = sqlite3_open("test.db", &db); printf("result = %d\n", result); // закрываем подключение sqlite3_close(db); >Поскольку мы используем функционал SQLite, то при компиляции нам также надо передать компилятору файл sqlite3.c :
gcc app.c sqlite3.c -o app
После выполнения скомпилированного файла app в папке программы должен появиться файл базы данных «test.db». А на консоли в случае успешного выполнения будет выведено
result = 0
Компиляция в gcc
Предложенный выше способ подключения SQLite имеет преимущества — мы имеет доступ к исходникам и можем компилировать приложения вне зависимости от компилятора и окружения — GCC, Clang, Visual Studio. Однако, для этого нам надо как минимум загрузать файлы с исходным кодом, и, кроме того, компиляция программы можем занять некоторое время. Если мы используем GCC, то мы можем упростить задачу. Чуть изменим исходный код:
#include #include int main() < sqlite3 *db; // указатель на базу данных // открываем подключение к базе данных int result = sqlite3_open("test.db", &db); printf("result = %d\n", result); // закрываем подключение sqlite3_close(db); >Здесь файл «sqlite3.h» подключается как глобальный заголовочный файл.
А при компиляции добавим библиотеку sqlite3 с помощью опции компиляции -l :
gcc app.c -o app -l sqlite3
Вывод ошибки
Вполне возможно, что при попытке установить подключение с базой данных возникнет ошибка. SQLite предоставляет функцию sqlite3_errmsg() , которая позволяет из указателя на базу данных получить описание ошибки в виде строки:
const char *sqlite3_errmsg(sqlite3*);
Например, выведем сообщение об ошибке при неудачной попытке установить подключение:
#include #include int main() < sqlite3 *db; // указатель на базу данных // открываем подключение к базе данных int result = sqlite3_open("test.db", &db); // если подключение успешно установлено if(result == SQLITE_OK) < printf("Connection established\n"); >else < // выводим сообщение об ошибке fprintf(stderr, "Error: %s\n", sqlite3_errmsg(db)); >// закрываем подключение sqlite3_close(db); >