PDA

Просмотр полной версии : Часто задаваемые вопросы по MySQL


Серый
28.12.2006, 17:44
Может уже кто и писал,может для половины из вас ето смешно но тем не менее читаем :) Может комуто пригодитса!

Общие вопросы:

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,Al ter_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 в каталоге lib\opt.
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. Реальный - получить все записи с данными и пройтись по ним, посчитав размер.
Подробнее смотрите здесь

Часть материала взята с сайта www.mysql.ru

blaga
28.12.2006, 17:57
Q. Хочу изучать MySQL. С чего начать?
Советуем начать изучение с раздела документация. Из нее вы не только узнаете начальные сведения, но, и самое главное, освоите правильные приемы работы.
Интересно, а где это у нас раздел такой? Копипаст ИМХО.

_Great_
28.12.2006, 18:01
MySQL характеризуется большой скоростью, устойчивостью и легкостью в использовании, является идеальным решением для малых и средних приложений.
угу, то-то его задосить проще всего :P
А вообще SQLite быстрее вроде как, потому что mysql использует сетевую подсистему ОС, даже если запущен локально. От этого падает скорость работы

guest3297
28.12.2006, 18:08
ладно за скрипт спасибо.

blaga
28.12.2006, 18:10
Точно быстрее. Потому как SQLite не подключается к серваку БД а сам является серваком, читая таблицы прямо с харда. Зато - лайта в том что мы не можем хранить PHP скрипты использующие ее на одном сервере а саму БД на другом. К тому же лайт работает с таблицами напрямую а не через сетевые сокеты как MySQl. (с) Дмитрий Колисниченко

_Great_
28.12.2006, 18:26
ну вот и я о чем)