Запуск MySQL от обычного пользователя. Запуск mysql
Запуск MySQL на Windows NT, 2000 или XP
Для того чтобы MySQL работал с TCP/IP на Windows NT 4, необходимо установить Service Pack 3 (или выше)!
Обычно MySQL устанавливается на Windows NT/2000/XP как сервис. В случае, если сервер уже работает, необходимо сначала завершить его работу при помощи следующей команды:
C:\mysql\bin> mysqladmin -u root shutdownЭто вызов программы администрирования MySQL от имени пользователя root, который по умолчанию соответствует пользователю Administrator в системе привилегий MySQL. Обратите внимание: система привилегий MySQL абсолютно независима от каких-либо аккаунтов пользователей в системе Windows.
Теперь установим сервис сервера:
C:\mysql\bin> mysqld-max-nt --installЕсли требуются какие-либо опции, они должны быть определены, как «Start parameters» в инструментальной программе Services системы Windows перед запуском сервиса MySQL.
Доступ к инструментальной программе Services (Windows Service Control Manager) можно получить в Control Panel (в Administrative Tools в Windows 2000). Рекомендуется закрывать Services при выполнении операций --instal или --remove - это предотвратит возникновение некоторых ошибок неизвестной природы.
За информацией о том, какие бинарные файлы следует использовать для запуска сервера, обращайтесь к разделу Подготовка конфигурации MySQL для Windows.
Отметим, что начиная с версии 3.23.44 MySQL имеется возможность альтернативной установки сервиса - в режиме Manual (если вам не требуется автоматический запуск сервиса при загрузке операционной системы):
C:\mysql\bin> mysqld-max-nt --install-manualСервис устанавливается под именем MySQL. Сразу же после установки он может быть запущен при помощи инструментальной программы Services или командой NET START MySQL.
После запуска работа mysqld-max-nt может быть завершена при помощи mysqladmin из инструментальной программы Services или командой NET STOP MySQL.
Если MySQL функционирует в качестве сервиса, то операционная система автоматически завершает работу MySQL-сервиса при программном завершении работы компьютера. В версиях MySQL < 3.23.47 Windows ожидает всего лишь несколько секунд завершения остановки, после чего уничтожает процесс сервера базы данных, если превышено время ожидания (что может быть потенциальной причиной возникновения проблем). Например, при следующем запуске обработчик таблицы InnoDB должен выполнять восстановление после аварийного завершения. Начиная с MySQL версии 3.23.48, Windows ожидает завершения процесса MySQL-сервера дольше. Если вы считаете, что этого времени для вашей версии недостаточно, безопаснее запускать MySQL-сервер не как сервис, а из командной строки и завершать его работу командой mysqladmin shutdown.
В Windows NT (но не в Windows 2000/XP) существует проблема, которая заключается в том, что система по умолчанию ожидает окончания работы сервиса только 20 секунд, после чего уничтожает процесс сервиса. Это заданное по умолчанию значение можно увеличить с помощью редактора Registry (Реестра), запустив \winnt\system32\regedt32.exe и отредактировав значение WaitToKillServiceTimeout в записи HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control. Следует задать другое, большее значение в миллисекундах, например 120000, чтобы Windows NT ожидала 120 секунд.
Необходимо заметить, что при работе в качестве сервиса mysqld-max-nt не имеет доступа к консоли, а следовательно, невозможно увидеть его сообщения. Информация об ошибках находится в файле c:\mysql\data\mysql.err.
Если вы столкнулись с проблемами установки mysqld-max-nt в качестве сервиса, попробуйте запустить его с указанием полного пути:
C:\> C:\mysql\bin\mysqld-max-nt --installЕсли это не поможет, можно принудить mysqld-max-nt стартовать соответствующим образом, исправив путь в Registry!
Если вы не хотите запускать mysqld-max-nt в качестве сервиса, его можно запустить следующим образом:
C:\> C:\mysql\bin\mysqld-max-nt --standalone или C:\> C:\mysql\bin\mysqld --standalone --debugВ случае последнего варианта вы получите отладочную информацию в C:\mysqld.trace. Создание трассировочных файлов.
mysqlru.com
Запуск MySQL от обычного пользователя
Сервер mysqld может запускаться и работать от любого пользователя. Чтобы настроить mysqld для работы под Unix-пользователем user_name, необходимо выполнить следующие действия:
-
Если сервер работает, остановите его (используйте mysqladmin shutdown).
-
Измените каталоги и файлы баз данных так, чтобы user_name имел привилегии для чтения и записи файлов в этих каталогах (возможно, это нужно будет делать из Unix-аккаунта root):
shell> chown -R user_name /path/to/mysql/datadirЕсли среди каталогов или файлов в каталоге данных MySQL присутствуют символические ссылки, то нужно будет также перейти по этим ссылкам и изменить каталоги и файлы, на которые они указывают. chown -R может не отработать символических ссылок.
-
Запустите сервер из аккаунта user_name или, если у вас MySQL 3.22 и выше, запустите mysqld из Unix-аккаунта root и используйте опцию --user=user_name. mysqld переключится на выполнение в контексте Unix-пользователя user_name до того, как начнет обслуживать запросы на соединение.
-
Чтобы запускать сервер от имени данного пользователя автоматически в ходе загрузки системы, добавьте строку user, указывающую имя пользователя, в группе [mysqld] файла опций /etc/my.cnf или файла опций my.cnf из каталога данных сервера. Например:
К этому моменту процесс mysqld должен без помех работать под Unix-пользователем user_name. Однако содержимое таблиц привилегий не изменяется. По умолчанию (сразу после выполнения скрипта инсталляции таблиц привилегий mysql_install_db) MySQL-пользователь root является единственным пользователем с правами на доступ к базе данных mysql, а также на создание и удаление баз данных. Если вы не меняли этих полномочий, они по-прежнему действительны. То, что вы вошли в систему как Unix-пользователь, отличный от root, не может вам помешать получить доступ к MySQL в качестве MySQL-пользователя root; просто задайте клиентской программе опцию -u root.
Отметим, что работа с MySQL в качестве MySQL-пользователя root посредством указания -u root в командной строке не имеет ничего общего с выполнением MySQL под Unix-пользователем root, или вообще под каким бы то ни было Unix-пользователем. Привилегии доступа и имена пользователей MySQL никак не связаны с именами Unix-пользователей. Единственная связь с именами Unix-пользователей заключается в том, что если при запуске клиентской программы не задана опция -u, то клиент попытается соединиться, используя в качестве имени MySQL-пользователя имя Unix-аккаунта.
Если Unix-сервер не слишком хорошо защищен или не нуждается в повышенных мерах безопасности, следует как минимум установить в таблицах привилегий пароль для MySQL-пользователя root. В противном случае любой пользователь с аккаунтом на данной машине сможет запустить mysql -u root db_name и делать в MySQL все, что ему заблагорассудится.
mysqlru.com
2.4.3 Автоматический запуск и остановка MySQL
2.4.3. Автоматический запуск и остановка MySQL
Скрипты mysql.server и safe_mysqld могут применяться для автоматического запуска сервера во время загрузки операционной системы. Скрипт mysql.server можно также использовать для остановки сервера.
Чтобы применять скрипт mysql.server для запуска или остановки сервера, его следует вызывать с аргументами start или stop соответственно:
shell> mysql.server start shell> mysql.server stopmysql.server можно найти в подкаталоге share/mysql инсталляционного каталога MySQL или в каталоге support-files набора исходных кодов MySQL.
Перед тем как скрипт mysql.server запустит сервер, он изменяет данный каталог на инсталляционный каталог MySQL, затем вызывает safe_mysqld. Возможно, понадобится отредактировать скрипт mysql.server, если бинарный дистрибутив установлен вами не в стандартном месте. Модифицируйте его, указав cd в соответствующий каталог перед тем, как он запустит safe_mysqld. Если вы хотите запустить сервер от определенного пользователя, то добавьте соответствующую строку user к файлу /etc/my.cnf как показано далее в этом разделе.
mysql.server stop останавливает сервер путем посылки ему сигнала. Можно остановить сервер вручную - при помощи команды mysqladmin shutdown.
Вам следует добавить эти команды запуска и остановки в соответствующее место в файлах /etc/rc*, если вы хотите автоматически запускать MySQL на вашем сервере.
На современных поставках Linux, достаточно скопировать файл mysql.server в каталог /etc/init.d (или /etc/rc.d/init.d на более старших системах Red Hat). После этого, выполните такую команду, чтобы включить автоматический запуск MySQL при загрузке системы:
shell> chkconfig --add mysql.serverВ качестве альтернативы, в некоторых ОС также используются /etc/rc.local или /etc/init.d/boot.local для запуска дополнительных сервисов при загрузке. Для того, чтобы MySQL стартовал с использованием этого метода, вы можете добавить нечто вроде этого к указанным файлам:
Можно также добавить опции для скрипта mysql.server в глобальный файл /etc/my.cnf. Типовой файл /etc/my.cnf может выглядеть следующим образом:
[mysqld] datadir=/usr/local/mysql/var socket=/var/tmp/mysql.sock port=3306 user=mysql [mysql_server] basedir=/usr/local/mysqlСкрипт mysql.server понимает следующие опции: datadir, basedir и pid-file.
В таблице представлены группы опций, которые каждый из перечисленных запускающих скриптов читает из файлов опций:
Скрипт | Группы опций |
mysqld | mysqld и server |
mysql.server | mysql.server, mysqld, и server |
safe_mysqld | mysql.server, mysqld, и server |
See Раздел 4.1.2, «Файлы параметров my.cnf».
Запуск СУБД MySQL в Ubuntu Server после падения и анализ логов демона mysqld
Если у вас начали стихийно отваливаться сайты на сервере, сообщая о проблемах с соединением с базой, то вместо того, чтобы впадать в панику нужно идти проверять логи.
В Ubuntu логи ошибок MySQL хранятся в файле /var/log/mysql/error.log. Но открывать его текстовым редактором на удалённой машине — опасно. Если у вас не настроена ротация логов, то файл может весить сотни мегабайт. Но даже если и настроена, то при падении MySQL мог основательно нафлудить в файл (и он, как следствие, всё равно может быть немаленьким). Поэтому изучать свежие логи будем с помощью утилиты tail, которая выводит несколько (по умолчанию, 10) последних строк указанного файла.
Вот так можно вывести последние 100 строк лога:
sudo tail -n 100 /var/log/mysql/error.log
Формат лога примерно такой:
120711 8:56:47 [ERROR] /usr/sbin/mysqld: Table './blog/watchdog' is marked as crashed and should be repaired
О составе строки по порядку:
- Дата в формате YYMMDD, в данном случае, соответственно, 11 июля 2012 года.
- Время.
- Статус события. ERROR — критическая ошибка, Warning — предупреждение.
- Далее идёт собственно описание проблемы, в рамках которого указывается проблемная база и таблица в ней. В рассмотренном примере база blog и таблица watchdog.
Как вы понимаете, чтоб понять, почему база рухнула и узнать о конкретных проблемах нам нужны именно критические ошибки. Поэтому мы можем составить простейший конвейер, отфильтровав с помощью команды grep только те строки, где содержатся error`ы:
sudo tail -n 1000 /var/log/mysql/error.log | grep ERROR
И вот теперь мы уже увидим только самое интересное. Например:
120711 8:56:47 [ERROR] /usr/sbin/mysqld: Table './blog/watchdog' is marked as crashed and should be repaired120711 9:28:43 [ERROR] /usr/sbin/mysqld: Disk is full writing './gssport/cache_menu.MYD' (Errcode: 28).
Первая показанная ошибка нам не иллюзорно намекает, что место на диске закончилось. Вторая ошибка говорит о том, что MyISAM таблица поломалась.
Дальнейшие действия просты: останавливаем СУБД, освобождаем место на диске, запускаем СУБД в безопасном режиме и следим за логами.
Останавливаем СУБД:sudo service mysql stop
Чистим диск.
Запускаем СУБД в безопасном режиме:sudo mysqld_safe
Следим за логом.
Для того, чтобы следить в реальном времени, пригодится уже известная нам команда с ключом -f:
sudo tail -f /var/log/mysql/error.log
Вы увидите в терминале последние 10 строк файла, которые будут обновляться в реальном времени по мере поступления новых данных в файл.
Поломанная таблица, по идеи, должна будет восстановиться автоматически, о чём будут свидетельствовать примерно такие записи в логе:
120711 8:56:47 [ERROR] /usr/sbin/mysqld: Table './blog/watchdog' is marked as crashed and should be repaired120711 8:56:47 [Warning] Checking table: './blog/watchdog'120711 8:56:47 [Warning] Recovering table: './blog/watchdog'
Холодный старт MySQL может занимать несколько минут, если у вас много больших баз и не быстрый сервер, поэтому терпеливо понаблюдав за логом, проверьте потом: нормально ли заработали ваши сайты или нет?
Если всё ок, то останавливайте mysqld_safe и запускайте демона штатным образом:sudo service mysql start
Ну, а, в случае иных проблем, вы найдёте в логе какие-то более экзотические error`ы — отправляйтесь с ними в Google :-)
aboutubuntu.ru
Проблемы при запуске сервера MySQL
Если вы собираетесь использовать таблицы, поддерживающие транзакции (InnoDB, BDB), следует прежде всего создать файл my.cnf и установить опции запуска для тех типов таблиц, с которыми планируется работать. Типы таблиц MySQL.
В общем случае сервер mysqld запускается одним из следующих способов:
При своем запуске демон mysqld изменяет свой каталог на каталог данных (datadir). В нем он ожидает найти журнальные файлы, файлы pid (ID процессов) и собственно базы данных.
Местоположение каталога данных жестко устанавливается при компиляции дистрибутива. Однако если mysqld ожидает найти каталог данных где-либо в другом месте, а не там, где он действительно расположен в вашей системе, то демон mysqld не будет работать правильно. Если есть проблемы с неправильными путями, то, вызывая mysqld с опцией --help, вы можете найти информацию о том, что разрешают опции mysqld и какие установки путей приняты по умолчанию. Можно переопределить установки по умолчанию указанием правильных имен путей как аргументов mysqld в командной строке (эти опции также можно использовать с safe_mysqld).
Обычно требуется указывать mysqld только каталог, в котором устанавливается MySQL. Это можно сделать с помощью опции --basedir. Можно также использовать --help для проверки эффекта от изменения опций путей (учтите, что --help должна быть последней опцией в команде mysqld). Например:
shell> EXECDIR/mysqld --basedir=/usr/local --helpПосле определения требуемых установок путей запускайте сервер без опции --help.
Какой бы метод вы ни использовали для запуска сервера, если его неудачный запуск завершается корректно, то проверьте журнальный файл, чтобы узнать, почему запуск происходит неудачно. Журнальные файлы находятся в каталоге данных (обычно /usr/local/mysql/data для бинарного дистрибутива, /usr/local/var для дистрибутива исходного кода и \mysql\data\mysql.err под Windows). В каталоге данных следует искать файлы с именами в виде host_name.err и host_name.log, где host_name - имя вашего серверного хоста. Затем проверьте последние несколько строк этих файлов:
shell> tail host_name.err shell> tail host_name.logВ журнальном файле нужно искать что-нибудь похожее на следующее:
000729 14:50:10 bdb: Recovery function for LSN 1 27595 failed 000729 14:50:10 bdb: warning: ./test/t1.db: No such file or directory 000729 14:50:10 Can't init databasesЭто означает, что вы не запустили mysqld с --bdb-no-recover и база данных Berkeley DB нашла что-то ошибочное в своих журнальных файлах при попытке восстановить ваши базы данных. Чтобы иметь возможность продолжить, необходимо переместить старый журнальный файл Berkeley DB из каталога баз данных в некоторое другое место, где позже можно будет изучить его. Журнальные файлы имеют имена log.0000000001 и т.д.; номер возрастает при каждом запуске.
Если вы запускаете mysqld работает с поддержкой таблиц BDB и mysqld при старте выводит дамп оперативной памяти (coredump), то причиной этого это могут быть какие-либо проблемы с журналом восстановления BDB. В этом случае можно попробовать запуск mysqld с --bdb-no-recover. Если это помогает, то следует удалить все файлы log.* из каталога данных и попробовать запустить mysqld опять.
Если выдается приведенная ниже ошибка, то это означает, что некоторая другая программа (или другой сервер mysqld) уже использует данный TCP/IP порт или сокет, на которых mysqld пытается слушать:
Can't start server: Bind on TCP/IP port: Address already in use или Can't start server : Bind on unix socket...Чтобы убедиться, что другого работающего сервера mysqld нет, используйте ps. Если другой работающий сервер не найден, то можно попробовать выполнить команду telnet your-host-name tcp-ip-port-number и нажать пару раз клавишу «Enter». Если вы не получаете сообщения об ошибке вроде следующего telnet: Unable to connect to remote host: Connection refused, значит, что порт TCP/IP порт, который mysqld пытается использовать, уже занят другой программой. Проблемы при запуске mysql_install_db и раздел Запуск нескольких серверов MySQL на одном компьютере.
Если mysqld в настоящее время работает, то можно найти используемые им установки путей при помощи следующей команды:
shell> mysqladmin variables или shell> mysqladmin -h 'your-host-name' variablesЕсли при запуске mysqld вы получили ошибку Errcode 13, что значит Permission denied, это означает, что у вас не было прав читать/создавать файлы в базе данных MySQL или в журнальном каталоге. В таком случае вам следует либо запускать mysqld как пользователь root, либо изменить права доступа к упомянутым файлам и каталогам, чтобы иметь права использовать их.
Если safe_mysqld запускает сервер, но вы не можете подключиться к нему, то следует убедиться, что в /etc/hosts есть запись, которая выглядит примерно так:
127.0.0.1 localhostЭта проблема возникает только в системах, не имеющих рабочей библиотеки потоков, и для которых MySQL следует конфигурировать для использования потоков MIT-pthreads.
Если вы не можете запустить mysqld, то можно попробовать создать трассировочный файл, чтобы обнаружить данную проблему. Создание трассировочных файлов.
При использовании таблиц InnoDB следует указывать опции запуска, специфические для InnoDB. Параметры запуска InnoDB.
При использовании таблиц BDB (Berkeley DB) необходимо хорошо знать различные специфические для BDB опции запуска. Параметры запуска BDB.
mysqlru.com
Одновременный запуск MySQL 4 и MySQL 5 [АйТи бубен]
Установить из портов MySQL сервер версии 5.1.36. При этом обеспечить полную работоспособность первого сервера MySQL 4.0.27. И возможность обновления программа из портов (т.е. вариант скачать исходники с сайта и установить не подходит).
P.S. Как выяснилось - из портов две версии MySQL поставить нельзя. Ниже показана установка второго сервера MySQL из уже скомпилированных файлов (скаченных с мастер- сайта).
Пробуем из портов ставить
# /usr/ports/databases/mysql51-server # make fetch ===> mysql-server-5.1.36 cannot install: MySQL versions mismatch: mysql40-client is installed and wanted version is mysql51-client. *** Error code 1 Stop in /usr/ports/databases/mysql51-server.При попытки скачать исходники командой make fetch - сразу выдало сообщение о конфликте версий MySQL. Придеться качать вручную с сайта.
# make master-sites ftp://ftp.fi.muni.cz/pub/mysql/Downloads/MySQL-5.1/ http://mysql.mirrors.cybercity.dk/Downloads/MySQL-5.1/ ...Выбираем из списка сайт, заходим на него. Для каждой операционной системы там уже выложены скомпилированные бинарные файлы. Забираем для своей ОС.
# fetch ftp://ftp.fi.muni.cz/pub/mysql/Downloads/MySQL-5.1/mysql-5.1.36-freebsd7.0-i386.tar.gzЗа основу дальнейшей установки взята англоязычная информация с сайта Installing MySQL4 and MySQL5 on a single FreeBSD 6.2 Server
Распаковываем бинарные файлы и для удобства дальнейшей работы создаем ссылку на распакованный каталог
# cd /usr/local # gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf - # ln -s full-path-to-mysql-VERSION-OS mysql5Создаем пользователя и группу для запуска mysql5
# pw groupadd mysql5 # pw useradd -n mysql5 -c "" -g mysql5 -d /nonexistent -s /usr/sbin/nologinУстанавливаем права на директорию mysql5.
# cd /usr/local/mysql5 # chown -R root:mysql5 .Выполним скрипт создания системных таблиц MySQL сервера.
# scripts/mysql_install_db --help ... --user=user_name The login username to use for running mysqld. Files and directories created by mysqld will be owned by this user. You must be root to use this option. By default mysqld runs using your current login name and files and directories that it creates will be owned by you. ... # scripts/mysql_install_db --user=mysql5Копируем скрипт запуска и редактируем в нем пути запуска MySQL
# cp /usr/local/mysql5/support-files/mysql.server /usr/local/etc/rc.d/mysql5.server.sh # ee /usr/local/etc/rc.d/mysql5.server.sh Change “basedir=” to “basedir=/usr/local/mysql5″ Change “datadir=” to “datadir=/usr/local/mysql5/data” Change “pid_file=” to “pid_file=/var/run/mysql5/mysql5.pid” Change “server_pid_file=” to “server_pid_file=/var/run/mysql5/mysql5.pid” Change “user=mysql” to “user=mysql5″Создаем и настраиваем конфигурационный файл my.cnf
# cp /usr/local/mysql5/support-files/my-medium.cnf /usr/local/mysql5/my.cnf # ee /usr/local/mysql5/my.cnf Add a variable at the top of the [mysqld] section – “user = mysql5″ Change the “port = 3306″ variables to “port = 3308″ Change the “socket = /tmp/mysql.sock” variables to “socket = /tmp/mysql5.sock” Добавим строки нужной нам кодировки MySQL сервера в раздел [mysqld] default-character-set = utf8 character_set_server = utf8 collation_server = utf8_unicode_ciCreate a run directory for the MySQL 5 process and set permissions on it.
# mkdir /var/run/mysql5 # chown -R mysql5:mysql5 /var/run/mysql5# Запускаем MySQl5.
# /usr/local/etc/rc.d/mysql5.server.sh startПроверяем появился ли новый процесс на порту 3308 и старый на порту 3306
# lsof -i:3308,3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 782 mysql 3u IPv4 0xc4560910 0t0 TCP *:3306 (LISTEN) ... mysqld 47353 mysql5 13u IPv4 0xc77fc3a0 0t0 TCP *:3308 (LISTEN) ...Команды подключения для серверов из командной строки (подразумевается что пароль root для обеих БД уже установлен)
MySQL4: Connect to MySQL 4.0.27 # /usr/local/bin/mysql -u root -p -P 3306 -S /tmp/mysql.sock MySQL5: Connect to MySQL 5.1.36 # /usr/local/mysql5/bin/mysql -u root -p -P 3308 -S /tmp/mysql5.sockзагрузка...
wiki.dieg.info