Показаны сообщения с ярлыком MySQL. Показать все сообщения
Показаны сообщения с ярлыком MySQL. Показать все сообщения

вторник, 17 декабря 2013 г.

Полезные команды MySQL

Моя подборка полезных команд для MySQL.

Узнать размер базы данных

SELECT table_schema "DB Name",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
FROM   information_schema.tables
GROUP  BY table_schema
ORDER BY Round(Sum(data_length + index_length) / 1024 / 1024, 1) DESC;

Выводим 15 наиболее фрагментированных таблиц

SELECT CONCAT(TABLE_SCHEMA, ":",TABLE_NAME) AS TABLENAME, 
ROUND(DATA_FREE * 100/ DATA_LENGTH,1) AS FRAG_PERCENTAGE 
FROM information_schema.tables 
ORDER BY FRAG_PERCENTAGE DESC
LIMIT 15;
где FRAG_PERCENTAGE - соотношение свободного места в таблице к занятному.
Стоит заметить, что этот метод не работает, когда вы используете InnoDB таблицы без включенной опции innodb_file_per_table. Когда эта опция выключена, все таблицы innodb хранятся в одном файле: /var/lib/mysql/ibdata1. В таком случае результат будет одинаков для всех таблиц. Дефрагментация в данном случае тоже поможет, все таблицы и индексы будут упорядочены в этом файле, однако файл ibdata1 всё равно будет занимать столько же места, сколько и до дефрагментации (просто свободное место в нём будет упорядочено и аккуратно размечено:) ).
Чтобы можно было получать адекватные значение по каждой InnoDB таблице, надо выполнить следующее:
  • Сделать дамп всех баз
  • Включить опцию innodb_file_per_table
  • Удалить файл /var/lib/mysql/ibdata1
  • Залить обратно дамп
Ниже более интересная команда:

Выводим 15 наиболее фрагментированных таблиц, их размер и движок

SELECT CONCAT(TABLE_SCHEMA, ":",TABLE_NAME) AS TABLENAME,
ROUND(DATA_FREE * 100/ DATA_LENGTH,1) AS FRAG_PERCENTAGE,
ENGINE , (DATA_LENGTH+INDEX_LENGTH)/(1024*1024) AS "SIZE (MB)" 
FROM information_schema.tables 
ORDER BY FRAG_PERCENTAGE DESC 
LIMIT 15;

Дефрагментируем таблицы

Для этого достаточно выполнить команду:
OPTIMIZE TABLE tablename
где tablename - название дефрагментированной таблицы. Стоит заметить, что для InnoDB таблиц OPTIMIZE TABLE - всего лишь обертка для ALTER TABLE tablename ENGINE="INNODB", которая перестраивает таблицу и оптимизирует индексы.

понедельник, 9 мая 2011 г.

Простой скрипт для бэкапа MySQL баз

#!/bin/bash

# Variables
CNF=/etc/mysql/debian.cnf
BACKUPDIR=/var/backups/mysql/
DATE=`date +%F`
OLDDAYS=7

# Main part
for DATABASE in `echo SHOW DATABASES | mysql --defaults-file=${CNF} --skip-column-names`;do
BACKUPNAME=${BACKUPDIR}${DATABASE}.sql.${DATE}
BZBACKUPNAME=${BACKUPNAME}.bz2
echo Dumping ${DATABASE} into ${BZBACKUPNAME}
mysqldump --defaults-file=${CNF} ${DATABASE} > ${BACKUPNAME}; bzip2 -f ${BACKUPNAME}
done

# Deleting old backups

find ${BACKUPDIR} -mtime +${OLDDAYS} -delete


Дампит и сжимает базы данных.
Можно (и нужно) добавить его в крон, например:
00 05 * * * root /usr/local/sbin/mysqlbackup.sh

P.S. Ах да, это юбилейный, сотый пост в моём бложике:) 

среда, 22 декабря 2010 г.

Сброс root-пароля для mysql

Иногда случается такое, что теряется рутовый пароль от mysql. В таком случае, его можно сбросить  на новые. О том, как это сделать, можно прочитать в этой статье.

воскресенье, 6 декабря 2009 г.

Взаимодействие PHP и MySQL

В этом посте расскажу о том, как с помощью PHP осуществлять запросы к базе данных на основе MySQL. Использовать для этого будем web-сервер apache 2 с установленным модулем PHP. Все эти три компоненты практически бесплатны и распространяются под лицензией GNU. Подробнее о том, как устанавливать PHP, Apache и MySQL постараюсь написать в одной из следующих статей. Сейчас же представим, что все это уже установлено и сконфигурировано у вас дома, либо вы используете хостинг с поддержкой PHP и MySQL.
Итак, пусть у нас в MySQL есть база world, а в ней таблица people с полями name и age, где name - это имя, а age - возраст человека. И мы ставим себе целью выбрать из этой таблицы всех людей моложе 20 лет. Очевидно, для этого нам надо использовать запрос SELECT.
Начнем. Создаем в папке, которую Apache считает корневой, файл со следующим содержанием
<!DOCTYPE html>
<html>
<head>
<title>Запрос к базе данных</title>
</head>
<body>
<?
//прописываем параметры для соединения с БД
$hostname='localhost';//Имя хоста с БД MySQL, в нашем случае это localhost
$dbName='world';//Имя базы данных, которая нам нужна
$dbUser='username';//Имяпользователя MySQL
$dbPasswd='password';//Его паролт
$dblink=mysql_connect($hostname,$dbUser,$dbPasswd) or exit (3); //Соединяемся с сервером или ошибка
$db_selected=mysql_select_db($dbName,$dblink) or exit(3);//Выбираем БД world
//Подготавливаем наш запрос SELECT
$query="SELECT * FROM people WHERE people.age<20";
//Отправляем запрос в базу
$result=mysql_query($query,$dblink);
//Функция mysql_query отправляет запрос $query по указателю $dblink на базу.
//Обрабатываем результат
while ($man=mysql_fetch_array($result))
//Функция mysql_fetch_array обрабатывает результат, занося по строчке из него в ассоциативный массив $man по полям, которые называются так же, как заголовки столбцов в MySQL
{
 echo "Name = ".$man['name']." Age= ".$man['age']."<br>";//выводим каждую строчки из результата на экран
};
?>
</body>
<html>
Сохраняем этот файл как testquery.php и переходим браузером по адресу http://your_host_name/testquery.php
Все готово) Apache запускает PHP скрипт, и тот выводит нам внутри вашей веб-страницы содержимое таблицы MySQL.