Archive

Posts Tagged ‘mysql’

Простой бэкап MyISAM таблиц MySQL без остановки сервера

April 14th, 2010

Суть в том, что мы не прерываем выполнение запросов на чтение, но в то же время получаем консистентный бэкап.
Делаем:

mysql -p

В mysql-консоли:

FLUSH TABLES WITH READ LOCK;

Ждем пока выполнится запрос.
В другой консоли просто копируем папку с нужной базой (базами) в бэкап.
В mysql-консоли:

UNLOCK TABLES;

mysql

Базовая установка LAMP в Debian

June 7th, 2009

Ставим апач:

apt-get install apache2 php5 libapache2-mod-php5 php5-curl

Конфиги в /etc/apache2/
Для добавления виртуалхоста создаем его конфиг (domain.com) в /etc/apache2/sites-available/ и:

a2ensite domain.com

Для выключения:

a2dissite domain.com

Для включения модулей апача:

a2enmod rewrite

Ставим мускул:

apt-get install mysql-server mysql-client php5-mysql

Конфиги в /etc/mysql/

Ставим nginx:

apt-get install nginx

linux , , , ,

Обслуживание и восстановление баз MySQL

May 25th, 2009

Проверка и восстановление всех баз:

mysqlcheck --repair --analyze --all-databases --auto-repair

Оптимизация всех таблиц всех баз:

mysqlcheck --all-databases --optimize

mysql ,

Скрипт создания mysql-баз по списку из файла

May 18th, 2009

Скрипт читает построчно из файла и создает базы с таким именем и юзером. Пароли к ним генерит.
Внимание к длине имени базы! (не больше 16 символов)

#!/bin/bash

SQLUSER=root
SQLPASS=password

cat /home/admin/bases | while read base; do

    PASS=`< /dev/urandom tr -dc A-Za-z0-9 | head -c15`

    echo "CREATE DATABASE $base;"|mysql --password=$SQLPASS
    echo "GRANT ALL PRIVILEGES ON $base.* TO "$base"@"localhost" IDENTIFIED BY \"$PASS\";"|mysql --password=$SQLPASS

    echo "User: $base Password: $PASS"

done

echo "FLUSH PRIVILEGES;" | mysql --password=$SQLPASS

mysql

Сбросить пароль в MySQL

April 13th, 2009
echo "skip-grant-tables" >> /etc/my.cnf
service mysqld restart
mysql
UPDATE mysql.user SET PASSWORD=PASSWORD('5Z2LMG0xpa') WHERE user='root' AND host='localhost';
quit
Удалить строчку из /etc/my.cnf
service mysqld restart

mysql

Проблема при переходе с MySQL 5.0 на MySQL 5.1

March 30th, 2009

Проблема проявляется при апдейте (yum –enablerepo=remi update mysql) мускула с уже существующими таблицами. Выглядит она как сообщение: “cannot proceed because system tables used by Event Sheduler were found damaged at server start” при попытке сбэкапить базу.
Для починки:

mysql_upgrade -f -p -v
service mysqld restart

mysql

MySQL, mysqldump и кодировки

March 9th, 2009

При переносе базы с одного сервера на другой посмотреть в какой кодировке создана база (show create database base_name) и таблица (show create table table_name). Так же необходимо знать в какой кодировке были сами данные.

сделать дамп:

mysqldump -ubackup -pPassword base_name --allow-keywords --create-options --complete-insert --default-character-set=latin1 --add-drop-table --single-transaction > ./base_name.sql

если заливать надо будет на MySQL 4 то так:

mysqldump -ubackup -pPassword base_name --allow-keywords --create-options --complete-insert --default-character-set=latin1 --add-drop-table --single-transaction --skip-add-locks --skip-disable-keys --no-tablespaces > ./base_name.sql

где latin1 – кодировка самих таблиц исходной базы, а не данных! Тогда при создании дампа данные не будут перекодироваться и отдадуться в правильном виде.

