RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
YandexMoney: 
41001198119846 
E-gold:
5128052

4.1 Настройка MySQL

4.1.1 Параметры командной строки mysqld

Программа mysqld понимает параметры командной строки:

--ansi
Использовать синтаксис ANSI SQL вместо синтаксиса MySQL.
-b, --basedir=path
Путь к каталогу установки. Все пути обычно вычисляются относительно его.
--big-tables
использовать большие наборы результатов, сохраняя все временные наборы в файле. Это решает большинство проблем table full, но также и замедляет запросы, где таблицы в памяти были бы достаточными. Начиная с версии 3.23.2, MySQL способен решить это автоматически, используя память для маленьких временных таблиц и переключаясь на дисковые таблицы там, где необходимо.
--bind-address=IP
IP-адрес для поиска имен.
--character-sets-dir=path
Каталог, где лежат наборы символов.
--chroot=path
Выполнить chroot для mysqld. Немного ограничит LOAD DATA INFILE и SELECT ... INTO OUTFILE.
--core-file
Записать core-файл, если mysqld сваливается. Для некоторых систем Вы должны также определить --core-file-size в скрипте safe_mysqld.
-h, --datadir=path
Путь к корню базы данных.
--default-character-set=charset
Заданный по умолчанию набор символов.
--default-table-type=type
Заданный по умолчанию тип таблицы.
--debug[...]=
Если MySQL конфигурирован с опцией --with-debug, Вы можете использовать эту опцию, чтобы получить файл трассировки того, что делает mysqld.
--delay-key-write-for-all-tables
Не сбрасывать буфера ключей между записями для таблиц MyISAM.
--enable-locking
Включить блокировки системы. Обратите внимание, что, если Вы используете эту опцию на системе, которая имеет не полностью рабочий lockd() (как на Linux), Вы легко получите зависший mysqld.
-T, --exit-info
Битовая маска различных флажков, которые можно использовать для точной отладки сервера mysqld.
--flush
Сбрасывать все изменения на диск после каждой команды SQL. Обычно MySQL делает запись всех изменений после каждой команды SQL и позволяет операционной системе обрабатывать синхронизацию с диском.
-?, --help
Отобразить короткую справку и завершить работу.
--init-file=file
Читать команды SQL из этого файла при запуске.
-L, --language=...
Сообщения об ошибках клиента будут выданы на данном языке. Может быть задан как полный путь.
-l, --log[=file]
Протоколировать соединения и запросы в файле file.
--log-isam[=file]
Протоколировать все изменения ISAM/MyISAM в файле file (используется только при отладке ISAM/MyISAM).
--log-slow-queries[=file]
Протоколировать все запросы, которые потребовали на обработку больше, чем long_query_time секунд в файле file.
--log-update[=file]
Протоколировать все изменения в файле file.#, где # является уникальным числом, если не задан.
--log-long-format
Протоколировать дополнительные данные в файле регистрации обновлений. Если Вы используете --log-slow-queries, то запросы, которые не используют индексы, регистрируются в медленном файле регистрации.
--low-priority-updates
Изменяющие таблицу операции (INSERT/DELETE/UPDATE) будут иметь более низкий приоритет, чем выбор из таблицы. Это может также быть выполнено через {INSERT | REPLACE | UPDATE | DELETE} LOW_PRIORITY ..., чтобы понизить приоритет только относительно одного запроса, или SET OPTION SQL_LOW_PRIORITY_UPDATES=1, чтобы изменить приоритет в одном конкретном потоке.
--memlock
Блокировать процесс mysqld в памяти. Это работает только, если Ваша система поддерживает системный вызов mlockall() (подобно Solaris). Это может помочь, если Вы имеете проблему, где операционная система заставляет mysqld свопиться на диск.
--myisam-recover [=option[,option...]]]
Здесь option представляет собой любую комбинацию из DEFAULT, BACKUP, FORCE или QUICK. Вы можете также устанавливать это в "", если Вы хотите отключить эту опцию. Если эта опция используется, mysqld при открытии будет проверять отмечена ли таблица как поврежденная или не закрытая правильно (последняя опция работает только, если Вы запустили пакет с параметром --skip-locking). Если таблица была разрушена, mysqld попробует ее починить. Следующие параметры воздействуют на ремонтные работы.
DEFAULTАналогично опции --myisam-recover.
BACKUPЕсли таблица данных была изменена в течение ремонта, сохраняет копию файла данных `table_name.MYD' под именем `table_name-datetime.BAK'.
FORCEВыполнить ремонт, даже если будет потеряно более, чем одна строка из файла .MYD.
QUICKНе проверять строки в таблице, если в ней нет удаленных блоков.
Прежде, чем таблица будет автоматически восстановлена, MySQL добавит примечание относительно этого в файле регистрации ошибок. Если Вы хотите автоматически исправлять большинство повреждений без вмешательства пользователя, Вы должны использовать опции BACKUP,FORCE. Это вынудит провести ремонт таблицы, даже если некоторые строки будут удалены, но это сохранит старый файл данных как копию так, чтобы Вы могли позже исследовать то, что с ним случилось.
--pid-file=path
Путь к pid-файлу, используемому safe_mysqld.
-P, --port=...
Номер порта, на котором слушать TCP/IP подключения.
-o, --old-protocol
Использовать протокол 3.20 для совместимости с некоторыми очень старыми версиями клиентов. Сейчас не используется.
--one-thread
Использовать только один поток (для отладки под Linux).
-O, --set-variable var=option
Задать значение переменной. Допустимые переменные можно получить с помощью параметра --help. Вы можете найти полное описание всех переменных в разделе "SHOW VARIABLES".
--safe-mode
Пропуск некоторых стадий оптимизации. Подразумевается --skip-delay-key-write.
--safe-show-database
Не показывать базы данных, для которых пользователь не имеет привилегий.
--safe-user-create
Если это включено, пользователь не может создавать новых пользователей командой GRANT, если он не имеет привилегию INSERT на таблице mysql.user или любом столбце в этой таблице.
--skip-concurrent-insert
Выключить способность выбирать и вставлять в то же самое время на таблицах MyISAM. Это должно использоваться только, если Вы думаете, что Вы нашли ошибку в этом свойстве.
--skip-delay-key-write
Игнорировать опцию delay_key_write для всех таблиц.
--skip-grant-tables
Эта опция заставляет сервер не использовать систему привилегии вообще. Это дает каждому полный доступ ко всем базам данных! Чтобы запустить привилегии, выполните команду mysqladmin flush-privileges или mysqladmin reload.
--skip-host-cache
Никогда не использовать кэширование имен для более быстрого преобразования имен в адреса. Всегда делать запрос DNS.
--skip-locking
Не использовать блокировку системы. Чтобы применить isamchk или myisamchk, Вы должны завершить сервер. Обратите внимание, что в MySQL версии 3.23 Вы можете использовать команды REPAIR и CHECK для ремонта и проверки новых таблиц системы MyISAM.
--skip-name-resolve
Имена хостов не преобразовывать вообще. Все столбцы Host в таблицах должны иметь значение IP-адреса или localhost.
--skip-networking
Не слушать TCP/IP подключения вообще. Все взаимодействие с mysqld должно быть сделано через сокеты Unix. Эта опция очень рекомендуется на системах, где позволяются только локальные запросы.
--skip-new
Не использовать новые, возможно, неправильные подпрограммы. Подразумевается опция --skip-delay-key-write. Это также установит заданный по умолчанию тип таблицы в ISAM.
--skip-symlink
Не удалять или переименовывать файлы, на которые указывает символическая ссылка в каталоге данных.
--skip-safemalloc
Если MySQL конфигурирован с опцией --with-debug=full, все программы проверят на перекрытие память для каждого распределения и освобождения памяти. Поскольку эта проверка очень медленная, Вы можете отказаться от нее, когда Вы не нуждаетесь в постоянной проверке памяти, используя эту опцию.
--skip-show-database
Не позволять команды 'SHOW DATABASE', если пользователь не имеет привилегию process.
--skip-stack-trace
Не записывать трассировку стека. Эта опция полезна, когда Вы выполняете mysqld под программой-отладчиком.
--skip-thread-priority
Отключить использование приоритетов потоков для ускорения ответов.
--socket=path
Файл сокета, который надлежит использовать для локальных подключений вместо значения по умолчанию /tmp/mysql.sock.
--sql-mode=option[,option[,option...]]
Опция может быть любой комбинацией значений: REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, SERIALIZE, ONLY_FULL_GROUP_BY. Это может также быть пусто (""), если Вы хотите сбросить эту настройку. Определяя все приведенные выше параметры, Вы достигнете того же эффекта, что и опцией --ansi. Но данной опцией можно включить только необходимые SQL-режимы.
transaction-isolation={READ-UNCOMMITTED|READ-COMMITTED|REPEATABLE-READ|SERIALIZABLE}
Устанавливает заданный по умолчанию уровень изоляции транзакции.
-t, --tmpdir=path
Путь для временных файлов. Может быть полезно, если Ваше значение по умолчанию /tmp проживает на разделе слишком маленьком, чтобы хранить временные таблицы.
-u, --user=user_name
Выполнить mysqld как пользователь user_name. Эта опция обязательна при запуске mysqld как root.
-V, --version
Вывести информацию о версии и завершить работу.
-W, --warnings
Распечатать предупреждения, подобные Aborted connection... в файл .err.

