В этом разделе описываются некоторые аспекты использования потоков MIT-pthreads.
Следует иметь в виду, что под Linux использовать потоки MIT-pthreads нельзя, для этого необходимо установить LinuxThreads! See Раздел 2.6.1, «Примечания к Linux (Все версии Linux)».
Если ваша система сама по себе не обеспечивает поддержку потоков, то необходимо скомпоновать MySQL, используя пакет поддержки MIT-pthreads. К таким системам относятся старые системы FreeBSD, SunOS 4.x, Solaris 2.4 и более ранние, а также некоторые другие (see Раздел 2.2.3, «Операционные системы, поддерживаемые MySQL»).
Заметьте, с версии MySQL 4.0.2 потоки MIT более не присутствуют в поставке исходных текстов. Если вам действительно нужен этот пакет, вы можете его забрать с https://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz
После загрузки, распакуйте этот архив в каталог исходных текстов MySQL.
Создастся новый каталог mit-pthreads.
-
Для большинства систем можно обеспечить использование потоков MIT-pthreads при помощи запуска
configureс опцией--with-mit-threads:shell> ./configure --with-mit-threads
При использовании потоков MIT-pthreads не поддерживается возможность сборки MySQL в каталоге, не содержащем исходный код, поскольку мы хотим минимизировать наши изменения в данном коде.
Проверки, определяющие, используются ли потоки MIT-pthreads, производятся только во время этапа конфигурационного процесса, относящегося к серверному коду. Если дистрибутив сконфигурирован с использованием
--without-serverдля сборки только клиентского кода, то клиенты не будут знать, применяются ли потоки MIT-pthreads, и будут использовать подключения через сокеты Unix по умолчанию. Поскольку сокеты Unix не работают с потоками MIT-pthreads на некоторых платформах, то при запуске клиентских программ следует использовать-hили--host.При компиляции MySQL с использованием потоков MIT-pthreads блокирование системы отключено по умолчанию из соображений производительности. Можно предписать серверу использовать системную блокировку с помощью опции
--use-external-locking. Это только необходимо если вы собираетесь использовать два MySQL-сервера на одних и тех же файлах данных (не рекомендуется!).-
Иногда потоковой команде
bind()не удается подсоединить сокет без какого-либо сообщения об ошибке (по крайней мере, под Solaris). В результате все подключения к серверу обрываются. Например:shell> mysqladmin version mysqladmin: connect to server at '' failed; error: 'Can't connect to mysql server on localhost (146)'
Для решения этой проблемы следует завершить выполнение сервера
mysqldи перезапустить его. У нас это происходило только в тех случаях, когда мы прерывали работу сервера и сразу же снова его запускали. При использовании потоков MIT-pthreads системный вызов функции
sleep()не прерывается с помощьюSIGINT(break). Это заметно только в том случае, если запускатьmysqladmin --sleep. Следует ждать окончания работыsleep(), прежде чем прерывание будет обслужено и процесс завершит работу.-
При линковании можно получить предупреждающие сообщения, подобные приведенным ниже (по крайней мере под Solaris); их можно игнорировать:
ld: warning: symbol `_iob' has differing sizes: (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4; file /usr/lib/libc.so value=0x140); /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken ld: warning: symbol `__iob' has differing sizes: (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4; file /usr/lib/libc.so value=0x140); /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken -
Некоторые другие предупреждения также можно игнорировать:
implicit declaration of function `int strtoll(...)' implicit declaration of function `int strtoul(...)'
Нам не удалось добиться совместной работы
readlineс потоками MIT-pthreads (это не является необходимым, но для кого-то может представлять интерес).