Synology DS207, DSM 3.1. Включаем SSH в гуе DSM и соединяемся:
$ ssh admin@<ip address DS>
BusyBox v1.16.1 (2014-09-04 11:01:59 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
Переходим в каталог подходящих производственных утилит, потому что в PATH этот каталог не попал по известной одному производителю причине:
DiskStation> cd /usr/syno/mysql/bin
DiskStation> pwd
/usr/syno/mysql/bin
Соединяемся с MySQL, авторизуясь супер-пользователем (root), для которого используется пароль от пользователя "admin".
В DSM 3.1 это именно так: root и admin, судя по создаваемому при авторизации окружению при авторизации, - это не один и тот же пользователь, но задавая пароль для пользователя admin (например, при настройке), одновременно задаётся и пароль для супер-пользователя.
DiskStation> ./mysql --user=root -p
Enter password: <admin super-secret password>
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.1.49 Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
No entry for terminal type "xterm-256color";
using dumb terminal settings.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Вот тут была странность с определением конфигурации терминала. Откуда именно здесь взялась эта ошибка я разбираться не стал. Предположить можно многое, но костыльнуть и забыть всяко можно, чтоб не мозолил глаз этот месадж (No entry for terminal type "xterm-256color";) из недр synology. Ведь можно сразу после авторизации на консоли выдать TERM=xterm и месаджа с "No entry" не будет. Впрочем, для внутренних дел с MySQL даже эта проблема вряд ли окажет какое-то влияние. Хотя, можно предположить, что некая буква или символ отобразятся не так, как оно есть на самом деле... Внимательнее.
Посмотреть исходное состояние пользователей MySQL в synology:
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> select Host,User,Password,Grant_priv from user;
+-------------+--------+-------------------------------------------+------------+
| Host | User | Password | Grant_priv |
+-------------+--------+-------------------------------------------+------------+
| localhost | root | *F01234567890ABCDEF01234567890ABCDEF01234 | Y |
| DiskStation | root | | Y |
| 127.0.0.1 | root | | Y |
| localhost | | | N |
| DiskStation | | | N |
+-------------+--------+-------------------------------------------+------------+
5 rows in set (0.00 sec)
Заодно и посмотреть "кто и откуда, и именно сейчас, и что делает":
mysql> select user,host,db,command from information_schema.processlist;
+------+-----------+-------+---------+
| user | host | db | command |
+------+-----------+-------+---------+
| root | localhost | mysql | Query |
+------+-----------+-------+---------+
1 row in set (1.61 sec)
Теперь надо добавить пользователя MySQL для вожделенной piwigo, который будет управлять только данными для piwigo и ничем иным. То есть требуется в MySQL создать пустую базу, в которой потом скрипт piwigo (при первом запуске и настройке) наделает всяких таблиц и будет туда записывать, и там хранить свою собственную инфу.
Для начала оценим текущее состояние дел. Какие вообще базы есть до "начала славных дел оч.умелыми ручками":
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
Вот так вот. Уже три есть. Ну, "test" - он и в Африке тест. Понятие об "mysql" уже кое-какое есть. "information_schema" - звучит потрясающе, и можно даже в гугл не смотреть на предмет выяснения предназначения.
На всякий случай - маячок - взглянем назначенные кодировки символов в базе "test":
mysql> SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'test';
+----------------------------+------------------------+
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------------------+------------------------+
| latin1 | latin1_swedish_ci |
+----------------------------+------------------------+
1 row in set (1.64 sec)
О, как! Вот такого нам росеянам и даром не надо. Вдруг кто не в курсе, я повторю, что при создании базы всё же лучше учитывать свою национальную принадлежность. Шведы - это тоже люди, но вряд ли они будут столь же обильно использовать кириллицу, как и жители, и
пользователи продукции synology на Руси. Принципиально, разумеется, кодировка - это не беда. Потом можно и поперекодировать туда-сюда, заняться ведь нечем. Лично я решил, что в имеющемся у меня DS207 фотогалерея piwigo будет веселее отрабатывать с данными в кодировке utf8.
Добавим базочку с не нарушением общности для piwigo, и назовём её не иначе как piwigo_db:
mysql> create database piwigo_db CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Query OK, 1 row affected (1.61 sec)
Заценим труды:
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| piwigo_db |
| test |
+--------------------+
5 rows in set (0.01 sec)
mysql> SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'piwigo_db';
+----------------------------+------------------------+
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------------------+------------------------+
| utf8 | utf8_unicode_ci |
+----------------------------+------------------------+
1 row in set (0.01 sec)
Если дрогнула рука или "что-то пошло не так", то всегда можно удалить неправильно наделанное - удалить ошибочную базу:
mysql> DROP DATABASE IF EXISTS piwigo_db;
Query OK, 0 rows affected (1.71 sec)
Убедиться, что действительно удалили ненужное (show databases;) и пытаться вновь сделать желаемое.
Теперь добавим пользователя, который будет рулить только этой новой базой, и рулить он будет не откуда-то издалека, а только при операциях с базой непосредственно на устройстве, разумеется. Впрочем, позднее, если захочется, то можно и издалека.
Но для успешной работы piwigo этого "издалека" не требуется, так что пускай этот пользователь останется лишь для внутренних нужд скрипта.
mysql> create user 'piwigo_user'@'localhost' identified by 'password_piwigo_db';
Query OK, 0 rows affected (0.33 sec)
Что тут что? piwigo_user - это имя пользователя (какое выдумаете: piwigo, VasiliyNezabudkin, Sveta-Guseva....), которое будет использовано скриптом piwigo при заполнении, изменении, хранении данных в базе. Синтаксис команды добавления, удаления, редактирования пользователя требует брать имя в кавычки. localhost - это имя так называемого хоста, суть устройства в сети, однозначно означающее непосредственно само устройство.
Т.е. создаётся пользователь, который может обращаться к MySQL с самого устройства. password_piwigo_db - это пароль. Опять же, пароль в кавычках, и какой вы там себе навыдумываете, только не забывайте. Потому что при установке piwigo в форму для соединения с базой придётся всё это дело ввести. Там как бы два таких момента: пользователь и пароль для соединения с базой - это то, что сейчас делается, а потом ещё пользователь и пароль администратора непосредственно скрипта. Ну, последнее - это всё на ваше усмотрение. А тут - дела внутренние, не часто используемые, но по итогу всегда
получается, что не менее важные. Так что не надо забывать никаких ни имён, ни паролей, выдуманных вами же.
Посмотрели пользователей опять:
mysql> select Host,User,Password,Grant_priv from user;
+-------------+-----------------+-------------------------------------------+------------+
| Host | User | Password | Grant_priv |
+-------------+-----------------+-------------------------------------------+------------+
| localhost | root | *F01234567890ABCDEF01234567890ABCDEF01234 | Y |
| DiskStation | root | | Y |
| 127.0.0.1 | root | | Y |
| localhost | | | N |
| DiskStation | | | N |
| localhost | piwigo_user | *7890ABCDEF0123456789ABCDEF012345678ABCDE | N |
+-------------+-----------------+-------------------------------------------+------------+
6 rows in set (0.01 sec)
Хвала Будде, пользователь добавился. К вопросу о суперпользователе. Да, он с чудинкой:
для разрешённого имени утройства (DiskStation) и для локального адреса (так называемого адреса обратной петли) он без пароля вообще, а для имени, соответствующего адресу обратной петли он с паролем от пользователя "admin". Ну, в MySQL хранится пароль в виде расчитанного так называемого хэша. Из консоли и с помощью производственной утилиты mysql в DS207 c DSM 3.1 лично у меня ни разу не получилось соединиться без указания пароля. Беспарольные заходы суперпользователя при этом нельзя отрицать.
Если рука дрогнула и при создании пользователя, то его опять же можно и удалить:
mysql> DROP USER 'piwigo_user'@'localhost';
Query OK, 0 rows affected (0.00 sec)
Здесь пароль не важен. Ведь удаляет тот пользователь, которым соединились к MySQL. А тем, кем соединились, у того есть "Grant_priv" на это дело (буковка "Y" в столбце).
Сейчас есть пользователь (piwigo_user), есть пустая база (piwigo_db). Осталось выдать разрешение пользователю (piwigo_user) на работу только с базой для piwigo (piwigo_db):
mysql> GRANT ALL PRIVILEGES ON piwigo_db.* TO 'piwigo_user'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
Так и выдали все разрешения для базы piwigo_db для пользователя piwigo_user, с помощью которого скрипт piwigo будет трудиться над содержимым базы ( т.е. объекты базы обозначенные после имени через точку .*) как вздумается и только при соединениях непосредственно на самом устройстве (localhost).
Операция FLUSH PRIVILEGES; - это запись назначенных выше разрешений.
Итого, чисто для проверки:
mysql> select Host,User,Password,Grant_priv from user;
+-------------+-----------------+-------------------------------------------+------------+
| Host | User | Password | Grant_priv |
+-------------+-----------------+-------------------------------------------+------------+
| localhost | root | *F01234567890ABCDEF01234567890ABCDEF01234 | Y |
| DiskStation | root | | Y |
| 127.0.0.1 | root | | Y |
| localhost | | | N |
| DiskStation | | | N |
| localhost | piwigo_user | *7890ABCDEF0123456789ABCDEF012345678ABCDE | N |
+-------------+-----------------+-------------------------------------------+------------+
6 rows in set (0.01 sec)
mysql> SHOW GRANTS FOR 'piwigo_user'@'localhost';
+------------------------------------------------------------------------------------------------------------------------+
| Grants for new_piwigo_user@localhost |
+------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'piwigo_user'@'localhost' IDENTIFIED BY PASSWORD '*7890ABCDEF0123456789ABCDEF012345678ABCDE' |
| GRANT ALL PRIVILEGES ON `piwigo_db`.* TO 'piwigo_user'@'localhost' |
+------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
+--------------------+---------+-------------------+
| database | charset | collation |
+--------------------+---------+-------------------+
| information_schema | utf8 | utf8_general_ci |
| mysql | latin1 | latin1_swedish_ci |
| piwigo_db | utf8 | utf8_unicode_ci |
| test | latin1 | latin1_swedish_ci |
+--------------------+---------+-------------------+
4 rows in set (0.01 sec)
mysql> \q
Bye
DiskStation>
Безусловно, всё это дело можно оформить и одним скриптом, фактически из трёх команд (добавить базу, добавить пользователя, дать разрешения пользователю), но синтаксис этих команд, как и переменных (адреса, пути, имена...) будет очевидно разным для разных моделей железяк от synology и с отличными версиями DSM. Общий тут только подходец. Ну или вариант такой: у вас дофига всякого железа от synology, и вы на всём этом можете опробовать, да обобщить варианты.
Установка докера именно в случае piwigo - это как пятое колесо в телегу. Вот оно вам надо заиметь несколько вариантов сиквера, пэхапэ, всевозможных либ, и всякого такого по несколько раз в одном устройстве? Принципиально одинакового, и непременно, и всё жрущего ресурс вашей железяки? piwigo лепится в том числе и для того, чтобы удобно распрощаться с дублями фоток. Да, удобно. Но зачем зафигачивать ради этого в железяку дублей по софту? - я этого ни фига не понял.
Удачи.