вторник, 23 февраля 2010 г.

Шпаргалка по mysql. Взяд у ZlO

Взяд здесь

Работа с базами


Создаем базу
CREATE DATABASE maps;
Убиваем базу
DROP DATABASE maps;
Смотрим базы
SHOW DATABASES;

Работа с пользователя

Создаем локального юзера
CREATE USER 'user'@'localhost' IDENTIFIED BY 'PASSWORD';
Создаем сетевого юзера с ограниченными правами
GRANT SELECT, RELOAD, LOCK TABLES ON *.* TO 'user'@'%' IDENTIFIED BY 'PASSWORD';
Даем права юзеру на базу
GRANT ALL on base.* to user@"%";
Забираем права у юзера на базу
REVOKE SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on base.* from user@'%';
Создаем суперюзера
GRANT ALL on *.* to user@host with GRANT OPTION;
Сбрасываем привилегии
flush privileges;

Работа с дампами

Дампим в файл без таблицы

mysqldump forum --ignore_table=forum.w3t_Posts_archive > /var/tmp/forum_base.sql
Дампим и заливаем сразу в другую базу без промежуточного файлы
mysqldump forum --ignore_table=forum.w3t_Posts_archive | mysql new_forum
Дампим базу без данных из одной таблицы
mysqldump forum --no-data w3t_Posts_archive > /var/tmp/forum_tables.sql
Дампим по сети
mysqldump -u user -p -h172.16.10.1 base > /var/tmp/base.sql
Дампим по сети одну таблицу
mysqldump -u user -p -h172.16.10.1 base --tables single_table > /var/tmp/base.sql
Дампим по сети и заливаем сразу в свою базу
mysqldump -u user -p -h172.16.10.1 base | mysql newbase
Дампим и заливам дамп по сети на другую машину в файл
mysqldump -u user -p base | gzip -c -1 | ssh user@hostname cat ">" /tmp/base.sql.gz
Восстанавливаем базу из bin-logs с определенного времени ( времени последнего дампа) до необходимого
mysqlbinlog --start-datetime='2008-12-13 22:31:42' --stop-datetime='2008-12-14 02:00:00' -d forum mysql-bin.* > forum2.log.sql

Получаем дамп который нужно потом раскатать поверх.

Репликация
Посмотреть позицию мастера
SHOW MASTER STATUS\G
Посмотреть состояния слэйва
SHOW SLAVE STATUS\G
Пропустить ошибку при репликации
set GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
Лочим таблицы
FLUSH TABLES WITH READ LOCK;
Указываем мастера
CHANGE master TO
master_host = '172.22.100.1',
master_user = 'repl',
master_password = 'password',
master_log_file = 'log-bin.000093',
master_log_pos = 1369;

Талбицы
Список таблиц в базе
show tables;
Имена столбцов в таблице
explain table;
Очистить данные в таблице
truncate table;

Разное
Отключаем bin-log на время нашего сеанса
set sql_log_bin=0;
Посмотреть InnoDB статут
show innodb status\G
Посмотреть параметры mysql сервера
show GLOBAL variables;
Установить параметр mysql сервера
set GLOBAL key_buffer_size=127999;
Посмотреть процессы mysql сервера
show processlist;
Убить процесс по ID
kill ID;

понедельник, 22 февраля 2010 г.

Задрал страшно "mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)"

Два часа бился, и права менял юзерам и чере жопу запускал sql и локальные права смотрел и переустанавливал, что-то ни как не пог пофиксить.   

[root@serv ~]# mysql

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Решил просто скоприровав базу mysql с другого сервака.


Потом было это:

ERROR 1201 (HY000): Could not initialize master info structure;

И всякое такое:

Need to reconfiguring replication

Пофиксилось тоже просто незаурядным способом.

stop slave;
reset slave;
start slave;

Проверяем статус репликации : 

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Ок, работает. 

Была еще интересная трабла сегодня. 

Прокся не отдавала контент - на серваке запущен сквид, iptables  никак не блочит - на серваке все работает. Телнетом  конекчусь к 80 порту - ответ есть, но реально ничего работать не холет. Колупался и так и сяк - все равно так как нужно работать не хочет.

Как оказалось - хостер до сервака перенаправлял 80 куда в лес.

code: joh6zoL4

пятница, 19 февраля 2010 г.

Cpanel - один сайт забирает под себя ip.

После выделения нового ip-адреса для cpanel после переноса на этот адрес первого аккаунта остальные домены не могут привязаться к нему - уже нету этого нового ip в списке ip-адресов.

Решается добавлением нового ip в список  /etc/ipaddrpool

После добавления можно вешать на него много адресов.

четверг, 11 февраля 2010 г.

Поиск и замена в VIM

Эта команда сэкономила мне тучу времени.
Чтобы найти слово или словосочетание в vim и заменить его на другое нужно использовать :
:%s/\<что_ищем\>/на_что_заменяем/gc

Красота. Вим сам находит нужное слово, заменяет на нужно. Все красиво и аккуратно.

Что означают элементы этой команды:
Команда состоит из:
:
Вход в командный режим

%
Выполнить эту команду на всех строках (% - синоним "от первой до последней строки".)

s
Сокращенная форма команды :substitute.

/\<что_ищем\>/
Здесь указываем нужный текст или слово, которое в последствии придется заменять. \ указывает на начало слова и \> - указывает на конец.

/на_что_заменяем/
здесь вводим тект, на который мы и будем заменять

gc
Флаги
g
Глобально -- Заменяет каждое вхождение, не используя "с начала и до конце" на каждой строке
c

Подтверждение -- Спрашивать перед каждой заменой


Чтобы не подтверждать замену каждого слова можно использовать эту команду без "с" в конце. Тогда vim заменит все вхождения слова в файле.

суббота, 6 февраля 2010 г.

DegradedArray event had been detected on md device /dev/md1.

A DegradedArray event had been detected on md device /dev/md1.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities : [raid1]
md1 : active raid1 sdb3[1]
465852800 blocks [2/1] [_U]

md0 : active raid1 sdb1[1]
20482752 blocks [2/1] [_U]

unused devices:

Говорит что распался рейд. Сегодня ночью случилось. Сейчас нашел что делать в таких случаях, буду читать, потом сюда брошу, если не забуду.

четверг, 4 февраля 2010 г.

DOS запрос одной страницы. Как вычеслить.

Если запрашивают одну страницу с сайта, но очень много раз, то довольно легко по логам посмотреть с какого ip это делают и прибить, если конечно делают с одного адреса.

Смотрим по логам кто у нас много запрашивает
tail -n 5000 /var/log/httpd/access.log | awk '{print $1}' | sort | uniq -c | sort -rn

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

Тоже самое делаем когда используется прокся - парсим, выделяем адрес ( в логах сквида выделяем awk '{print $3}'), сортируем, баним.


updated:
И вот еще положу на всякий, чтобы было под рукой.
netstat -ntu | awk '{print $5}' | sed -e '1d' -e '2d'|sort | uniq -c | sort -nr |head -n20
netstat -n -p | grep SYN_REC| awk '{print $5}'|awk -F: '{print $1}' | sort -n | uniq -c | sort -nr | head -n1

Очистка кэша.

find /var/www/site_on_cms_with_cache/dir/cache/ -type f -ctime +7 -path .svn -prune -print0 | xargs -r0 rm -fr