Перейти к содержимому



Faq по Mysql

#1 Yandex

Yandex
  • Пользователь
  • 155 сообщений
  • Репутация: 3
2

Отправлено 26 Февраль 2008 - 16:21

Q. Что такое MySQL?
MySQL – сервер баз данных. MySQL характеризуется большой скоростью, устойчивостью и легкостью в использовании, является идеальным решением для малых и средних приложений.

Q. Где можно взять MySQL?
На официальном сайте http://www.mysql.com или на http://www.mysql.ru в разделе Download. Рекомендуем брать с сервера последнюю стабильную версию.

Q. Хочу изучать MySQL. С чего начать?
Советуем начать изучение с раздела документация. Из нее вы не только узнаете начальные сведения, но, и самое главное, освоите правильные приемы работы.

Технические вопросы:

Q: Как можно администрировать MySQl через веб-интерфейс?
О: Для этого существует оболочка под названием phpmyadmin. Даный скрипт представяет собой набор из нескольких небольших PHP скриптов, позволяющих администраторам легко создавать, управлять и обновлять базу даных MySQL. Официальный сайт данного продукта phpmyadmin. PhpMyAdmin является одной из самых распространенных оболочек под WEB для администрирования MySQL. Она поодерживает на данный момент 47 языков, которые скачать можно отсюда С документацик можно ознакомиться тут

Q. Как увеличить производительность выполнения mysqldump?
При дампе очень больших таблиц mysqldump пытается использовать очень большой объем ОЗУ.
Чтобы он этого не делал нужно использовать опцию "-q".

Q. Как определить и исправить повреждение MySQL базы?
Для тестирования повреждений рекомендуется выполнять: myisamchk tables[.MYI]
Параметры уровня проверки:
--medium-check - средний
--extend-check - расширенный

