Вопросы по MySQL

#1 2014.01.22 20:11:29

0

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

Как произвести оптимизацию хранилища в 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/*.
ISMmyisamchk -r --silent --sort-index -O sort_buffer_size=16M db_dir/*.MYI


Как бэкапить данные в 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 <база>)

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

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

Как добавить нового пользователя или БД в MySQL?
use 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','Y9;,'Y','Y','Y',�39;Y'); flush privileges;
или воспользоваться скриптом mysql_setpermission


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


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

Для обновления таблиц удобно пользоваться служебной утилитой Access2000 "Сервис / Служебные программы / Диспетчер связанных таблиц".

Как сделать таблицу Excel из таблицы MySQL?
#!/usr/local/bin/perluse 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' экселем.

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

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

Как разрешить пользователю доступ к базе данных?
GRANT ALL PRIVILEGES ON *.* TO usernameS@hostname IDENTIFIED BY 'userpassword' WITH ALL PRIVILEGES;

Как запретить пользователю операции с базой данных?
Revoke ALL PRIVILEGES on *.* from usernameS@hostname;

Как получить случайный ряд из таблицы MySQL?
SELECT * FROM table ORDER BY RAND() LIMIT 1;

Как выполнить поиск по регулярному выражению?
Вот например так
mysql> select rec_id from rec where rec_id regexp "^1[0]+$" limit 10;

rec_id
10
100
1000


Данный запрос выведет все записи в которых ключевое поле это степень десяти. Обратите внимание на то что регулярное выражение не имеет ограничителей !