Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Леонид Каганов ([info]lleokaganov)
@ 2019-05-03 16:13:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Сисадмину на заметку: йобаный mysql
это перепост заметки, оригинал находится на моем сайте: http://lleo.me/dnevnik/2019/05/03_mysql

Сайт lleo.me временно упал. Ничего страшного, кончилось место из-за разросшейся базы /var/lib/mysql Партиция /var там конструктивно очень небольшая, большая /home

Не вопрос, я перенес /var/lib/mysql в /home/www/mysql, там места дофига, создал симлинк.

Не запускается.

mysqld[2771]: [Warning] Can't create test file /home/www/mysql/bq.lower-test

Ладно, симлинки иногда глючат.
Поправил в конфиге /etc/mysql/mariadb.conf.d/50-server.cnf
datadir=/home/www/mysql
Тот же эффект.

Проверил права mysql mysql 755, всякие там chown -R mysql:mysql /home/www/mysql — тот же эффект.

Нагуглил: MariaDB зачем-то отдельно запрещает писать в /home. Поэтому надо раскомментарить опцию: ProtectHome=false Раскомментарил- тот же эффект.

Нагуглил: ProtectHome может скрываться еще в каких-то конфигах: grep -Ri «protecthome» /lib/systemd/system
Нашел кучу конфигов, упоминающих ProtectHome=true
Поправил связанное с mariadb:
/lib/systemd/system/mariadb.service:ProtectHome=false
/lib/systemd/system/mariadb@.service:ProtectHome=false

Перезапустил systemctl daemon-reload — тоже какая-то рогатая йобань, типа надо ее перезапустить.

Стало чуть лучше — при старте mysql зависает подольше, и пишет не «Can't create test file», а лаконично: «Failed to start MariaDB 10.1.37 database server.»

Спросил совета в Фейсбуке. Умные люди объяснили, что паранойя с home — излюбленная фишка mysql и не лечится. А надо использовать mount bind чтобы назвать этот путь не /home
Cделал mount --bind /home/www/ /R
Отличная вещь, кстати, не знал раньше.
Пишем в /etc/fstab:

/home/www /R               none    bind            0 0

Не работает!

Ладно, думаю, попробую сильно почистить /var в других местах и вернуть mysql обратно, пусть еще хоть немного проработает, не всё же сайту висеть. Перенес все базы обратно в /var/lib/mysql — НЕ РАБОТАЕТ И НА СТАРОМ МЕСТЕ!

Зато оказалось, теперь оно пишет логи. Раньше не писало.

Йобаная рогатая тварь:
2019-05-03 15:50:30 140617060031872 [ERROR] /usr/sbin/mysqld: unknown variable 'ProtectHome=false'

Сука! У тебя же эта опция была в конфиге! Закомментарена! Я ее сука просто раскомментарил!

Ладно, убрал опцию. Все равно не работает на старом месте!

2019-05-03 15:56:56 140625905151360 [Note] Recovering after a crash using tc.log
2019-05-03 15:56:56 140625905151360 [ERROR] Can't init tc log
2019-05-03 15:56:56 140625905151360 [ERROR] Aborting

А это еще что за хуйня?!
Оказалось, лежал в папке файл mysql/tc.log с НУЛЕВОЙ длиной. Зачем? Что это? Убил его — всё запустилось на старом месте!

Поправил в конфиге на новое место /R/mysql — вот теперь работает. Никаким иным способом, кроме mount --bind невозможно побороть истерики mysql с отказом работать в папке с именем /home.

Путин введи войска против разработчиков mysql.



это перепост заметки, оригинал находится на моем сайте: http://lleo.me/dnevnik/2019/05/03_mysql