В системе FreeBSD mysql оптимизация.
В хозяйстве серверов у администратора всегда найдется сервер с повышенной нагрузкой на базу данных.
Расскажу, как я оптимизировал сервер баз данных, под управлением системы FreeBSD 10.1 .
Так как операционная память стоит дешево, то будит реализовывать большой кэш данных базы в памяти.
Нагруженная база обслуживает онлайн 150-300 человек и в сутки около 300 тыс. человек пользуется сервисом.
Отмечу, что софт mysql сервера это одно оптимизировать, но нельзя забывать и про саму базу и ее транзакции, их тоже нужно оптимизировать.
Установим mysql.
# cd /usr/ports/databases/mysql55-server/ && make install clean
Копируем конфигурационный файл, рассчитанный под средние нагрузки.
есть уже специально сконфигурированные файлы под определенные нагрузки сервера.
my-small.cnf — минимальные нагрузки, по умолчанию они используются.
my-medium.cnf — Настройки рассчитаные для средней нагрузки.
my-large.cnf — нагрузки, рассчитанные на большую нагрузку.
my-huge.cnf — Огромные нагрузки!
my-innodb-heavy-4G.cnf — для структуры innodb базы, большей 4Г.
# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
Оповестим систему, что мы хотим запускать сервис, mysql.
# echo 'mysql_enable="YES"' >> /etc/rc.conf
Запускаем mysql.
# service mysql-server start
В целях безопасности делаем пароль пользователю root.
# mysqladmin -u root password После вводим два раза новый пароль.
Теперь обезопасим наш mysql сервис.
Запускаем скрипт.
# mysql_secure_installation Вводим пароль и отвечаем на вопросы. В первом вопросе вас просят сменить пароль root, зачем? Мы его только сделали, отвечаем, Нет (N) На остальные 3-4 вопроса я отвечаю Да (Y)
Останавливаем mysql сервер для оптимизации.
# service mysql-server stop
Оптимизируем.
# cat /etc/my.cnf [client] port = 3306 socket = /tmp/mysql.sock # Правим mysqld раздел. [mysqld] # Говорим mysql, что бы он только обслуживал запросы внутри сервера, но и снаружи не принимал запросы. # Дополнительно можно порт 3306 закрыть в фаерволе. bind-address = 127.0.0.1 # порт port = 3306 # на нагруженных системах сетевые сервисы лучше переводить на сокетовый механизм. socket = /tmp/mysql.sock # Оповещаем mysql не использовать внешние блокировки при работе. skip-external-locking # определяем максимальное количество параллельных соединений к базе данных. # Если в логе mysql видим такие сообщения too many connections, то увеличиваем параметр на порядок! max_connections = 42 # Определяем размер буфера выделяемого под индексы. key_buffer_size = 16549M # Разрешаем загружаемый объем данных в базу данных за один запрос. max_allowed_packet = 180M # Определяем количество кэшируемых таблиц от баз данных. table_open_cache = 770 # определяем размер буфера сортировки для потока данных. sort_buffer_size = 9M # буфер под чтение таблиц. read_buffer_size = 6M # Сортировка запросов имеющие индексы. read_rnd_buffer_size = 10M # Максимальный размер таблицы, хранящейся в памяти. max_heap_table_size=82M # Определяем объем кэш под временные таблицы. tmp_table_size=82M # Максимальное количество открытых таблиц в кэше. table_cache = 770 # буфер для структур таблиц (.frm) файлов. Чем больше их в системе, тем больше значение. table_definition_cache = 770 # Определяем общий объем MyISAM таблиц для сортировки, создания индексов. myisam_sort_buffer_size = 13800M # Общий объем кэша. query_cache_size= 3900M # Устанавливает тип кэширования. Есть следующие значения: # 0 Не кэшировать. # 1 Кэшировать все запросы, за исключением, начинающихся с (SELECT S_NO_CACHE). # 2 Кэшируем только результаты, которые начинаются с (SELECT SQL_CACHE). query_cache_type = 1 # Определяем максимальный размер кэшируемого запроса. query_cache_limit= 125M # Минимальный размер блока находящего в кэше. query_cache_min_res_unit= 28 # Число кэшируемых потоков. thread_cache_size = 55 # Количество потоков, я указал равное количество ядер процессора. thread_concurrency = 12 # для криворуких архитекторов баз данных, ограничение на количество строк. max_join_size = 80000000 # Определяем количество байт из начала полей типа TEXT или BLOB использовать при сортировке. max_sort_length=624 # По умолчания используется один пул инстантов. # Оптимизация размера памяти для таблиц innodb, лоя хранения данных и индексов. innodb_buffer_pool_size = 4096M # Определяем количество инстантов, в нашем случае 4-ре инстанта по 1 гигабайту. innodb_buffer_pool_instances = 4 # Я использую серверные ссд диски фирмы интел 3500, выносливые диски. # С этим параметром осторожнее, это количество потоков обработки данных на диске. innodb_write_io_threads = 8 # Количество потоков на диске под чтение, максимум 8. innodb_read_io_threads = 8 # Количество рабочих тредов InnoDB. # Определяется так, количества ядер процессора*2 + количество физических блочных устройств. innodb_thread_concurrency = 12 # Не помню, что-то с размером индексного файла innodb. innodb_data_file_path = ibdata1:50M:autoextend # оповещаем сервер, что мы не хотим использовать сеть, говорим использовать только сокеты. skip-networking # Говорим серверу подключенные адреса не резолвить, типа использовать подключения к базе данных через локальный ип адрес 127.0.0.1 skip-name-resolve # Этот параметр говорит, сколько в связке серверов. server-id = 1 #slow_query_log = 1 #slow_query_log_file = /mnt/backLOG/log/mysql/mysqld-slow-query.log # Определяем временной лимит секунда, для отслеживания тяжелых запросов. long_query_time = 1 # Лог ошибок мускула. log_error = /mnt/backLOG/log/mysql/mysql-errors.log # размещения лога тяжелых запросов. log_slow_queries = /mnt/backLOG/log/mysql/mysqld-slow-query.log #log-queries-not-using-indexes # [mysqldump] quick # [mysql] no-auto-rehash # [myisamchk] # данные при проверки базы данных. key_buffer_size = 128M sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M # [mysqlhotcopy] interactive-timeout
Запускаем сервер mysql.
# service mysql-server start
Вот и все, вот такая в FreeBSD mysql оптимизация.
как правильно удалять пользователя в базе..
MariaDB phpmyadmin root.
Если говорить про мускул, то добавь в /etc/make.conf что-то подобное
.if ${.CURDIR:M*/databases/mysql51-*}
BATCH=yes
WITH_CHARSET=utf8
WITH_COLLATION=utf8_general_ci
WITH_XCHARSET=»cp1251 koi8r»
BUILD_OPTIMIZED=yes
BUILD_STATIC=yes
.endif
А лучше всего переходи на марию. Для нее надо что-то подобное
.if ${.CURDIR:M*/databases/mariadb-server}
BATCH=yes
WITH_CHARSET=utf8
WITH_COLLATION=utf8_general_ci
OPTIONS_UNSET=ARCHIVE
OPTIONS_SET=ARIADB
OPTIONS_UNSET=BLACKHOLE
OPTIONS_UNSET=FEDERATED
OPTIONS_UNSET=FEDX
OPTIONS_SET=HANDLERSOCKET
OPTIONS_UNSET=INNODB
OPTIONS_SET=MAXKEY
OPTIONS_SET=OPENSSL
OPTIONS_UNSET=OQGRAPH
OPTIONS_SET=PARTITION
OPTIONS_UNSET=PBXT
OPTIONS_UNSET=SPHINX
OPTIONS_UNSET=SSL
OPTIONS_UNSET=STATIC
OPTIONS_SET=XTRADB
.endif
а чё в вашей фряхе конфиг софтины из портов лежит в cat /etc/my.cnf?
Не понял!