MySQL - установка и базовая настройка

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:2dd4e905f9a6586e32851bec208da43d' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><img alt=\"MySQL\" width=\"140\" height=\"102\" src=\"http://muff.kiev.ua/files/mysql-logo.jpg\" /></p>\n<p>Пора заняться установкой MySQL-сервера, поскольку много чего будем хранить именно в этой базе данных.</p>\n<p>Список необходимых опций сборки добавим в /etc/make.conf:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># Путь к коллекции портов<br />\n PORTSDIR?= /usr/ports<br />\n # Версия MySQL сервера<br />\n DEFAULT_MYSQL_VER=55</p>\n<p># Oпции для сборки клиента<br />\n .if ${.CURDIR} == ${PORTSDIR}/databases/mysql55-client</p>\n<p># Кодировка клиента по умолчанию.<br />\n WITH_CHARSET=cp1251</p>\n<p># Коллэйшн или сравнение.<br />\n WITH_COLLATION=cp1251_bin</p>\n<p># В общем, если эта опция действительно хоть что-то<br />\n # оптимизирует, то странно что она по дефолту не включена,<br />\n # а предлагается опционально.<br />\n BUILD_OPTIMIZED=yes</p>\n<p>.endif</p>\n<p># Oпции для сборки сервера<br />\n .if ${.CURDIR} == ${PORTSDIR}/databases/mysql55-server</p>\n<p># Кодировка сервера по умолчанию.<br />\n WITH_CHARSET=cp1251</p>\n<p># Какие кодировки компилить еще.<br />\n WITH_XCHARSET=all</p>\n<p># Кодировка коллэйшн.<br />\n WITH_COLLATION=cp1251_bin</p>\n<p># Вкомпилить ли SSL. Есть смысл, если к MySQL-серверу<br />\n # разрешены коннекты откуда либо, кроме как с локалхоста.<br />\n WITHOUT_OPENSSL=yes</p>\n<p># Если следующую опцию поставить в yes, то MySQL будет работать<br />\n # в несколько потоков (только для i386)<br />\n WITH_LINUXTHREADS=yes</p>\n<p># Тоже че-то связано с многопоточностью сервера.<br />\n # Чего не знаем - нетрогаем.<br />\n #WITH_PROC_SCOPE_PTH=yes</p>\n<p># Как и с клиентом, типа &quot;оптимизируемся&quot;.<br />\n BUILD_OPTIMIZED=yes<br />\n # Сборка статического варианта mysql демона. Я так понимаю, что<br />\n # статический демон не станет подгружать дополнительные<br />\n # библиотеки, потому что уже будет собран с ними же. Но где<br />\n # тогда здесь выигрыш в производительности? Хоть в случае с<br />\n # динамической версией - будут тратиться определенные ресурсы<br />\n # на подгрузку библиотек; хоть в случае со статиком - он будет<br />\n # эти библиотеки постоянно удерживать в памяти...<br />\n # Эту опцию нельзя применять если у Вас WITH_OPENSSL=yes<br />\n BUILD_STATIC=yes<br />\n # Поддержка INNODB таблиц. Кому не надо, можете отключить.<br />\n WITH_INNODB=yes</p>\n<p># Следущая опция - это для тех, кто использует кластера MySQL.<br />\n WITHOUT_NDB=yes</p>\n<p>.endif</p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Приступаем непосредственно к инсталляции серверной части (клиентскую часть подтянет автоматически).</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># <strong>cd /usr/ports/databases/mysql55-server<br />\n </strong># <strong>make install clean<br />\n </strong># <strong>rehash</strong></td>\n</tr>\n</tbody>\n</table>\n<p>Добавляем в /etc/rc.conf строку о необходимости запуска MySQL-сервера:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>echo \'# MySQL\' &gt;&gt; /etc/rc.conf</strong><br />\n # <strong>echo \'mysql_enable=&quot;YES&quot;\' &gt;&gt; /etc/rc.conf</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>Запускаем сервер</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># <strong>sh /usr/local/etc/rc.d/mysql-server start</strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Меняем пароль для пользователя root в MySQL (хотя, обычно, завожу пользователя с полными привилегиями, а запись пользователя root удаляю полностью):</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># <strong>mysqladmin -u root password <span style=\"color: #ff0000\">new_passwd_here</span></strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Теперь следует отредактировать конфигурационный файл mysql, который называется my.cnf. Положить его можно в любую из этих папок: /var/db/mysql/, /etc/, /usr/local/etc/. MySQL при запуске проверит его наличие во всех этих каталогах. Если конфигурациооный файл отсутствует &ndash; можно скопировать доступный пример и при необходимости отредактировать его (доступны примеры для нагруженного сервера, для сервера со средней нагрузкой и для ненагруженного сервера)</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># <strong>cp /usr/local/share/mysql/my-medium.cnf /var/db/mysql/my.cnf</strong></td>\n</tr>\n</tbody>\n</table>\n<p>Для решения проблем с кодировкой кирилицы,&nbsp;добавим в секцию [client]:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>default-character-set=cp1251</td>\n</tr>\n</tbody>\n</table>\n<p>И, соответственно, в секцию [mysqld]:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>character-set-server = cp1251<br />\n collation-server = cp1251_general_ci<br />\n init-connect=&quot;SET NAMES cp1251&quot;<br />\n skip-character-set-client-handshake<br />\n skip-name-resolve</td>\n</tr>\n</tbody>\n</table>\n<p>Также, для удобства, можете изменить параметры логгирования. Для этого в секцию [mysqld] файла /var/db/mysql/my.cnf добавляем&nbsp;строку&nbsp;log=/var/log/mysql.log</p>\n<p>Также необходимо создать сам файл логов:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p>#<strong> touch /var/log/mysql.log</strong><br />\n # <strong>chown mysql:mysql /var/log/mysql.log</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>Перегружаем MySQL для того, чтобы новые настройки вступили в силу:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># <strong>sh /usr/local/etc/rc.d/mysql-server restart</strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Кстати... Если уж возьметесь писать логи MySQL - <span style=\"color: #ff0000\"><strong>ОБЯЗАТЕЛЬНО</strong></span> настройте <a href=\"http://muff.kiev.ua/node/65\">ротацию логов</a>,&nbsp;а не то лог-файл очень скоро разрастется до неимоверных размеров (вплоть до того, что не останется свободного места на разделе. Например, будем архивировать лог раз в неделю. Для этого в /etc/newsyslog.conf необходимо добавить следующую строку:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>/var/log/mysql.log&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mysql:mysql&nbsp;&nbsp;&nbsp;&nbsp; 600&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp; $W6D0&nbsp; &nbsp;JB&nbsp;&nbsp;&nbsp;&nbsp; /var/db/mysql/<span style=\"color: #ff0000\">hostname.pid</span></td>\n</tr>\n</tbody>\n</table>\n<p>Обратите внимание: pid-файл будет уникальный (зависит от от имени сервера).</p>\n<p>Дальше создадим пользователя,&nbsp;с правами суперпользователя в БД MySQL:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>GRANT ALL PRIVILEGES ON *.* TO \'<span style=\"color: #ff0000\">username</span>\'@\'localhost\' IDENTIFIED BY \'<span style=\"color: #ff0000\">user_pass</span>\' WITH GRANT OPTION;</td>\n</tr>\n</tbody>\n</table>\n<p>Теперь еще осталось удалить остальных пользователей, которых mysql создает по-умолчанию.</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p><strong># mysql -u <span style=\"color: #ff0000\">username</span> -p</strong><br />\n Enter password:<br />\n Welcome to the MySQL monitor. Commands end with ; or \\g.<br />\n Your MySQL connection id is 2<br />\n Server version: 5.0.84-log FreeBSD port: mysql-server-5.0.84</p>\n<p>Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement.</p>\n<p><strong>mysql&gt;&nbsp;USE mysql;</strong><br />\n Reading table information for completion of table and column names<br />\n You can turn off this feature to get a quicker startup with -A</p>\n<p>Database changed<br />\n <strong>mysql&gt; DELETE FROM user WHERE NOT user=\'<span style=\"color: #ff0000\">username</span>\';<br />\n </strong>Query OK, 4 rows affected (0.00 sec)</p>\n<p><strong>mysql&gt; quit</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>Базовая настройка MySQL-сервера завершена.<br />\n&nbsp;</p>\n', created = 1767333159, expire = 1767419559, headers = '', serialized = 0 WHERE cid = '2:2dd4e905f9a6586e32851bec208da43d' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767333159, expire = 1767419559, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767333159, expire = 1767419559, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

