1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/calvinwilliams-mysqlda

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.zh-CN.md 35 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 00:21 71413a2

2. Архитектура

  • 2.1. MySQL
    • Схема архитектуры представлена на рисунке architecture.png.

mysqlda — это программа, которая взаимодействует с MySQL и обеспечивает работу некоторых функций.

mysqlda использует MySQL для хранения данных.

  • 2.2. Взаимодействие с MySQL

Взаимодействие с MySQL осуществляется через конфигурационный файл mysqlda.conf, который находится в директории etc/mysqlda. Конфигурационный файл содержит параметры, которые определяют взаимодействие mysqlda с MySQL.

Также существует файл mysqlda.save, который является резервной копией файла mysqlda.conf.

При запуске mysqlda считывает параметры из файла mysqlda.conf и устанавливает соединение с MySQL. Затем mysqlda выполняет запросы к MySQL, используя различные функции.

MySQL поддерживает два типа запросов: DML (Data Manipulation Language) и DSL (Data Structure Language).

Запрос DML используется для изменения данных в таблицах MySQL. Запрос DSL используется для создания, изменения или удаления таблиц MySQL.

В запросе DSL можно использовать следующие функции: — library(имя_таблицы) — возвращает список всех столбцов таблицы; — library_by_correl_object(имя_объекта)(имя_корреляции) — возвращает значение столбца корреляции для объекта; — set correl_object(имя_объекта)(значение_столбца) — устанавливает значение столбца корреляции для объекта.

Запросы DML и DSL могут быть выполнены только при наличии соответствующих прав доступа к таблице MySQL.

Для выполнения запроса DML необходимо иметь право SELECT. Для выполнения запроса DSL необходимо иметь права CREATE, ALTER или DROP.

Если запрос DML или DSL выполняется без необходимых прав доступа, то MySQL возвращает ошибку.

Существует четыре сервера MySQL: 1A (MASTER), 1B (SLAVE), 1C (SLAVE) и 1D (SLAVE). Серверы 1B, 1C и 1D являются репликами сервера 1A.

Сервер 1A является основным сервером. Он принимает запросы от клиентов и выполняет их. Серверы 1B, 1C и 1D являются резервными серверами. Они принимают запросы от клиентов, но не выполняют их. Вместо этого они отправляют запросы на сервер 1A, который выполняет их и отправляет результаты обратно на серверы 1B, 1C и 1D.

Серверы 1B, 1C и 1D используются для обеспечения отказоустойчивости системы. Если сервер 1A выходит из строя, то один из серверов 1B, 1C или 1D может взять на себя его роль.

Функция set correl_object используется для установки значения столбца корреляции для объекта. Столбец корреляции используется для связи объектов с таблицами MySQL.

Например, если объект account_no связан с таблицей accounts, то столбец корреляции account_no будет содержать значение первичного ключа таблицы accounts.

Значение столбца корреляции можно установить с помощью функции set correl_object. Например, следующий запрос устанавливает значение столбца корреляции account_no для объекта с идентификатором 331234567890:

set correl_object account_no 331234567890 13812345678

Этот запрос будет выполнен успешно, если у пользователя есть право UPDATE для таблицы accounts. В противном случае MySQL вернёт ошибку.

С помощью функции set correl_object можно также изменить значение столбца корреляции. Например, следующий запрос изменяет значение столбца корреляции account_no для объекта с идентификатором 13812341234:

set correl_object account_no 13812341234 331234567890

Этот запрос также будет выполнен успешно, если у пользователя есть право UPDATE для таблицы accounts.

  • 2.3. Примеры запросов

Следующий запрос выбирает данные из таблицы library:

select library 13812341234

Этот запрос вернёт все строки таблицы library, где значение столбца id равно 13812341234.

Следующий запрос выбирает данные из таблицы library_by_correl_object:

select library_by_correl_object account_no 331234567890

Этот запрос вернёт значение столбца account_no для всех строк таблицы library_by_correl_object, где значение столбца correl_object равно 331234567890.

Следующие запросы устанавливают значения столбцов корреляции:

