Настраиваем сервер для LiveStreet. Часть IV. MySQL.
Предыдущие части:
Сначала генерируем и запоминаем пароль для MySQL-аккаунта root, который попросят во время установки:
И запускаем установку:
После установки, конфигурации для него по умолчанию не будет. Такова политика MySql начиная с версии 5.5. Поэтому нужно самим создать файл /etc/mysql/my.cnf:
следующего содержания:
После создания файла перестартовываем:
Замечание: тонкая настройка MySQL тема необъятного размера и сложности. Но, для небольших/средних сайтов можно вполне доверится настройкам по умолчанию. Однако, вот несколько полезных линков от господ ewden и ort :
Всё. Установили. Теперь нам нужен специфический аккаунт который можно использовать для обеспечения SSH tunneling, но которым вообще ничего нельзя делать через консоль и SFTP. Этот парень нужен нам чтобы работать с MySql over SSH, не открывая лишних возможностей.
Создаем аккаунт с именем, например, sqltunnel (имя лучше придумайте другое) без домашней директории и с хитрым shell:
Обычным образом генерируем и запоминаем пароль, подлиннее и посложнее:
Задаём этот пароль нашему аккаунту:
Теперь нам надо разрешить этому пользователю ходить только к MySql который сидит на сервере на порте 3306. Для этого идем в конфигурационный файл /etc/ssh/sshd_config
и в самый конец файла (это важно!) добавляем следующее:
После внесения настроек пере-запускаем sshd:
Теперь нам нужен MySql клиент.
Для начала качаем plink.exe и кидаем его туда же куда кинули putty.exe в первой части.
Качаем отсюда www.heidisql.com/download.php бесплатный и симпотичный HeidiSQL 7.0. Устанавливаем его на родимый Windows и запускаем:
Задаём всё как на картинке, пока что в качестве пользователя используем root c тем паролем который сгенерировали в самом начале этой заметки. Переключаемся на закладку «SSH tunneling»:
Указываем путь к plink.exe. В синее поле задаём IP сервера, в красное — наш aккаунт для SSH-tunneling — sqltunnel. нажимаем Open — и всё. Соединитесь с MySQL:
Теперь нам нужно подготовить Базу данных для LiveStreet. Выполняем в HeidiSQL запрос для создания новой базы:
В качестве «newuser» нужно, конечно, придумать что-то осмысленное, а пароль вообще сгенерировать тем же pwgen, например.
Замечание: Если уже есть полный dump базы (в примере ниже — mydb.sql), то самый быстрый и надежный способ создать из него базу — просто залить файл с дампом на сервер по SFTP и потом выполнить из консоли команду:
Всё :) Продолжение в следующей части:
Часть V. Apache
- Часть I. Введение, хостинг и PuTTY.
- Часть II. Vim, файловая система, hostname.
- Часть III. Некоторые настройки ядра, репозитории и базовые утилиты.
Сначала генерируем и запоминаем пароль для MySQL-аккаунта root, который попросят во время установки:
pwgen -c -n 10 1
И запускаем установку:
apt-get install percona-server-server-5.5 percona-server-client-5.5
После установки, конфигурации для него по умолчанию не будет. Такова политика MySql начиная с версии 5.5. Поэтому нужно самим создать файл /etc/mysql/my.cnf:
vim /etc/mysql/my.cnf
следующего содержания:
[client]На последних 3-х остановимся подробно.
port = 3306
socket = /var/run/mysqld/mysqld.sock
default-character-set = utf8
[mysqld]
#
# * Basic Settings
#
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
bind-address = 127.0.0.1
character-set-server = utf8
collation-server = utf8_general_ci
default-storage-engine = InnoDB
innodb_file_per_table = 1
innodb_file_format = barracuda
innodb_strict_mode = 1
innodb_buffer_pool_size = 1G
innodb_read_io_threads = 8
innodb_write_io_threads = 16
- innodb_buffer_pool_size — по умолчанию MySQL установит как предел 80% доступной памяти и будет их неспешно отъедать надо оно ему или нет. Эта директива указывает ему потолок, в некоторой степени. Для LS c 1000 статей, 10000 комментариев и 1000 уников в день и 256M в общем, хватит. В основном, упирается в размеры вашей БД. Если, например, у вас сервер с 16Gb, то 80% под MySQL — может быть крайним расточительством. В сети можно найти запросы которые помогут понять сколько действительно нужно памяти для БД. Вот например: dba.stackexchange.com/a/27341. Можете по-разбираться, там всё элементарно. Боитесь — уберите директиву.
- innodb_read_io_threads & innodb_write_io_threads — игры с параллелизмом. Если у вас VPS — убрать эти директивы из конфигурации обязательно. Если очень мощный, многопроцессорный сервер — можно поставить даже максимум: 64. В приведенном примере, просто компромиссный вариант.
После создания файла перестартовываем:
/etc/init.d/mysql restart
Замечание: тонкая настройка MySQL тема необъятного размера и сложности. Но, для небольших/средних сайтов можно вполне доверится настройкам по умолчанию. Однако, вот несколько полезных линков от господ ewden и ort :
https://github.com/rackerhacker/MySQLTuner-perl http://www.day32.com/MySQL/ https://tools.percona.com/wizard http://openarkkit.googlecode.com/svn/trunk/openarkkit/doc/html/introduction.html
Всё. Установили. Теперь нам нужен специфический аккаунт который можно использовать для обеспечения SSH tunneling, но которым вообще ничего нельзя делать через консоль и SFTP. Этот парень нужен нам чтобы работать с MySql over SSH, не открывая лишних возможностей.
Создаем аккаунт с именем, например, sqltunnel (имя лучше придумайте другое) без домашней директории и с хитрым shell:
useradd -g ssh -M -N -s /usr/sbin/nologin sqltunnel
Обычным образом генерируем и запоминаем пароль, подлиннее и посложнее:
pwgen -c -n -y 12 1
Задаём этот пароль нашему аккаунту:
passwd sqltunnel
Теперь нам надо разрешить этому пользователю ходить только к MySql который сидит на сервере на порте 3306. Для этого идем в конфигурационный файл /etc/ssh/sshd_config
vim /etc/ssh/sshd_config
и в самый конец файла (это важно!) добавляем следующее:
Match User sqltunnel PermitOpen localhost:3306 AllowAgentForwarding no
После внесения настроек пере-запускаем sshd:
/etc/init.d/ssh restart
Теперь нам нужен MySql клиент.
Для начала качаем plink.exe и кидаем его туда же куда кинули putty.exe в первой части.
Качаем отсюда www.heidisql.com/download.php бесплатный и симпотичный HeidiSQL 7.0. Устанавливаем его на родимый Windows и запускаем:
Задаём всё как на картинке, пока что в качестве пользователя используем root c тем паролем который сгенерировали в самом начале этой заметки. Переключаемся на закладку «SSH tunneling»:
Указываем путь к plink.exe. В синее поле задаём IP сервера, в красное — наш aккаунт для SSH-tunneling — sqltunnel. нажимаем Open — и всё. Соединитесь с MySQL:
Теперь нам нужно подготовить Базу данных для LiveStreet. Выполняем в HeidiSQL запрос для создания новой базы:
CREATE DATABASE mysuperlsdb;И после этого там же создаем специальный MySQL аккаунт которой имеет права только к этой базе:
GRANT ALL ON mysuperlsdb.* TO newuser@localhost IDENTIFIED BY 'superpassword';
В качестве «newuser» нужно, конечно, придумать что-то осмысленное, а пароль вообще сгенерировать тем же pwgen, например.
Замечание: Если уже есть полный dump базы (в примере ниже — mydb.sql), то самый быстрый и надежный способ создать из него базу — просто залить файл с дампом на сервер по SFTP и потом выполнить из консоли команду:
mysql --user=root --password=XXXXXXXX < mydb.sql
Всё :) Продолжение в следующей части:
Часть V. Apache
43 комментария
Сколько помню, /etc/mysql всегда был без него. Хотя, pecrona-server-common (Как-то так) был поставлен.
В любом случае лишним не будет.
Чтобы добавить поддержку, нужно эту снести и поставить новую версию? Хочется вариант чтобы минимально трогать сайт (он сейчас рабочий, но работает на Myisam)
буду признателен за совет.
P.S.
С учетом того, что уже анонсирована стабильная MySQL 5.6, установленная сейчас mysql-server-5.1-5.1.61-0+squeeze1 старовата?
Совет такой — если работает нормально — ничего не трогайте. Черт его знает что случится с ISPserver когда вы там начнете софт курочить.
Уже разобрался, что у них там это просто отключено в конфиге, нужно раскомментить в конфиге «skip-innodb» и перезапустить
Мне вроде ошибок при таком алгоритме не выводилось.
хотя конечно можно все таблицы просмотреть и перепроверить.
innodb_file_format = barracuda
innodb_strict_mode = 1
можно как то пофиксить?
Сервер в инете, я(клиент) за роутером
Редактируем: /etc/ssh/sshd_config, добавляем строчки:
Можно заранее создать обычного пользователя user_dlya_ssh, у которого нет рут прав с другим паролем.
А потом просто вводим su и переходим в режим суперпользователя.
С root'овским акк mysql то же все Ok.
Почему ругается?
PS. убираю пароль у root(настройки mysql) — входит на локальный сервер.
SQL Error (2013): Lost connection to MySQL server at 'reading initinal communication packet', system error: 0
Надо либо в настройках HeidiSQL на первой вкладке «Settings» в поле «Hostname / IP» вместо 127.0.0.1 указать localhost
либо на сервере в настройках ssh вместо localhost указать 127.0.0.1
вот здесь:
wget mysqltuner.pl/
и запусткаем
perl index.html
он показывает статистику и дает советы по настройке mysql, примерно так:
И с помощью HeidiSQL залогиниться теперь не получается. Как это можно исправить?
выдает ошибку
Помогите, пожалуйста