MySQL

Пора заняться установкой MySQL-сервера, поскольку много чего будем хранить именно в этой базе данных.

Список необходимых опций сборки добавим в /etc/make.conf:

# Путь к коллекции портов
PORTSDIR?= /usr/ports
# Версия MySQL сервера
DEFAULT_MYSQL_VER=55

# Oпции для сборки клиента
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql55-client

# Кодировка клиента по умолчанию.
WITH_CHARSET=cp1251

# Коллэйшн или сравнение.
WITH_COLLATION=cp1251_bin

# В общем, если эта опция действительно хоть что-то
# оптимизирует, то странно что она по дефолту не включена,
# а предлагается опционально.
BUILD_OPTIMIZED=yes

.endif

# Oпции для сборки сервера
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql55-server

# Кодировка сервера по умолчанию.
WITH_CHARSET=cp1251

# Какие кодировки компилить еще.
WITH_XCHARSET=all

# Кодировка коллэйшн.
WITH_COLLATION=cp1251_bin

# Вкомпилить ли SSL. Есть смысл, если к MySQL-серверу
# разрешены коннекты откуда либо, кроме как с локалхоста.
WITHOUT_OPENSSL=yes

# Если следующую опцию поставить в yes, то MySQL будет работать
# в несколько потоков (только для i386)
WITH_LINUXTHREADS=yes