В crontab:
35 0 * * 0 /usr/local/mysql/bin/myisamchk --fast --silent /path/to/datadir/*/*.MYI
Внимание, myisamchk нужно запускать при _не_ запущенном mysqld, иначе нужно использовать утилиту mysqlcheck (mysqlcheck --repair --analyze --optimize --all-databases --auto-repair)

Восстановление таблицы:
REPAIR TABLE tbl_name или myisamchk -r table_name или myisamchk --safe-recover table_name

Q. Как произвести оптимизацию хранилища в MySQL?
Почистить "дырки" (дефрагментация), обновить статистику и отсортировать индексы:
OPTIMIZE TABLE имя_таблицы;
или использовать: myisamchk --quick --check-only-changed --sort-index --analyze
Внимание, myisamchk нужно запускать при _не_ запущенном mysqld, иначе нужно использовать утилиту mysqlcheck
(mysqlcheck --repair --analyze --optimize --all-databases --auto-repair)

Апдейт статистики оптимизатора:
ANALYZE TABLE имя_таблицы;
или использовать: myisamchk --analyze

Рекомендуется регулярно выполнять:
isamchk -r --silent --sort-index -O sort_buffer_size=16M db_dir/*.ISM
myisamchk -r --silent --sort-index -O sort_buffer_size=16M db_dir/*.MYI

Q. Как бэкапить данные в MySQL?
Бэкап структуры:
mysqldump --all --add-drop-table [--all-databases] --force [--no-data] [-c] --password=password --user=user [база] [таблицы] > backup_file
( -c - формировать в виде полных INSERT. --all-databases - бэкап всех баз, --no-data - бэкап только структуры таблиц в базах, [таблицы] - бэкапить только указанные таблицы.)

Восстановление: mysql < backupfile
(для прямой вставки из текстового файла можно воспользоваться mysqlimport)
(для анализа структуры базы, например, списка таблиц: mysqlshow <база>)

Q. Как обеспечить корректную работу MySQL с русскими символами при сортировке и выборке данных?
В /etc/my.cnf вписать в блоке [mysqld]: default-character-set=koi8_ru (или cp1251)

При работе с базой можно выставить рабочую кодировку через: SET CHARACTER SET koi8_ru

Q. Как добавить нового пользователя или БД в MySQL?

insert into user (host,user,password) values ('localhost', 'пользователь', password('пароль'));



insert into db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv, Drop_priv,Grant_priv,References_priv,Index_priv,Alter_priv) values ('localhost','БД','пользователь','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); 

flush privileges;

или воспользоваться скриптом mysql_setpermission

Q. Как изменить забытый MySQL административный пароль?
1. перезапустить mysqld с опцией --skip-grant-tables
2. mysqladmin -h хост -u пользователь password 'новый пароль'


Q. Как работать с базой данных MySQL из Access?
Необходимо скачать MyODBC и установить, после этого в Access в базе данных - "создать / связь с таблицами" - тип файлов указываем ODBC . Для обновления таблиц удобно пользоваться служебной утилитой Access2000 "Сервис / Служебные программы / Диспетчер связанных таблиц".

Q. Как сделать таблицу Exel из таблицы MySQL?
#!/usr/local/bin/perl
use DBI;
$table = "table"; $db = "base"; $db_serv = "192.168.0.1"; $user = "user"; $passwd = "password";
$c = DBI->connect("DBI:mysql:$db:$db_serv", $user, $passwd);
$statement = "select count(*) from $table";
$cc = $c->prepare($statement);
$ccc = $cc->execute;
@row = $cc->fetchrow_array;
$n = $row[0];
$statement = "select * from $table";
$cc = $c->prepare($statement);
$ccc = $cc->execute;
open F, "$ARGV[0]";
for ($i=0; $i<$n; $i++) {
@row = $cc->fetchrow_array;
print F "$row[0];$row[1];$row[3]n";
}

Запускаем скрипт:
./mysql_2_exel.pl file
После этого можно открыть файл 'file' экселем.

Q. Как поместить время в формате Epoch в MySQL?
from_unixtime(989493919)

Q. Как ограничить число элементов выдаваемых SELECT в MySQL?
Необходимо воспользоваться LIMIT. Первый параметр с какой записи, а второй сколько.
select * from table LIMIT 1,1;

Q. Как использовать базу данных MySQL в своей программе? (под Windows)
Подключите к проекту libMySql.lib, положите заголовочные файлы из поставки MySQL в директорию заголовочных файлов вашего компилятора, либо в каталог с программой, либо вообще куда душе угодно (лишь бы сами их не потеряли), libmysql.dll в каталог с программой, и пользуетесь функциями API MySQL, которые подробнейшим образом описаны в поставляемой вместе с сервером документацией. libmysql.lib и libmysql.dll берутся после установки дистрибутива MySQL в каталоге libopt.
libmysql.lib ОБЯЗАТЕЛЬНО должен работать с libmysql.dll ТОЙ ЖЕ поставки/версии. По этой причине НАСТОЯТЕЛЬНО НЕ рекомендуется хранить libmysql.dll в системном каталоге WINDOWS! Храните свою libmysql.dll в каталоге со своей программой.
Для C++ Builder получить libmysql.lib нужно импортом из libmysql.dll:
> implib libmysql.lib libmysql.dll

Из заголовочных файлов требуются:
mysql.h
mysql_com.h
mysql_version.h
В последних версиях ещё и my_alloc.h
Всё это добро берётся после установки дистрибутива MySQL в каталоге include.

Из всех в программе подключается только mysql.h. Перед ним обязательно должно быть подключен windows.h
#include <windows.h>
#include <mysql.h>

Особенности Билдеровского VCL: В программах, использующих VCL, компилятор ругается на my_socket, объявленную в mysql.h как #define my_socket SOCKET. Заменяем на #define my_socket UINT_PTR и всё работает. (SOCKET в winsock.h объявлен как typedef UINT_PTR SOCKET).

Q. Как получить размер таблицы (в бт, кбт.)?
1. Физический надо посмотреть размер 3 файлов на винте и сложить.
2. Фактический - получить количество строк, умножить на сумму объемов данных всех полей.
3. Реальный - получить все записи с данными и пройтись по ним, посчитав размер.
Подробнее смотрите здесь

Q. Программа вылетает с ошибкой "Too many connections" как мне быть?
Данное сообщение говорит о том, чтго вы превысили лимит разрешенных открытых одновременно коннекций к базе данных. Есть два пути решения:
первый - увеличить в настройках базы MySQL количество разрешенных коннектов; второй - проверить код вашей программы, чтобы после открытия коннекта к базе он всегда закрывался например для PHP это будет выглядить следующем образом:

mysql_close($dbh);

$dbh - коннект к базе.

Конкретные задачи и их решения:

Задача 1. Есть таблица, одно из полей, которое - TINYTEXT. Ячейки содержат строки из латинских букв и символа "_". Как вытащить список всех первых букв в этих ячейках.
Решение:

SELECT SUBSTRING( `pole` , 1 , 1 ) AS bukva FROM `table` GROUP BY `bukva`

Задача 2. Необходимо создать базу данных, предварительно проверив существует она или нет
Решение:

CREATE DATABASE IF NOT EXISTS db_name

Задача 3. Очень часто возникают вопорсы правельной сортировки полей с русскими буквами, ниже приведены некоторые решения данной проблемы
1. Надо убедиться в том, что в конфигурауционном файле MySQL стоит нужная вам кодировка и онаже назнваченна как кодировка по умолчанию;
2. Если тип поля, по которому производиться сортировка, varchar заменить его на другой тип, например, text. Т.к. этот тип поля вообще плохо работает с русскими буквами;
3. Если тип поля, по которому производиться сортировка, varchar поставить у него свойство binary.

Задача 4. Есть таблица adv где есть поле msg с типом TEXT из n символов. Нужно чтобы вывело список всех записей, в которых в поле msg встречается какая-то (в данном случае - dfdf) последовательность символов (это может быть словом или частью слова).
1. Решение от

SELECT * FROM adv WHERE msg LIKE '%dfdf%'

2. Посмотрите регулярные выражения... Like для поля TEXT это жестоко на самом деле, т.к. она сама по себе очень медленная - она будет работать, когда записей около 50000 быстро, а вот больше уже сдохнет сервер =(

 

 

  • 0

#2 Arukard1

Arukard1
  • Пользователь
  • 193 сообщений
  • Репутация: 0

Отправлено 30 Май 2009 - 18:13

Как вывести данные из БД в Эксель файл, спасибо за скрип на перле
  • 0

#3 FordogeN

FordogeN
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 02 Июль 2009 - 16:50

Яндекс, хорошо расписал - новеньким думаю оч поможет))
  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата




Оформление форума – IPBSkins.ru