— set correl_object account_no 331234567890 13812345678; — set correl_object account_no 13812341234 331234567890.

Эти запросы будут выполнены успешно, если у пользователя есть права UPDATE для соответствующих таблиц.

  • 2.4. Объекты MySQL

Объекты MySQL включают в себя следующие элементы: — forward_instance — экземпляр сервера MySQL; — forward_servers list — список серверов MySQL; — unused_forward_session list — список сеансов MySQL, которые больше не используются; — forward_session list — список активных сеансов MySQL; — forward_correl_object_class — класс объектов MySQL; — forward_correl_object — объект MySQL; — accepted_session — сеанс MySQL, который был принят сервером MySQL.

Экземпляр сервера MySQL представляет собой процесс, который принимает запросы от клиентов. Экземпляр сервера может работать на одном или нескольких серверах.

Список серверов MySQL содержит информацию о серверах MySQL, на которых работают экземпляры серверов. Список серверов может быть пустым, если нет экземпляров серверов MySQL.

Сеанс MySQL представляет собой соединение между клиентом и экземпляром сервера MySQL. Сеанс имеет уникальный идентификатор и может находиться в одном из следующих состояний: — активный — сеанс принимает и обрабатывает запросы; — неактивный — сеанс не принимает и не обрабатывает запросы.

Объект MySQL представляет собой сущность, которая связана с данными в таблице MySQL. Объект имеет уникальный идентификатор и может быть связан с одним или несколькими объектами.

Класс объектов MySQL определяет тип объектов MySQL. Класс объектов может иметь один или несколько подклассов.

3. Установка

Программа mysqlda может быть установлена из репозитория Oschina.

3.1. Клонирование репозитория

$ git clone http://git.oschina.net/calvinwilliams/mysqlda
Cloning into 'mysqlda'...
remote: Counting objects: 355, done.
remote: Compressing objects: 100% (345/345), done.
remote: Total 355 (delta 221), reused 0 (delta 0)
Receiving objects: 100% (355/355), 586.04 KiB | 0 bytes/s, done.
Resolving deltas: 100% (221/221), done.

Команда git clone клонирует репозиторий mysqlda из удалённого репозитория на локальный компьютер.

После выполнения команды git clone в каталоге /home/calvin/src/mysqlda/src будет создана папка mysqlda, содержащая файлы программы.

3.2. Сборка программы

Перед сборкой программы необходимо выполнить команду make clean для удаления файлов сборки.

$ cd mysqlda
$ make -f makefile.Linux clean
make[1]: Entering directory `/home/calvin/src/mysqlda/src'
make[2]: Entering directory `/home/calvin/src/mysqlda/src/mysqlda'
rm -f lk_list.o
rm -f rbtree.o
rm -f LOGC.o
rm -f fasterjson.o
rm -f util.o
rm -f rbtree_ins.o
rm -f IDL_mysqlda_conf.dsc.o
rm -f main.o
rm -f config.o

Команда make -f makefile.Linux clean удаляет файлы сборки в папке mysqlda. ``` rm -f monitor.o rm -f worker.o rm -f comm.o rm -f app.o rm -f mysqlda make[2]: Leaving directory /home/calvin/src/mysqlda/src/mysqlda' make[1]: Leaving directory /home/calvin/src/mysqlda/src' make[1]: Entering directory `/home/calvin/src/mysqlda/shbin' make[1]: Leaving directory `/home/calvin/src/mysqlda/shbin' make[1]: Entering directory `/home/calvin/src/mysqlda/test' rm -f mysqlda_test_connect.o rm -f mysqlda_test_select_library.o rm -f mysqlda_test_set_correl_object.o rm -f mysqlda_test_select_library_by_correl_object.o rm -f mysqlda_test_insert.o rm -f mysqlda_test_update.o rm -f mysqlda_test_delete.o rm -f mysqlda_test_connect rm -f mysqlda_test_select_library rm -f mysqlda_test_set_correl_object rm -f mysqlda_test_select_library_by_correl_object rm -f mysqlda_test_insert rm -f mysqlda_test_update rm -f mysqlda_test_delete make[1]: Leaving directory `/home/calvin/src/mysqlda/test'


