Січ 032014
 

Deiban, Ubuntu MySQL: “Access denied for user ‘debian-sys-maint’@’localhost’”

Для всех Ubuntu/MySQL или Debian/MySQL. У меня уже была создана папка /usr/lib/mysql с данными на другом сервере, и мне надо было перенести информацию на новый сервер.

После переноса информации, у меня высветилась подобная ошибка:

anton@server:~$ sudo /etc/init.d/mysql restart
* Stopping MySQL database server mysqld [fail]
* Starting MySQL database server mysqld [ OK ]
/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'

Что же это на пользователь debian-sys-maint, где его искать, и зачем? Данный пользователь был создан MySQL исключительно для Debian, Ubuntu. Для того, чтобы иметь возможность запускать/останавливать базу данных и выполнять другие операции связанных с техническим обслуживанием.

Но тогда почему “Отказано в доступе” для этого пользователя? Ну, вопрос в том, что с каждым обновлением MySQL, пароль пользователя в базе данных переписывается. Смотрим в файле /etc/mysql/debian.cnf для того, чтобы найти пароль этого пользователя.

К счастью, решение этого вопроса довольно прост.

Вопервых мы открываем файл debian.cnf:

anton@server:~$ sudo /etc/mysql/debian.cnf

Содержимое файла должно выглядеть примерно так:

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = n4aSHUP04s1J32X5
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user     = debian-sys-maint
password = n4aSHUP04s1J32X5
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

Смотрим на пароль, в данном примере он n4aSHUP04s1J32X5

Следующий шаг, подключится к базе данных из под пользователя root. И ввести данную команду:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'n4aSHUP04s1J32X5';

После проделанной процедуры, мы перезагружаем базу данных:

anton@server:~$ sudo /etc/init.d/mysql restart
* Stopping MySQL database server mysqld [ OK ]
* Starting MySQL database server mysqld [ OK ]
* Checking for corrupt, not cleanly closed and upgrade needing tables.
Жов 122013
 

если что, то у меня ошибка 1093 – You can’t specify target table ‘germany’ for update in FROM clause

Если в момент запроса UPDATE у Вас вывелась подобная ошибка, воспользуйтесь примером для решения данной ошибки.

UPDATE `germany`
SET `goals` = (
SELECT `goals` FROM (SELECT `goals` FROM `germany` WHERE `name` = ‘Nickname’ LIMIT 1) as `tmp`
)
WHERE `name` = ‘Nickname1’

Вер 242013
 

Очистка mysql binlog (бинарный лог mysql)

Для анализа изменений, которые были совершены в базе, в MySQL присутствует замечательный функционал, называемый binlog.
Для этого, в файле my.cnf, нужно вписать строчку

log-bin

Тогда, после перезапуска MySQL, в каталоге с базами (например, /var/lib/mysql или /var/db/mysql), будут создаваться файлы вида mysqld-bin.000001.

Прописываем expire_logs_days=7 в my.cnf
Перезагружаем mysql, затем пишем в консоли mysql

mysql> flush logs;

чтобы очистить логи!

Например есть еще более экстравагантный способ, написать скрипт, который будет запускаться с определенной периодичностью.
Плюс этого метода в том, что можно указать время очистки логов:

#!/bin/sh
echo 'PURGE BINARY LOGS BEFORE NOW() - INTERVAL 30 DAY;' | mysql -u root -pyourrootpassword
Сер 182013
 

Как скачать полностью сайт? Возможно через wget

Cкачать весь сайт можно очень просто через linux или FreeBSD, используя утилиту wget

Код с ключами:

wget -r -k -l 7 -p -E -nc http://site.com/
Сер 102013
 

Установив последнюю версию phpMyAdmin на сервер, появилась проблема с авторизацией. При попытке авторизации через https после нажатия кнопки входа, происходил редирект на https://домен:80/myadmin. 80 порт при ssl соединении, совсем непонятно. Самое интересное, что авторизация срабатывает и если убрать 80 порт, то страница с базами загрузиться без проблем.

Как исправить?

Открываем конфигурационный файл config.inc.php и добавляем строчку

$cfg[‘PmaAbsoluteUri’] = ‘https://ваш домен/myadmin’;

Также, для безопасности, добавьте директиву

$cfg[‘ForceSSL’] = true;

Тогда все запросы будут идти по безопасному протоколу https, даже, если Вы зайдете через http.

Можно конечно, еще сделать редиректы через mod_rewrite, но я этого не пробовал и не уверен, что все сработает.