Скрипт читает построчно из файла и создает базы с таким именем и юзером. Пароли к ним генерит.
Внимание к длине имени базы! (не больше 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
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
Проблема проявляется при апдейте (yum –enablerepo=remi update mysql) мускула с уже существующими таблицами. Выглядит она как сообщение: “cannot proceed because system tables used by Event Sheduler were found damaged at server start” при попытке сбэкапить базу.
Для починки:
При переносе базы с одного сервера на другой посмотреть в какой кодировке создана база (show create database base_name) и таблица (show create table table_name). Так же необходимо знать в какой кодировке были сами данные.
где latin1 – кодировка самих таблиц исходной базы, а не данных! Тогда при создании дампа данные не будут перекодироваться и отдадуться в правильном виде.
Далее надо открыть дамп в редакторе поддерживащем UTF8, например, в Notepad++ и проверить, что данные нормально читаются. Потом отредактировать этот дамп и поменять в операторах создания базы и таблиц latin1=>utf8. Потом уже заливать в новое место как UTF8.
ЗЫ. Если после всех этих телодвижений wordpress показывает кракозябры – надо прописать define(‘DB_CHARSET’, ‘utf8′); в wp-config.php
Конфига мускула зависят от размера базы, размера оперативы, характера нагрузки и тд.
Но для сервака порядка Xeon 5150 / 2GB и средней нагрузки можно для начала так:
[mysqld]
bind-address = 127.0.0.1
datadir=/home/mysql/myisam
port = 3306
socket = /tmp/mysql.sock
skip-locking
Для выявление тормозных запросов можно использовать 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 – количество запросов, которые находятся в кеше.
После начала эксплуатации еще хорошо посмотреть что о настройках скажет
Важный момент (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