## 3.3. �޸İ�װĿ��Ŀ¼

��ִ���ļ�mysqldaĬ�ϱ������ӳ�����װ��$HOME/bin���������Ŀ��Ŀ¼�ɱ༭src/mysqlda/makeinstall

_BINBASE = $(HOME)/bin


�����ű�mysqlda.shĬ�ϱ������ӳ�����װ��$HOME/shbin���������Ŀ��Ŀ¼�ɱ༭shbin/makeinstall

NOCLEAN_OBJINST = $(HOME)/shbin


û����������Բ��޸�

## 3.4. ���롢��װ

```Shell
$ make -f makefile.Linux install
make[1]: Entering directory `/home/calvin/src/mysqlda/src'
make[2]: Entering directory `/home/calvin/src/mysqlda/src/mysqlda'
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/mysqlda_api -std=gnu99 -I/usr/include/mysql  -c lk_list.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/mysqlda_api -std=gnu99 -I/usr/include/mysql  -c rbtree.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/mysqlda_api -std=gnu99 -I/usr/include/mysql  -c LOGC.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/mysqlda_api -std=gnu99 -I/usr/include/mysql  -c fasterjson.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/mysqlda_api -std=gnu99 -I/usr/include/mysql  -c util.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/mysqlda_api -std=gnu99 -I/usr/include/mysql  -c rbtree_ins.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/mysqlda_api -std=gnu99 -I/usr/include/mysql  -c IDL_mysqlda_conf.dsc.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/mysqlda_api -std=gnu99 -I/usr/include/mysql  -c main.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/mysqlda_api -std=gnu99 -I/usr/include/mysql  -c config.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/mysqlda_api -std=gnu99 -I/usr/include/mysql  -c monitor.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/mysqlda_api -std=gnu99 -I/usr/include/mysql  -c worker.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/mysqlda_api -std=gnu99 -I/usr/include/mysql  -c comm.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/mysqlda_api -std=gnu99 -I/usr/include/mysql  -c app.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -o mysqlda lk_list.o rbtree.o LOGC.o fasterjson.o util.o rbtree_ins.o IDL_mysqlda_conf.dsc.o main.o config.o monitor.o worker.o comm.o app.o -L. -L/home/calvin/lib -L/usr/lib64/mysql -lmysqlclient -lcrypto 
cp -rf mysqlda /home/calvin/bin/
make[2]: Leaving directory `/home/calvin/src/mysqlda/src/mysqlda'
make[1]: Leaving directory `/home/calvin/src/mysqlda/src'
make[1]: Entering directory `/home/calvin/src/mysqlda/shbin'
cp -rf mysqlda.sh /home/calvin/shbin/
make[1]: Leaving directory `/home/calvin/src/mysqlda/shbin'
make[1]: Entering directory `/home/calvin/src/mysqlda/test'
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include -std=gnu99 -I/usr/include/mysql  -c mysqlda_test_connect.c
gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -o mysqlda_test_connect mysqlda_test_connect.o -L. -L/home/calvin/lib -L/home/calvin/lib
``` Данный фрагмент текста представляет собой набор команд на языке программирования, без использования специфической терминологии.

Перевод выглядит следующим образом:  

-L/usr/lib64/mysql -lmysqlclient gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include -std=gnu99 -I/usr/include/mysql -c mysqlda_test_select_library.c gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -o mysqlda_test_select_library mysqlda_test_select_library.o -L. -L/home/calvin/lib -L/home/calvin/lib -L/usr/lib64/mysql -lmysqlclient gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include -std=gnu99 -I/usr/include/mysql -c mysqlda_test_set_correl_object.c gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -o mysqlda_test_set_correl_object mysqlda_test_set_correl_object.o -L. -L/home/calvin/lib -L/home/calvin/lib -L/usr/lib64/mysql -lmysqlclient gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include -std=gnu99 -I/usr/include/mysql -c mysqlda_test_select_library_by_correl_object.c gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -o mysqlda_test_select_library_by_correl_object mysqlda_test_select_library_by_correl_object.o -L. -L/home/calvin/lib -L/home/calvin/lib -L/usr/lib64/mysql -lmysqlclient gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include -std=gnu99 -I/usr/include/mysql -c mysqlda_test_insert.c gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -o mysqlda_test_insert mysqlda_test_insert.o -L. -L/home/calvin/lib -L/home/calvin/lib -L/usr/lib64/mysql -lmysqlclient gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include -std=gnu99 -I/usr/include/mysql -c mysqlda_test_update.c gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -o mysqlda_test_update mysqlda_test_update.o -L. -L/home/calvin/lib -L/home/calvin/lib -L/usr/lib64/mysql -lmysqlclient gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include -std=gnu99 -I/usr/include/mysql -c mysqlda_test_delete.c gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -o mysqlda_test_delete mysqlda_test_delete.o -L. -L/home/calvin/lib -L/home/calvin/lib -L/usr/lib64/mysql -lmysqlclient make[1]: Leaving directory `/home/calvin/src/mysqlda/test'