# Тоже че-то связано с многопоточностью сервера.
# Чего не знаем - нетрогаем.
#WITH_PROC_SCOPE_PTH=yes

# Как и с клиентом, типа "оптимизируемся".
BUILD_OPTIMIZED=yes
# Сборка статического варианта mysql демона. Я так понимаю, что
# статический демон не станет подгружать дополнительные
# библиотеки, потому что уже будет собран с ними же. Но где
# тогда здесь выигрыш в производительности? Хоть в случае с
# динамической версией - будут тратиться определенные ресурсы
# на подгрузку библиотек; хоть в случае со статиком - он будет
# эти библиотеки постоянно удерживать в памяти...
# Эту опцию нельзя применять если у Вас WITH_OPENSSL=yes
BUILD_STATIC=yes
# Поддержка INNODB таблиц. Кому не надо, можете отключить.
WITH_INNODB=yes

# Следущая опция - это для тех, кто использует кластера MySQL.
WITHOUT_NDB=yes

.endif

Приступаем непосредственно к инсталляции серверной части (клиентскую часть подтянет автоматически).

# cd /usr/ports/databases/mysql55-server
# make install clean
# rehash

Добавляем в /etc/rc.conf строку о необходимости запуска MySQL-сервера:

# echo '# MySQL' >> /etc/rc.conf
# echo 'mysql_enable="YES"' >> /etc/rc.conf

Запускаем сервер

# sh /usr/local/etc/rc.d/mysql-server start

Меняем пароль для пользователя root в MySQL (хотя, обычно, завожу пользователя с полными привилегиями, а запись пользователя root удаляю полностью):

# mysqladmin -u root password new_passwd_here

Теперь следует отредактировать конфигурационный файл mysql, который называется my.cnf. Положить его можно в любую из этих папок: /var/db/mysql/, /etc/, /usr/local/etc/. MySQL при запуске проверит его наличие во всех этих каталогах. Если конфигурациооный файл отсутствует – можно скопировать доступный пример и при необходимости отредактировать его (доступны примеры для нагруженного сервера, для сервера со средней нагрузкой и для ненагруженного сервера)

# cp /usr/local/share/mysql/my-medium.cnf /var/db/mysql/my.cnf

Для решения проблем с кодировкой кирилицы, добавим в секцию [client]:

default-character-set=cp1251

И, соответственно, в секцию [mysqld]:

character-set-server = cp1251
collation-server = cp1251_general_ci
init-connect="SET NAMES cp1251"
skip-character-set-client-handshake
skip-name-resolve

Также, для удобства, можете изменить параметры логгирования. Для этого в секцию [mysqld] файла /var/db/mysql/my.cnf добавляем строку log=/var/log/mysql.log

Также необходимо создать сам файл логов:

# touch /var/log/mysql.log
# chown mysql:mysql /var/log/mysql.log

Перегружаем MySQL для того, чтобы новые настройки вступили в силу:

# sh /usr/local/etc/rc.d/mysql-server restart

Кстати... Если уж возьметесь писать логи MySQL - ОБЯЗАТЕЛЬНО настройте ротацию логов, а не то лог-файл очень скоро разрастется до неимоверных размеров (вплоть до того, что не останется свободного места на разделе. Например, будем архивировать лог раз в неделю. Для этого в /etc/newsyslog.conf необходимо добавить следующую строку:

/var/log/mysql.log      mysql:mysql     600  2     *    $W6D0   JB     /var/db/mysql/hostname.pid

Обратите внимание: pid-файл будет уникальный (зависит от от имени сервера).

Дальше создадим пользователя, с правами суперпользователя в БД MySQL:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'user_pass' WITH GRANT OPTION;

Теперь еще осталось удалить остальных пользователей, которых mysql создает по-умолчанию.

# mysql -u username -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.84-log FreeBSD port: mysql-server-5.0.84

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> DELETE FROM user WHERE NOT user='username';
Query OK, 4 rows affected (0.00 sec)

mysql> quit

Базовая настройка MySQL-сервера завершена.
 

Ваша оценка: Нет Средняя: 4.8 (12 голосов)

Вставай, Україно!

Литература

- С жидкокристаллическим монитором у меня не лады. - А что так? - Не выкристаллизируется!