4.1.2 Файл опций my.cnf

MySQL может, начиная с версии 3.22, читать заданные по умолчанию параметры запуска для клиентов и сервера из файлов опций.

MySQL читает заданные по умолчанию параметры из следующих файлов (в Unix):

Имя файлаЗачем он нужен
/etc/my.cnfГлобальные опции для всех
DATADIR/my.cnfОпции для сервера
defaults-extra-fileФайл, определенный через --defaults-extra-file=#
~/.my.cnfСпецифические для пользователей опции

DATADIR представляет собой каталог данных MySQL (обычно `/usr/local/mysql/data' для бинарного дистрибутива или `/usr/local/var' для установки из исходников). Обратите внимание, что это тот каталог, который был определен в конфигурации, а не указан в опции --datadir при запуске mysqld! Параметр --datadir не имеет никакого эффекта в то время, когда сервер ищет файлы опций потому, что он их ищет прежде, чем обрабатывает любые параметры командной строки.

MySQL читает заданные по умолчанию параметры из следующих файлов (только в ОС Windows):

Имя файлаЗачем он нужен
windows-system-directory\my.iniГлобальные опции
C:\my.cnfГлобальные опции
C:\mysql\data\my.cnfОпции для сервера

Обратите внимание, что в Windows Вы должны определить все пути с / вместо \. Если Вы используете \, Вы должны определить это дважды, поскольку \ символ ESC в MySQL.

MySQL пробует читать файлы опции в порядке, перечисленном выше. Если есть несколько файлов настроек, используется опция, определенная в том файле, который читается позже. Параметры, определенные в командной строке имеют приоритет над параметрами, определенными в любом файле опций. Некоторые параметры могут быть определены, используя системные переменные. Параметры, определенные в командной строке или в файлах опций имеют приоритет над значением соответствующей системной переменной.

Следующие программы поддерживают файлы опций: mysql, mysqladmin, mysqld, mysqldump, mysqlimport, mysql.server, myisamchk и myisampack.

Вы можете использовать файлы опций, чтобы определить любую длинную опцию, которую программа поддерживает! Выполните программу с параметром --help, чтобы получить список доступных параметров.

Файл опций может содержать строки следующих форм:

#comment
Строки комментария начинаются с `#' или с `;'. Пустые строки игнорируются.
[group]
group представляет собой имя программы или группы, для которой Вы хотите устанавливать параметры. После строки группы любая строка option или set-variable обращается к именованной группе, пока не будет достигнут конец файла опций или другая строка группы.
option
Эквивалентно --option в командной строке.
option=value
Эквивалентно --option=value в командной строке.
set-variable = variable=value
Эквивалентно --set-variable variable=value в командной строке. Этот синтаксис должен использоваться, чтобы установить переменную mysqld.

Группа client позволяет Вам определять параметры, которые обращаются ко всей клиентуре MySQL (но не к mysqld). Это самая подходящая группа, чтобы определить в ней пароль, который Вы используете, чтобы соединиться с сервером. Но удостоверьтесь, что файл опций читаем и перезаписываем только Вами.

Обратите внимание, что для параметров и значений все конечные и начальные пробелы автоматически удалены. Вы можете использовать управляющие последовательности \b, \t, \n, \r, \\ и \s в Вашей строке (\s==пробел).

Имеется типичный глобальный файл опций:

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
socket=/tmp/mysql.sock
set-variable = key_buffer_size=16M
set-variable = max_allowed_packet=1M

[mysqldump]
quick

Имеется типичный файл опций пользователя:

[client]
# The following password will be sent to all standard MySQL clients
password=my_password

[mysql]
no-auto-rehash
set-variable = connect_timeout=2

[mysqlhotcopy]
interactive-timeout

Если Вы имеете дистрибутив с исходниками, Вы найдете, что типовые файлы конфигурации называются my-xxxx.cnf в каталоге support-files. А вот в двоичном дистрибутиве смотрите в каталог DIR/support-files, где DIR задает имя пути к каталогу установки MySQL (обычно /usr/local/mysql). В настоящее время имеются типовые файлы конфигурации для маленькой, средней, большой и очень большой системы. Вы можете копировать my-xxxx.cnf в Ваш основной каталог (переименуйте копию в .my.cnf), чтобы экспериментировать.

Вся клиентура MySQL, которая поддерживает файлы опций, использует и следующие параметры:

--no-defaultsНе читать любые файлы опций.
--print-defaultsПечатать имя программы и все параметры, которые ей передаются.
--defaults-file=full-path-to-default-fileИспользовать только данный файл конфигурации.
--defaults-extra-file=full-path-to-default-fileЧитать этот файл конфигурации после глобального файла опций, но перед чтением файла настроек пользователя.

Обратите внимание, что вышеупомянутые параметры должны быть первыми в командной строке, чтобы они работали! Однако, --print-defaults может использоваться непосредственно после команды --defaults-xxx-file.

В скриптах оболочки Вы можете использовать команду my_print_defaults, чтобы анализировать файлы конфигурации:

shell> my_print_defaults client mysql
--port=3306
--socket=/tmp/mysql.sock
--no-auto-rehash

Вышеупомянутый вывод содержит все параметры для групп 'client' и 'mysql'.

4.1.3 Установка нескольких серверов на одной и той же машине

В некоторых случаях Вы можете хотеть иметь много различных серверов mysqld на одной машине. Вы можете, например, выполнять новую версию MySQL для тестирования вместе со старой версией, которая находится в постоянном рабочем использовании. Другой случай: Вы хотите давать различным пользователям доступ к разным серверам mysqld, которыми они будут управлять самостоятельно.

Один способ получить новый сервер: запустить его с другим сокетом и портом следующим образом:

shell> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock
shell> MYSQL_TCP_PORT=3307
shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT
shell> scripts/mysql_install_db
shell> bin/safe_mysqld &

Приложение системных переменных включает список других системных переменных, которые Вы можете использовать, чтобы воздействовать на mysqld. Подробности в разделе "Приложение 2. Переменные окружения ".

Если Вы должны делать это более постоянно, Вы должны создать файл опций для каждого сервера. Подробности в разделе "4.1.2 Файлы опций my.cnf". В Вашем скрипте запуска, который будет выполнен при начальной загрузке (mysql.server?), Вы должны определить для обоих серверов:

safe_mysqld --default-file=path-to-option-file

По крайней мере следующие параметры должны быть различны на серверах:

port=#
socket=path
pid-file=path

Следующие параметры должны быть различны, если они используются:

log=path
log-bin=path
log-update=path
log-isam=path
bdb-logdir=path

Если Вы хотите получить большую эффективность, Вы можете также определять:

tmpdir=path
bdb-tmpdir=path

Если Вы устанавливаете двоичные версии MySQL (файлы .tar) и запускаете их с ./bin/safe_mysqld, то обычно придется менять только опции socket и port в скрипте safe_mysqld.

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

Имеются обстоятельства, когда Вы могли бы хотеть выполнять много серверов на одной и той же машине. Например, Вы могли бы проверять новый выпуск MySQL при оставлении Вашей существующей безмятежной установки в рабочем состоянии.

Если Вы хотите выполнять много серверов, самый простой путь состоит в том, чтобы компилировать их с различными портами TCP/IP и файлами сокетов так, что они оба не слушают тот же самый порт TCP/IP или файл сокета.

Предположим, что существующий сервер конфигурирован для заданного по умолчанию номера порта и файла сокета. Теперь конфигурируйте новый сервер командой выбора конфигурации configure:

shell> ./configure --with-tcp-port=port_number \
                       --with-unix-socket-path=file_name \
                       --prefix=/usr/local/mysql-3.22.9

Здесь port_number и file_name должны отличаться от заданных по умолчанию номера порта и имени пути файла сокета, значение --prefix должно определить другой каталог установки, а не тот, в котором размещена существующая установка MySQL.

Вы можете проверять сокет, используемый любым в настоящее время выполняющимся сервером MySQL, командой:

shell> mysqladmin -h hostname --port=port_number variables

Обратите внимание, что, если Вы определяете localhost как имя хоста по умолчанию, mysqladmin будет использовать Unix-сокеты вместо протокола TCP/IP.

Если Вы имеете сервер MySQL, работающий на уже занятом порте, Вы получите список из наиболее важных переменных настройки в MySQL, включая имя сокета.

Вы не должны перекомпилировать сервер MySQL только, чтобы запустить его с другого порта и сокета. Вы можете изменять порт и сокет, который нужно использовать, определяя их во время выполнения как параметры для safe_mysqld:

shell> /path/to/safe_mysqld --socket=file_name --port=port_number

mysqld_multi может также брать safe_mysqld (или mysqld) как параметр и передавать параметры из файла конфигурации safe_mysqld и в дополнение mysqld.

Если Вы выполняете новый сервер в том же самом каталоге баз данных, что и старый с включенным протоколированием, Вы должны также определить имя журналов в safe_mysqld с помощью опций --log, --log-update или --log-slow-queries. Иначе оба сервера могут попробовать вести протокол в одни и те же файлы!

ПРЕДУПРЕЖДЕНИЕ: Обычно Вы никогда не должны иметь двух серверов, которые модифицируют данные в той же самой базе данных! Если Ваша ОС не поддерживает полноценную блокировку системы, это легко может привести к ОЧЕНЬ неприятным неожиданностям!

Если Вы хотите использовать другой каталог баз данных для второго сервера, Вы можете использовать опцию --datadir=path при вызове safe_mysqld.

ОБРАТИТЕ ВНИМАНИЕ также, что запуск нескольких серверов MySQL (mysqlds) на различных машинах и разрешение им обращаться в один каталог данных через NFS вообще ПЛОХАЯ ИДЕЯ! Проблема состоит в том, что NFS станет узким местом с низким быстродействием. Этот сервис не предполагается для такого использования. К тому же Вам придется придумывать решение, как надежно удостовериться, что два или больше процессов mysqld не сталкиваются друг с другом. В настоящее время не имеется никакой платформы, которая была бы 100% надежной, чтобы делать блокировку файла (обычно lockd daemon) в любой ситуации. Все же имелся бы еще один возможный риск с NFS: этот сервис сделал бы работу для lockd еще более сложной. Так что забудьте о таких развлечениях! Рабочее решение состоит в том, чтобы иметь один компьютер с операционной системой, которая эффективно обрабатывает потоки, и иметь в нем несколько CPU и памяти побольше.

Когда Вы хотите соединиться с сервером MySQL, который работает с другим портом, чем порт, который компилируется в Вашего клиента, Вы можете использовать один из следующих методов:

  • Запустите клиента с опцией --host 'hostname' --port=port_number, чтобы связаться по TCP/IP, или с опцией [--host localhost] --socket=file_name для связи через Unix-сокет.
  • В Ваших программах на C или Perl Вы можете задавать порт или параметры сокета при соединении с сервером MySQL.
  • Если Вы используете модуль Perl DBD::mysql, Вы можете читать все параметры прямо из файлов опций MySQL.
    $dsn = "DBI:mysql:test;mysql_read_default_group=client;mysql_read_default_file=/usr/local/mysql/data/my.cnf"
    $dbh = DBI->connect($dsn, $user, $password);
    
  • Установите системные переменные MYSQL_UNIX_PORT и MYSQL_TCP_PORT так, чтобы указать на Unix-сокет и порт TCP/IP прежде, чем Вы запускаете вашу клиентуру. Если Вы обычно используете специфический сокет или порт, Вы должны поместить команды, чтобы установить эти системные переменные в Вашем файле .login.
  • Определите заданные по умолчанию сокет и порт TCP/IP в файле .my.cnf в Вашем основном каталоге.

Поиск

 

Найди своих коллег!