Категорії
DataBases FreeBSD

[mysql] Установка сервера mysql 5.5

Пришло время описать установку и настройку mysql сервера версии 5.5 с кодировками utf-8 по умолчанию.

1) Подготовка

Добавляем такие строки в /etc/make.conf

DEFAULT_MYSQL_VER=55
PORTSDIR?= /usr/ports
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql55-server
WITH_CHARSET=utf8
WITH_COLLATION=utf8_bin
BUILD_OPTIMIZED=yes
BUILD_STATIC=yes
WITH_XCHARSET=all
.endif
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql55-client
WITH_CHARSET=utf8
WITH_COLLATION=utf8_bin
BUILD_OPTIMIZED=yes
.endif

Кстати, если заглянуть в порт /usr/ports/databases/mysql55-server то в файле Makefile опций вы не обнаружите. Их можно взять, например, из порта /usr/ports/databases/mysql51-server.

2) Установка

Теперь можно приступать к установке:

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

3) Настройка

После установки создаём файл /etc/my.cnf такого содержания:

[mysqld]
#bind-address = 127.0.0.1
socket= /tmp/mysql.sock
skip-networking
character-set-server=utf8
collation-server=utf8_general_ci
init_connect='SET collation_connection = utf8_general_ci'
init-connect='SET NAMES utf8'
log_error=/var/log/mysql/error.log
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time = 5
log-queries-not-using-indexes
default-storage-engine = innodb
innodb_file_per_table
innodb_file_format=barracuda
local-infile=0

[mysqldump]
default-character-set=utf8

[client]
default-character-set = utf8

Добавляем строку

mysql_enable="YES"

в /etc/rc.conf

Меняем права:

#chown -R mysql:mysql /var/db/mysql/

и запускаем:

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

Если в логах получаем ошибку

[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

Проверьте, стоит ли владелец mysql:mysql. Если стоит, а всё равно не запускается, удалите каталог /var/db/mysql/mysql (скорее всего он пуст) и запустите снова:

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

4) Проверка.

Что бы проверить, правильно ли у нас установлена кодировка, выполним такую команду:

mysql>show variables like 'char%';

Если вывод будет таким:

+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.38 sec)

mysql> show variables like '%collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.01 sec)

Значит всё правильно.

Либо тоже самое, но через mysqladmin:

#mysqladmin variables | egrep 'collation|char'
| character_set_client | utf8
| character_set_connection | utf8
| character_set_database | utf8
| character_set_filesystem | binary
| character_set_results | utf8
| character_set_server | utf8
| character_set_system | utf8
| character_sets_dir | /usr/local/share/mysql/charsets/
| collation_connection | utf8_general_ci
| collation_database | utf8_general_ci
| collation_server | utf8_general_ci

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

mysql>SHOW CHARACTER SET;

5) Просмотр и смена кодировки уже существующей базы

mysql> create database AAA DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin;
mysql> show create database AAA;
+----------+------------------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------------------+
| AAA | CREATE DATABASE `AAA` /*!40100 DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin */ |
+----------+------------------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> use AAA;
Database changed
mysql> show variables like "character_set_database";
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| character_set_database | cp1251 |
+------------------------+--------+
1 row in set (0.00 sec)

mysql> show variables like "%colla%";
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | cp1251_bin |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

Попробуем изменить кодировку на koi8-r

mysql> alter database `AAA` character set koi8r;
Query OK, 1 row affected (0.00 sec)

mysql> show variables like "%colla%";
+----------------------+------------------+
| Variable_name | Value |
+----------------------+------------------+
| collation_connection | utf8_general_ci |
| collation_database | koi8r_general_ci |
| collation_server | utf8_general_ci |
+----------------------+------------------+
3 rows in set (0.01 sec)

mysql> show variables like "character_set_database";
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| character_set_database | koi8r |
+------------------------+-------+
1 row in set (0.01 sec)

Собственно видим, что кодировка изменилась.

5) Пару слов о кодировках.

Допустим такую ситуацию. Вы используете PhpMyAdmin с кодировкой UTF8, а консоль у вас KOI8R. Естественно, хочется, что бы всё нормально отображалось и в консоли и в вебке. Для этого служит команда:

mysql>SET NAMES KOI8R;

которая объясняет серверу, в какой кодировке выводить данные. Естественно, каждый раз вводить это неудобно и для этого можно поместить в my.cnf:

[mysqld]
init-connect='SET NAMES koi8r'

НО! Если вы обладаете правами SUPER (например, root), то для вас это не сработает. Придётся вручную каждый раз вводить. Читал, что это сделано специально.

4 коментарі “[mysql] Установка сервера mysql 5.5”

У меня на 5.5.13 это уже не работает.
MySQL собирается с помощью CMake, поэтому нужно немного править Makefile

Например где-то после строк

.if defined(WITH_FASTMTX)
CMAKE_ARGS+= -DWITH_FAST_MUTEXES=1
.endif

Можно вставить такое для выбора настроек сервера по умолчанию.

CMAKE_ARGS+= -DDEFAULT_CHARSET=”utf8″
CMAKE_ARGS+= -DDEFAULT_COLLATION=”utf8_general_ci”
CMAKE_ARGS+= -DEXTRA_CHARSETS=”all”

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

Hi.

Если прописываешь в my.cnf то мускуль можно и не пересобирать. А вот за статью спасибо – если бы не каммент Богдана еще бы долго искал, как мускуль по-правильному собрать.

.if ${.CURDIR:N*/usr/ports/databases/mysql55-server} == “”
CMAKE_ARGS+= -DDEFAULT_CHARSET=utf8
CMAKE_ARGS+= -DDEFAULT_COLLATION=utf8_general_ci
.endif

В итоге вот такое:

show variables like ‘char%’;
+————————–+———————————-+
| Variable_name | Value |
+————————–+———————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/share/mysql/charsets/ |
+————————–+———————————-+
8 rows in set (0.01 sec)

З.Ы. клиента бесполезно пересобирать – он кодировку и так берет из окружения.

З.Ы. перевести базу в другую кодировку можно очень просто через phpmyadmin. Открываешь базу, отмечаешь все таблицы, нажимаешь сверху “Опции” и выбираешь нужную кодировку для collation. И все.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff