Січ 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
Кві 132013
 

Как изменить кодировку MySQL базы данных или таблицы. Настройка collation для работы с MySQL.

При запросе к базе данных желательно задать Кодировку с которой будет работать клиент с сервером:

set character_set_client='cp1251
set character_set_results='cp1251
set collation_connection='cp1251_general_ci

Изменяем кодировку для базы данных:

ALTER DATABASE `имя базы` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;

Изменяем кодировку для таблицы:

ALTER TABLE `tablename` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;
ALTER TABLE `tablename` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;

изменить, кодировка, mysql, базы данных, таблица, collation, Настройка, DATABASE, set, character_set_client, character_set_results, collation_connection, ALTER, TABLE

Січ 052013
 

Export(Экспорт) MySQL в Excel реализация на PHP

Однажды мне понадобилось записать данные из базы данных MySQL в Microsoft Excel используя PHP скрипт.
Сейчас я продемонстрирую вам код который в дальнейшем поможет Вам.

<?php
mysql_connect(“localhost”,”root”,”root”);
mysql_select_db(“employee”);
$qry_data=mysql_query(“SELECT * FROM personal ORDER BY nip”);

function xlsBOF() {
echo pack(“ssssss”, 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);
return;
}
function xlsEOF() {
echo pack(“ss”, 0x0A, 0×00);
return;
}
function xlsBuatBaris($data, $Col, $Value) {
echo pack(“sssss”, 0×203, 14, $data, $Col, 0×0);
echo pack(“d”, $Value);
return;
}
function xlsBuatLabel($data, $Col, $Value ) {
$L = strlen($Value);
echo pack(“ssssss”, 0×204, 8 + $L, $data, $Col, 0×0, $L);
echo $Value;
return;
}
header(“Pragma: public”);
header(“Expires: 0″);
header(“Cache-Control: must-revalidate, post-check=0, pre-check=0″);
header(“Content-Type: application/force-download”);
header(“Content-Type: application/octet-stream”);
header(“Content-Type: application/download”);;
header(“Content-Disposition: attachment;filename=employee.xls “);
header(“Content-Transfer-Encoding: binary “);

xlsBOF();

xlsBuatLabel(0,0,”DAFTAR DATA PRIBADI”);

xlsBuatLabel(2,0,”NIP”);
xlsBuatLabel(2,1,”NAMA”);
xlsBuatLabel(2,2,”ALAMAT”);
xlsBuatLabel(2,3,”KELAMIN”);
xlsBuatLabel(2,4,”TGL LAHIR”);

$xlsRow = 3;

while($data=mysql_fetch_array($qry_data)){
xlsBuatBaris($xlsRow,0,$data['nip']);
xlsBuatLabel($xlsRow,1,$data['nama']);
xlsBuatLabel($xlsRow,2,$data['alamat']);
xlsBuatLabel($xlsRow,3,$data['kelamin']);
xlsBuatLabel($xlsRow,4,$data['tgl_lahir']);

$xlsRow++;
}

xlsEOF();
exit();
?>