Category: mysql

Ноя 04 2008

MySQL client 4.0 connect to MySQL Server 5.0

Получилось так, что появилась необходимость, соеденятся клиентом MySQL 4.0 к MySQL серверу 5.0, и как и ожидалось получили:

Client does not support authentication protocol requested
by server; consider upgrading MySQL client

Read more »

Окт 30 2008

Настройка репликации MySQL

Настройку репликации начинаем с сервера-мастера, первым делом необходимо указать в /var/db/mysql/my.cnf(для версий MySQL<5.1) или в /usr/local/etc/my.cnf:
Read more »

Окт 26 2008

Бекап mysql

Бекап всего, что есть на сервере, вот от чего постоянно болит голова у системного администратора. Для резервного копирования баз mysql существует масса инструментов. Один из простых и эффективно работающих это AutoMySQLBackup. Он представляет из себя bash скрипт. В настройке он очень прост. После того как вы его скачаете с http://sourceforge.net/projects/automysqlbackup/ и распакуете, под FreeBSD необходимо сделать небольшие изменения, изначально начало скрипта выглядит так:

#!/bin/bash

Это надо изменить на:

#!/usr/local/bin/bash

Это мы изменили путь к командному интерпретатору bash, он находится немного в другом месте в FreeBSD, в отличии от Linux для которого и ведется разработка этого скрипта.
Далее приступим к настройке. Все настройки хранятся опять таки внутри скрипта:
1. Настраиваем авторизацию на доступ к mysql, находим строки и заменяем своими параметрами

# Username to access the MySQL server e.g. dbuser
#Имя пользователя для доступа к MySQL серверу
USERNAME=hilik
# Username to access the MySQL server e.g. password
#Пароль для доступа к MySQL серверу, если пароль 
#не установлен, то можно оставить пустым
PASSWORD=hilik
# Host name (or IP address) of MySQL server e.g localhost
#IP адрес или имя хоста на котором находится
#MySQL сервер
DBHOST=localhost

2. Перечисляем базы которые необходимо бекапить

# List of DBNAMES for Daily/Weekly Backup e.g. "DB1 DB2 DB3"
DBNAMES="mysql hilik"

3. В какой директории будем складывать бекапы

BACKUPDIR="/home/share/mysql-backup"

4. E-Mail для отчетов

MAILADDR="hilik@hilik.org.ua"

Далее идет секция дополнительных настроек. Как правило менять эти настройки нет необходимости.
Устанавливаем в крон на периодическое выполнение.

crontab -e

Устанавливаем выполнение на 0 часов, скрипт находится в /root/bin/:

0 0 * * * /root/bin/automysqlbackup.sh

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

mysql -uhilik -philik < hilik_2008-10-20_00h10m.Monday.sql

Здесь hilik_2008-10-20_00h10m.Monday.sql — это имя файла бекапа базы hilik, после распаковки.

Окт 19 2008

MySQL восстановление репликации

Бывает так, что репликация развалилась по причине того что данные уже есть в таблице.
команда
show slave status;
Указывает на ошибку Duplicate entry.
Что бы починить репликацию достаточно ввести 1 или если несколько записей дублируются, несколько раз:
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;SLAVE START;SHOW SLAVE STATUS;

Окт 19 2008

MySQL — repair таблицы при нехватке места

Случилась беда. Побилась табличка, подключились, втоптали repair table «имя таблицы» и обнаружили что на починку таблицы места не хватает, почистили место, но не тут то было, места по прежнему катастрофически не хватает. Более того, сервер в продакшене и перемещать таблицу в то место где мы можем его починить времени нет.

И после этого родилась такая идея, таблицу, а именно файлы с расширениями MYD, MYI и frm, имя файлов совпадает с именем таблицы, переместил в /var/db/mysql и натравил на него myisamchk -r, myisamchk создал временный файл имя_таблицы.TMD, после этого работу mysamchk оборвал, файл переместил в то место где есть место. Что бы все пошло как надо я поставил симлинку на него и перезапустил myisamchck вот так:

myisamchk -fr имя_таблицы

При этом, по окончании работы myisamchk честно переименовал симлинку в файл имя_таблици.MYD.
Теперь мы можем вернуть все файлы на место, переименовав файл TMD в MYD и расположив его на прежнем месте в директории базы либо так и оставив там поставив из директории базы симлинку на него.

Таким образом мы сэкономили время одного копирования и максимально быстро решили проблему.

Окт 18 2008

Grantы в mysql

Очень часто забываю как добавить пользователя к mysql, а делается это так:
1. Надо что бы пользователь hilik c паролем hilik c localhosta только читал (выполнял команду select) на базе hilik:

 grant select on hilik.* to 'hilik'@'localhost' identified by 'hilik';

2. Надо что бы пользователь admin с паролем admin c ip:192.168.0.4 имел полное управление базой admin

  grant all on admin.* to 'admin'@'192.168.0.4' identified by 'admin';

3. Надо что бы пользователь super c паролем super c ip: 192.168.0.5 имел полный доступ ко всем базам

    grant all on * to 'super'@'192.168.0.5' identified by 'super';

Украинская Баннерная Сеть