Далее надо открыть дамп в редакторе поддерживащем UTF8, например, в Notepad++ и проверить, что данные нормально читаются. Потом отредактировать этот дамп и поменять в операторах создания базы и таблиц latin1=>utf8. Потом уже заливать в новое место как UTF8.

ЗЫ. Если после всех этих телодвижений wordpress показывает кракозябры – надо прописать define(‘DB_CHARSET’, ‘utf8’); в wp-config.php

mysql , ,

установка и запуск mysql, оптимизиция производительности

December 9th, 2008
cd /usr/ports/databases/mysql50-server && make install

базы будем держать в /home/mysql

echo "mysql_enable="YES"" >> /etc/rc.conf
echo "mysql_dbdir="/home/mysql/"" >> /etc/rc.conf

копируем my.cnf

mkdir /home/mysql
mkdir /home/mysql/tmp
chown -R mysql /home/mysql/
chmod -R 755 /home/mysql/

Конфига мускула зависят от размера базы, размера оперативы, характера нагрузки и тд.
Но для сервака порядка Xeon 5150 / 2GB и средней нагрузки можно для начала так:

[mysqld]
bind-address = 127.0.0.1

datadir=/home/mysql/myisam
port        = 3306
socket      = /tmp/mysql.sock
skip-locking

key_buffer = 128M
max_allowed_packet = 8M
table_cache = 1024
sort_buffer_size = 32M
read_buffer_size = 32M
read_rnd_buffer_size = 16M
myisam_sort_buffer_size = 64M
thread_cache_size = 30
query_cache_size = 128M
join_buffer_size = 8M
max_connections = 100
max_connect_errors=10000
thread_concurrency = 4 #Try number of CPU's*2 for thread_concurrency
net_buffer_length = 32K
expire_logs_days = 10
log_warnings = 1
wait_timeout = 100
interactive_timeout = 100
concurrent_insert = 2
tmp_table_size = 32M
max_heap_table_size = 32M
myisam-recover=backup,force

tmpdir  = /home/mysql/tmp/

Для выявление тормозных запросов можно использовать slow log, mytop.
Посмотреть эффективность кэширование:

mysqladmin extended-status | egrep Qcache

Qcache_free_blocks показывает сколько свободных блоков есть в кеше;
Qcache_total_blocks – количество занятых блоков;
Qcache_free_memory говорит о том, сколько свободной памяти осталось в кеше;
Qcache_hits – количество запросов, результаты которых были взяты из кеша;
Qcache_inserts – количество запросов, которые были добавлены в кеш;
Qcache_lowmem_prunes – количество запросов, которые были удалены из кеша из-за нехватки памяти;
Qcache_not_cached – количество запросов, которые не были записаны в кеш из-за использования функций работы со временем и т.п.;
Qcache_queries_in_cache – количество запросов, которые находятся в кеше.

После начала эксплуатации еще хорошо посмотреть что о настройках скажет mysqltuner

Оптимизация таблиц:

mysqlcheck --repair --analyze --optimize --all-databases --auto-repair

Важный момент (FreeBSD):
Необходимо следить, чтобы размер процесса mysqld не превысил максимального размера памяти доступного для одного процесса. Если используется FreeBSD c архитектурой i386, то по умолчанию этот размер равен 512MB. Если произойдет превышение, то в логе мускуля будут такие сообщения: “/usr/local/libexec/mysqld: Out of memory (Needed 2375270 bytes)”. Чтобы увеличить это значение необходимо сделать kern.maxdsiz=1073741824 в /boot/loader.conf
Посчитать объем памяти, который займет mysqld можно по этой формуле: key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections

mysql ,

mysql лог медленных запросов

December 9th, 2008
long_query_time=2
log-slow-queries=/var/log/slowquery.log
# log_queries_not_using_indexes = 1
touch /var/log/slowquery.log
chmod 777 /var/log/slowquery.log

mysql ,