## 3.5. ��ѯ�汾�ţ�Ҳȷ�Ͽ�ִ���ļ�OK

```Shell
$ mysqlda -v
mysqlda v0.0.6.0

4. ����ʹ��

4.1. �Զ�����ȱʡ�����ļ�

$ mysqlda -a init
$ cat ~/etc/mysqlda.conf
{
        "server" : 
        {
                "listen_ip" : "127.0.0.1" ,
                "listen_port" : 13306
        } ,
        "auth" : 
        {
                "user" : "calvin" ,
                "pass" : "calvin" ,
                "db" : "calvindb"
        } ,
        "session_pool" : 
        {
                "unused_forward_session_timeout" : 60
        } ,
        "forwards" : 
        [
        {
                "instance" : "mysqlda1" ,
                "forward" : 
                [
                {
                        "ip" : "127.0.0.1" ,
                        "port" : 3306
                }
                ]
        }
        ]
}

��������˵�����£�

server.listen_ip : mysqlda����Ӧ�÷�����������IP
server.listen_port : mysqlda����Ӧ�÷�����������PORT
auth.user : mysqlda����Ӧ�÷������ĵ�¼��֤�û�����Ҳ��mysqlda����MySQL���ݿ�������б���Ⱥ�ĵ�¼��֤�û���
auth.pass : mysqlda����Ӧ�÷������ĵ�¼��֤�û����룬Ҳ��mysqlda����MySQL���ݿ�������б���Ⱥ�ĵ�¼��֤�û�����
auth.db : mysqlda����Ӧ�÷������ĵ�¼���ݿ⣬Ҳ��mysqlda����MySQL���ݿ�������б���Ⱥ�ĵ�¼���ݿ�
session_pool.unused_forward_session_timeout : mysqlda����MySQL���ݿ�������б���Ⱥ�Ŀ������ӳس�ʱ����ʱ��
forwards[].instance : MySQL������ID
forwards[].forward[].ip : MySQL�����������IP
forwards[].forward[].port : MySQL�����������PORT

4.2. ����mysqlda

���������в���ֱ��ִ��mysqlda��õ����������б�������ʵ�ʻ����޸��������ļ�������

$ mysqlda
USAGE : mysqlda -f (config_filename) --no-daemon -a [ init | start ]
                                     [ --loglevel-debug | --loglevel-info | --loglevel-notice
                                     | --logleve-warn | --loglevel-error | --loglevel-fatal ]
                -v
$ mysqlda -a start

ע�⣺Ĭ����־�ȼ�ΪNOTICE��������Ե��Եȼ����������������в���--loglevel-debug��

Ҳ����ʹ�ù����ű�����

$ mysqlda.sh
USAGE : mysqlda.sh
``` 2017-09-03 14:17:17.307506 | NOTICE | 18583:worker.c:260 | listen[192.168.6.21:13306] #2#
2017-09-03 14:17:17.307509 | NOTICE | 18583:worker.c:275 | epoll_ctl #1# add listen_session #2#
2017-09-03 14:17:17.308110 | NOTICE | 18583:worker.c:293 | [mysql_data_1]mysql_real_connect[192.168.6.22][3306][calvin][calvin][calvindb] connecting ...
2017-08-28 14:17:17.308110 | ERROR | 53070:worker.c:130 | [mysql_data_1]mysql_real_connect[192.168.6.22][13306][calvin][calvin][calvindb] failed, mysql_errno[2003][Can't connect to MySQL server on '192.168.6.22' (113)]
2017-08-28 14:17:17.308110 | INFO  | 53070:worker.c:482 | worker exit ...

**4.3.** 

```Shell
$ ps -ef | grep mysqlda
calvin   53069     1  0 00:12 pts/1    00:00:00 mysqlda -a start
calvin   53097 53072  0 00:12 pts/2    00:00:00 view mysqlda.log
calvin   53111 52899  0 00:12 pts/1    00:00:00 grep --color=auto mysqlda
$ kill 53069

4.4. MySQL

4.4.1. Настройка MySQL

В файле mysqlda.conf указаны настройки переадресации (forwards).

        "forwards" : 
        [
                {
                        "instance" : "mysql_data_1",
                        "forward" : 
                        [
                        { "ip" : "192.168.6.11", "port" : 13306 },
                        { "ip" : "192.168.6.12", "port" : 13306 },
                        { "ip" : "192.168.6.13", "port" : 13306 }
                        ]
                },
                {
                        "instance" : "mysql_data_2",
                        "forward" : 
                        [
                        { "ip" : "192.168.6.21", "port" : 13306 },
                        { "ip" : "192.168.6.22", "port" : 13306 },
                        { "ip" : "192.168.6.23", "port" : 13306 }
                        ]
                }
        ]

Для остановки MySQL используется команда stop.

$ mysqlda.sh stop

4.4.2. Расширение настроек MySQL

Файл mysqlda.conf дополняется настройками переадресации.

        "forwards" : 
        [
                {
                        "instance" : "mysql_data_1",
                        "forward" : 
                        [
                        { "ip" : "192.168.6.11", "port" : 13306 },
                        { "ip" : "192.168.6.12", "port" : 13306 },
                        { "ip" : "192.168.6.13", "port" : 13306 },
                        { "ip" : "192.168.6.14", "port" : 13306 }
                        ]
                },
                {
                        "instance" : "mysql_data_2",
                        "forward" : 
                        [
                        { "ip" : "192.168.6.21", "port" : 13306 },
                        { "ip" : "192.168.6.22", "port" : 13306 },
                        { "ip" : "192.168.6.23", "port" : 13306 },
                        { "ip" : "192.168.6.24", "port" : 13306 }
                        ]
                }
        ]

Перезагрузка MySQL выполняется командой reload.

$ mysqlda.sh reload

5. Резервное копирование MySQL

5.1. Резервное копирование данных MySQL

Резервные копии сохраняются в файл mysqlda.save, который находится в домашнем каталоге пользователя ($HOME/etc/mysqlda.save). Данный текст представляет собой фрагмент технической документации, связанной с разработкой и тестированием программного обеспечения. Основной язык текста — русский.

5.2. Пример использования mysqlda

mysqlda — это инструмент для работы с данными в MySQL. Он позволяет выполнять различные операции с данными, такие как чтение, запись, изменение и удаление.

Инструмент mysqlda используется для выполнения следующих операций:

  • чтение данных из базы данных MySQL;
  • запись данных в базу данных MySQL;
  • изменение данных в базе данных MySQL;
  • удаление данных из базы данных MySQL.

Для выполнения этих операций используются следующие команды:

  • mysqlda.save — сохраняет данные в файл;
  • mysqlda.load — загружает данные из файла в базу данных;
  • mysqlda.update — изменяет данные в базе данных;
  • mysqlda.delete — удаляет данные из базы данных.

Пример использования инструмента mysqlda:

$HOME/etc/mysqlda.(имя_файла).save

где $(имя_файла) — имя файла, содержащего данные для сохранения.

После выполнения этой команды данные будут сохранены в файле $(имя_файла).

6. Использование mysqlda для работы с библиотеками

В этом разделе описывается использование инструмента mysqlda для работы с библиотеками. Библиотека — это набор функций, которые могут быть использованы другими программами.

Существует три типа библиотек:

  1. Системные библиотеки — это библиотеки, предоставляемые операционной системой. Они доступны всем программам.
  2. Пользовательские библиотеки — это библиотеки, созданные пользователем. Они доступны только тем программам, которые их используют.
  3. Динамические библиотеки — это библиотеки, загружаемые во время выполнения программы. Они могут использоваться несколькими программами одновременно.

6.1. Работа с системными библиотеками

Работа с системными библиотеками осуществляется с помощью следующих команд:

6.1.1. Получение списка системных библиотек

Команда library возвращает список всех системных библиотек, доступных на компьютере.

select library ();

Эта команда возвращает следующий результат:

библиотека
libc
libm
...

6.1.2. Установка корреляционного объекта для системной библиотеки

Команда set correl_object устанавливает корреляционный объект для системной библиотеки. Корреляционный объект — это объект, который может быть использован для идентификации библиотеки.

set correl_object (библиотека) (корреляционный_объект);

Например, следующая команда устанавливает корреляционный объект «calvin» для библиотеки «libc»:

set correl_object libc calvin;

6.1.3. Получение корреляционной информации о системной библиотеке

Команда library_by_correl_object получает корреляционную информацию о системной библиотеке. Эта информация включает в себя имя библиотеки, её версию и корреляционный объект.

select library_by_correl_object (корреляционный_объект);

Например, следующая команда получает корреляционную информацию о библиотеке «libc»:

select library_by_correl_object calvin;

Результат:

имя_библиотеки версия корреляционный_объект
libc 1.0 calvin

6.2. Тестирование инструмента mysqlda с использованием C

Тестирование инструмента mysqlda осуществляется с использованием языка программирования C. Для этого необходимо создать программу, которая будет подключаться к базе данных MySQL и выполнять необходимые операции.

Программа должна содержать следующие функции:

  • подключение к базе данных MySQL;
  • выполнение необходимых операций;
  • отключение от базы данных MySQL.

Подключение к базе данных осуществляется с помощью функции mysql_real_connect. Эта функция принимает следующие аргументы:

  • адрес сервера MySQL;
  • имя пользователя;
  • пароль;
  • база данных;
  • порт;
  • сокет;
  • флаги.

Выполнение необходимых операций осуществляется с помощью функций mysql_query и mysql_store_result. Эти функции выполняют запрос к базе данных и возвращают результаты запроса.

Отключение от базы данных осуществляется с помощью функции mysql_close. Эта функция закрывает соединение с базой данных.

Пример программы на языке C, которая подключается к базе данных MySQL, выполняет запрос и отключается от неё:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#include "my_global.h"
#include "mysql.h"

/*
./mysqlda_test_connect "192.168.6.21" 13306 calvin calvin calvindb
*/

static void usage()
{
    printf( "USAGE : mysqlda_test_connect (ip) (port) (user) (pass) (database)\n" );
    return;
}

int main( int argc , char *argv[] )
{
    MYSQL       *conn = NULL ;
    char        *ip = NULL ;
    unsigned int    port ;
    char        *user = NULL ;
    char        *pass = NULL ;
    char        *database = NULL ;

    if( argc != 1 + 5 )
    {
        usage();
        exit(7);
    }

    printf( "mysql_get_client_info[%s]\n" , mysql_get_client_info() );

    conn = mysql_init(NULL) ;
    if( conn == NULL )
    {
        printf( "mysql_init failed\n" );
        return 1;
    }

    ip = argv[1] ;
    port = (unsigned int)atoi(argv[2]) ;
    user = argv[3] ;
    pass = argv[4] ;
    database = argv[5] ;
    if( mysql_real_connect( conn , ip , user , pass , database , port , NULL , 0 ) == NULL )
    {
        printf( "mysql_real_connect failed , mysql_errno[%d][%s]\n" , mysql_errno(conn) , mysql_error(conn) );
        return 1;
    }
    else
    {
        printf( "mysql_real_connect ok\n" );
    }

    mysql_close( conn );
    printf( "mysql_close\n" );

    return 0;
}

Эта программа подключается к серверу MySQL по адресу 192.168.6.21, порту 13306, имени пользователя calvin, паролю calvin и базе данных calvindb. Затем она выполняет запрос к базе данных и отключается от неё. Данный фрагмент представляет собой текст на языке C.

Это часть исходного кода программы, которая подключается к базе данных MySQL, выполняет определённые операции и выводит результаты работы в консоль.

В тексте используются функции для работы с базой данных из библиотеки MySQL C API. Программа подключается к серверу MySQL, получает данные из базы данных и выполняет операции вставки и обновления данных.

Точный перевод текста невозможен без контекста, но вот примерный перевод основной части:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#include "my_global.h"
#include "mysql.h"

/*
./mysqlda_test_update "192.168.6.21" 13306 calvin calvin calvindb 1 1000
*/

static void usage() {
    printf("USAGE : mysqlda_test_update (ip) (port) (user) (pass) (database) (begin_seqno) (end_seqno)\n");
    return;
}

int main(int argc, char *argv[]) {
    MYSQL *conn = NULL;
    char *ip = NULL;
    unsigned int port;
    char *user = NULL;
    char *pass = NULL;
    char *database = NULL;

    int begin_seqno;
    int end_seqno;
    int seqno;
    char seqno_buffer[20 + 1];
    char sql[4096 + 1];

    int nret = 0;

    if (argc != 1 + 7) {
        usage();
        exit(7);
    }

    printf("mysql_get_client_info[%s]\n", mysql_get_client_info());

    conn = mysql_init(NULL);
    if (conn == NULL) {
        printf("mysql_init failed\n");
        return 1;
    }

    ip = argv[1];
    port = (unsigned int)atoi(argv[2]);
    user = argv[3];
    pass = argv[4];
    database = argv[5];
    if (mysql_real_connect(conn, ip, user, pass, database, port, NULL, 0) == NULL) {
        printf("mysql_real_connect failed, mysql_errno[%d][%s]\n", mysql_errno(conn), mysql_error(conn));
        return 1;
    } else {
        printf("mysql_real_connect ok\n");
    }
``` Данный текст написан на языке C.

memset( seqno_buffer , 0x00 , sizeof(seqno_buffer) ); begin_seqno = atoi(argv[6]) ; end_seqno = atoi(argv[7]) ; for( seqno = begin_seqno ; seqno <= end_seqno ; seqno++ ) { memset( sql , 0x00 , sizeof(sql) ); snprintf( sql , sizeof(sql) , "select library %d" , seqno ); nret = mysql_query( conn , sql ) ; if( nret ) { printf( "mysql_query[%s] failed , mysql_errno[%d][%s]\n" , sql , mysql_errno(conn) , mysql_error(conn) ); mysql_close( conn ); return 1; } else { printf( "mysql_query[%s] ok\n" , sql ); }

memset( sql , 0x00 , sizeof(sql) );
snprintf( sql , sizeof(sql) , "update test_table set value='%d' where name='%d'" , seqno , seqno );
nret = mysql_query( conn , sql ) ;
if( nret )
{
    printf( "mysql_query[%s] failed , mysql_errno[%d][%s]\n" , sql , mysql_errno(conn) , mysql_error(conn) );
    mysql_close( conn );
    return 1;
}
else
{
    printf( "mysql_query[%s] ok\n" , sql );
}

}

mysql_close( conn ); printf( "mysql_close\n" );

return 0;


Здесь создаётся программа, которая подключается к MySQL и выполняет запросы к базе данных. Программа выбирает данные из таблицы `test_table` и обновляет значение поля `value` для каждой строки, где значение поля `name` совпадает с номером строки.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/calvinwilliams-mysqlda.git
git@api.gitlife.ru:oschina-mirror/calvinwilliams-mysqlda.git
oschina-mirror
calvinwilliams-mysqlda
calvinwilliams-mysqlda
master