Сайт 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:Prot
/lib/systemd/system/mariadb@.service:Pro
Перезапустил 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