Зачем mysql: MySQL — это просто! | MySQL – MySQL — Википедия

Содержание

Mysql в windows 7 зачем он нужен

Вступление

Обращу внимание, в этой статье я ставлю, только MySQL Server (сервер базы данных) без визуальных «плюшек», MySQL Workbench, Connectors и т.д.

Зачем нужна отдельная установка сервера MySQL

Зачем нужна отдельная установка сервера? Например, для обучения работе с базами данных через «черный экран» командной строки. Или чтобы изучить команды SQL языка и «в прямом эфире» увидеть свои ошибки и поупражняться. Или для самостоятельной сборки локального сервера. Не важно, зачем это нужно, важно, что это можно сделать.

Что такое MySQL

Прежде чем заняться установкой сервера MySQL 5.7.11 на Windows 7 вспомним, что такое MySQL, зачем это нужно. Если вы в курсе, смело пропускайте первую, вступительную, часть.

Данный сайт посвящен созданию и разработке локальных сайтов, на всевозможных локальных серверах. В самом простом исполнении, вернее в самой простой сборке, локальный сервер это сборка трех компонентов: веб-сервер, система управления базами данных и интерпретированный динамический язык программирования. Данная сборка ставится под определенную операционную систему, которая стоит на вашем компьютере.

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

Одной из частей, локального сервера является СУБД (система управления базами данных). Для разработки и создания сайтов, вполне достаточно установить бесплатную СУБД MySQL компании Aracle. На март 2016 года актуальна версия MySQL 5.7.11.

Установка сервера MySQL 5.7.11 на Windows 7 поэтапная инструкция

Скачать MySQL 5.7.11 для Windows

Идем на официальный сайт продукта (http://www.mysql.com/downloads/) и страницу скачивания бесплатных компонентов (http://dev.mysql.com/downloads/).

При скачивании внимательно выбираем инсталлятор не путая тип системы компьютера bit-32 и bit-64 Windows 7. Хотя 32 битная программа будет работать на 64-битном процессоре.

Для скачивания выбираем MySQL Installer MSI

Для удобства из способов установки MySQL берем не ZIP архив, а MSI Installer. Это автоматический установщик, который через сеть закачает выбранные программные продукты. Недостаток файла – работает только на машинах подключенных к Интернет, компенсируется простотой установки.

Для скачивания MySQL можно нерегистрироваться

Напомню, посмотреть тип системы своей машины можно в меню Пуск→Компьютер→Свойства→Тип системы.

Проверка типа процессора на компьютере 2.

Запуск инсталлятора

Скачанный exe файл проверяем на вирусы, своей антивирусной программой. Если файл брали на официальном сайте он гарантированно безопасен.

Запускаем инсталлятор MySQL 3.

Побочная установка программных продуктов

Для установки сервера MySQL на компьютере должны быть установлены две обязательные программы:

  • .NET Framework 4
  • Visual Studio C++

По умолчанию Windows 7 уже укомплектован этими программами, правда версии могут быть поменьше.

При запуске инсталлятора MySQL он сообщит о необходимости установить нужные программные продукты. На сколько я помню, инсталлятор подкачает нужные программы. Если нет установите их самостоятельно. В этом нет ничего сложного, но можно почитать у меня:

  • Установить .NET Framework 4
  • Установить Visual Studio C++

4.

License Agreement

Продолжаем установку MySQL. Окно License Agreement. Это стандартное подписание лицензии.

установка сервера MySQL 5.7.11 на Windows 7 соглашение с лицензией 5.

Choosing a Setap Type

Именно на этом этапе, выбираем тип установки, вернее, устанавливаемый комплект MySQL.

  • Developer Default (MySQL Server, MySQL Workbench, Connectors в комплекте)
  • Server Only – выбираем и ставим его, только сервер.
  • Client Only
  • Full (MySQL Server, MySQL Workbench, Connectors на выбор)
  • Custom

Если вы четко понимаете, что делаете, можно выбрать, Custom и в наборе программных продуктов, выбрать нужную комплектацию.

По умолчанию СУБД будет установлена в папку: C:Program FilesMySQLMySQL5.7

Еще раз поясню, почему вам может пригодиться, установка Server Only. Например, вы на своем компьютере не используете Visual Studio или, изучаете язык SQL и хотите изнутри понять, как работать с базами данных из командной строки, а не «играть» в визуальные картинки.

Installation

Product Configuration

Type and Networking

На локальной машине MySQL поддерживает порт TCP/IP- ставим галочку;

Обратите внимание: Если поставить галочку в строке:

Open freewall port for network access (открытый порт брандмауэра для доступа к сети), то не нужно будет делать дополнительный разрешительных настроек в брандмауэре Windows 7.

Account and Roles

Здесь нам нужно задать пароль для работы в MySQL. Не будем нарушать традиций и ставим пароль: root. Кстати, без установки пароля на следующую страницу не попасть.

Задаем root пароль MySQL 10.

Windows Server

Это окно простых настроек запуска MySQL. Если нужно, чтобы сервер запускался с запуском машины, то выделяете чекбокс, как на фото. Если хотите запускать его по необходимости, чекбокс не выделяете (лучше галочку поставить).

Конфигурация MySQL для Windows server

Здесь тормозим: Смотрим на чекбокс: Show advanced options (показать дополнительные функции).

На следующей странице сервис наполнится конфигурацией, о чем сообщит зелеными галочками.

Установка завершена

Всё! Установка сервера MySQL 5.7.11 на ОС Windows 7, завершена. Можно сделать копию входа в буфер обмена и положить на рабочий стол.

установка сервера MySQL 5.7.11 на Windows 7 завершена

Запуск сервера MySQL

Установка сервера MySQL 5.7.11 на Windows 7 завершена. Проверяем правильность установки и запускаем сервер MySQL.

  • Жмем на иконку запуска сервера: MySQL Command Line Client – Unicode. Он там появится, если вы поставили галочку в пункте (10 Windows Server), в чекбоксе: Start the MySQL Server at System Startup.
  • Откроется «черное окно» приложения: MySQL5.7 Command Line Client.
  • Вводим пароль: root
    и работаем с СУБД из окон MySQL5.7 Command Line Client.

Пробуем первую команду: знак вопроса [?] или [help]. Сервер покажет элементарные служебные команды.

Если Вы видите такие термины как: MySQL, SQL, база данных, БД, database, DB, таблица, СУБД, то знайте, речь идет о БАЗЕ ДАННЫХ!
Конечно все это немного разные вещи, но если Вы в этом не разбираетесь, то не забивайте себе голову, в конце статьи расскажем кому интересно.

База Данных, как Вы уже могли догадаться, это ящик с информацией. В этот ящик информацию можно положить, удалить или найти. Любой сайт использует сервер для хранения данных, будь то список юзеров, комментарии посетителей, или счетчик посещений.
Но мы используем Базу Данных для сервера кс1.6. Для чего?
Например для статистики игроков, или список банов, админки и пароли тоже храним в базе.

Так почему бы не хранить все эти данные на сервере в файлах? Зачем нам какой то SQL?
Все очень просто!
Чтобы серверу получить необходимую информацию из файла, нужно прочитать сначала 1-ую строку, посмотреть есть в ней то что нужно, если нет то, 2-ую и тд, пока не найдет то что нужно.

MySQL же работает так: друг, я знаю где это лежит! Держи!

Круто да? Почему MySQL такая быстрая штука? Правильней сказать, что база данных это не ящик, а таблица. Смотрите как выглядит например статистика игроков:

Или вот так выглядит хранение банов:

Плагин посылает запрос в базу, типа: проверь, есть ли игрок со стим айди STEAM_0:0_123456789 в таблице `amx_bans` с не истекшим сроком бана
MySQL говорит: да, есть, вот такая причина бана и истечет срок через 10 дней. Плагин в свою очередь не пускает игрока на сервер.
Все данные в каждой колонке таблицы имеет свой тип: INT целое число, varchar текст, есть еще BOOL, FLOAT и куча других типов, их значения занимают мало места, благодаря «индексам» таблица сортируется и еще тонна всяких штук, благодаря которым из миллиона строк в таблице с банами, mysql найдет игрока меньше чем за секунду.
В файлах, на сервере кс, обычно хранят мало информации, потому что сервак просто зависнет если это будет не так. Помните да, что csstats.dat может очиститься и статистика игроков обнулится, этого не произойдет если использовать CsStats MySQL!

А где лежат эти таблицы MySQL?

MySQL это типа программа, запущенная на компе. Это такой же сервер как и Counter-Strike. Все популярные хостинги предоставляют своим клиентам доступ к Базе Данных.

Как подключиться к MySQL?

Разберем какие данные нужны для подключения сервера кс1.6 к mysql

  • IP сервера MySQL — это IP адрес на котором находится MySQL. Он может быть буквенный(mysql.hosting.ru) или цифровой(12.34.56.78)
  • DataBase — это имя базы данных, в которой будут находиться таблицы со статистикой игроков, банами и прочим
  • User — имя пользователя, который имеет доступ к базе данных DataBase и вносить в ее таблицы изменения и и тп
  • Пароль — пароль, чтобы никто кроме вас и вашего сервера не имел доступ

Эти данные вводите например в конфиг csstats_mysql.cfg, при первом включении плагин создает таблицу под названием csstats_players в базе данных DataBase. И потом уже добавляет в нее игроков.

Связь сервера и сайта через MySQL

Тут не совсем связь, сервер пишет статистику в MySQL, а сайт берет информацию из MySQL и показывает ее пользователю в красивом оформлении.

Просто сайт своими средствами не может получить доступ, например к csstats.dat, но легко может получить доступ к БД

Как посмотреть/изменить/удалить данные в базе?

Для этих целей есть инструмент под названием PhpMyAdmin.
Его предоставляет так же хостинг. Это веб панелька, заходите на нее через обычный браузер, вводите логин и пароль от базы данных и там увидите примерно следующее:

Тут можно создавать, удалять, очищать, обновлять и все все все.

Что такое SQL запросы?

Чтобы добавить/изменить/удалить или просмотреть запись в таблице, нужна сказать mysql чего мы хотим, человеческий язык он конечно не понимает, но понимает SQL запросы.
Чтобы добавить нового игрока в статистику игроков csstats_mysql, плагин посылает запрос:

Чтобы показать статистику игрока плагин шлет:

Это просто небольшие примеры SQL запросов, подробнее можете почитать в интернете.
Вы можете тоже слать SQL запросы в phpmyadmin, но вряд ли они Вам понадобятся, просто знайте 😉

Термины

• База Данных, БД, DataBase, DB — это все сама база данных, в ней хранится информация

• SQL — язык управления базами данных. То есть это и есть SQL запросы, которыми можно вносить изменения в базах
• СУБД — Система Управления Базами Данных. То есть это программа(сервер), которая управляет базами данных, принимает SQL запросы и тд. Есть много разных СУБД: SQLite, PostgreSQL, MySQL и другие. Самая популярная из них это MySQL
• MySQL — это СУБД, смотрите выше.
Старался писать простым, чтобы новички поняли суть. Более подробно можете почитать в интернете, информации на эту тему там много.

Ошибки MySQL, что они означают и как с ними бороться

Если в error_ логах Вы увидите ошибку, типа: Ошибка MySQL! или MySQL Error! и подобное, ЗНАЙТЕ! Это ошибка MySQL, а не плагина.
Если Вы не знаете английский, воспользуйтесь переводчиком, это не сложно.
Тут разберем несколько популярных ошибок

    Access denied for user ‘user’@’localhost’ (using password: YES)

Дата публикации: 2016-06-20

От автора: один мой товарищ за день умудрился сначала сорвать спину, когда ставил дома новый шкаф. А затем на работе «надорвал» себе мозги, когда пытался разобраться, как установить MySQL на Windows. В общем, спину я не смог вылечить, но вот ум его от «закипания» спас. Может, и кого-то из вас избавлю от головной боли, рассказав об установке СУБД.

Альтернатива Денверу?

И сразу может родиться встречный вопрос: зачем искать себе на «котелок» головную боль, если есть уже собранный и простой в установке набор, в состав которого входит «любимая» СУБД? Правильно! Не нужно искать головную боль там, где ее нет. Это сейчас у вас нет проблемы, связанной с установкой MySQL на Windows. Но может возникнуть, если:

Нужна только СУБД, а не весь набор целиком – возможно, вы надумаете еще сильнее углубиться в изучение MySQL. Ну, а PHP и веб-сервер пока не будут востребованы. При запуске Денвера получится, что эти составляющие набора буду крутиться сами по себе, постоянно «кушая» мощности аппаратной части компьютера. Особенно эта проблема остра для устаревших моделей портативных ПК. Я зная о чем говорю, поскольку долгое время использовал такой. Мой старый ноут «грузили» по полной пару открытых вкладок в браузере. В общем, каждый процент производительности был на счету.

Установка более новой версии – в состав Денвера входит актуальная версия MySQL, но иногда требуется самая новая версия. Например, для разработки БД под конкретное «издание» СУБД.

Модернизация системы управления учетными записями в phpMyAdmin – через данную программную оболочку, входящую в состав набора для джентльменов, можно работать только под одной учетной записью, которая установлена по умолчанию. То есть через root с пустым паролем. Но иногда нужно входить на сервер MySQL под другим пользователем, чтобы протестировать какой-нибудь запрос, триггер или хранимую процедуру. Конечно, можно через командную строку, но хочется работать «с комфортом» .

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Создание ADO приложений с использованием другого серверного языка – никто не спорит с тем, что «PHP и MySQL – forever». Но существуют и другие серверные языки программирования, для разработки приложений на которых может потребоваться установка MySQL на Windows 10 или другую версию ОС.

В общем, причин инсталляции отдельного экземпляра СУБД на клиентскую машину может быть множество: я лишь привел несколько из них. Теперь перейдем непосредственно к описанию процесса установки.

Скачиваем свой экземпляр

Дистрибутив СУБД на официальном ресурсе разработчиков доступен для скачивания в двух вариантах:

В виде автоматического пакета установки с расширением .msi – его мы рассматривали в одном из наших предыдущих материалов, поэтому пропустим его.

В форме бинарного кода, запакованного в ZIP – данный вариант мы и применим сегодня.

Также стоит отметить, что я буду производить установку MySQL на Windows 7, но для всех остальных (более «свежих») версий ОС эта инструкция также актуальна. Винда – она и в Африке винда . Стартуем! Переходим сюда и скачиваем нужный вариант архива. У меня 32-разрядная архитектура компьютера, поэтому скачиваю архив под эту версию операционки.

На следующем шаге будет предлагаться пройти регистрацию, но можно обойтись и без нее. Для этого жмите на ссылку ниже (отмечена на скриншоте). После чего начнется скачивание архива. Обратите внимание, что его размер больше 300 «метров». А такой объем для лимитного «3Г» интернета может оказаться неподъемным. Да и по скорости тоже – на это уйдет минут 40 точно.

После этого создаем директорию для установки и извлекаем в нее скачанный архив. Чтобы избежать путаницы в будущем, лучше осуществлять установку MySQL 5 6 в Windows сразу на диск C.

Редактируем файл конфигурации

Теперь находим в папке файл my-default.ini, и открываем его с помощью Блокнота. Сейчас займемся редактированием параметров нашего будущего сервера СУБД. Сначала прописываем пути к основной директории и папке, где будут храниться данные. А также указываем порт и кодировку:

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Рекомендуем к прочтению

Как понять, почему mysql ест очень много CPU? — Хабр Q&A

Здравствуйте.

Недавно переехали на новый сервер, сервис начал рости и при относительно небольшом увеличении количества онлайна сервис начал заметно подтормаживать. Загрузка страницы занимает 20-30 секунд, что не есть хорошо.

top показывает, что mysql ест больше всего памяти, практически всю. Использовал mysqltuner, всё стало хорошо, но спустя 2-3 дня снова начались проблемы.

Прикладываю конфиг my.cnf, графики munin'a и советы mysqltuner'a.

Mysql: Ver 8.42 Distrib 5.5.44, for debian-linux-gnu on x86_64

Дополню вопрос любыми сведениями, которые необходимы.
Надеюсь на помощь и развёрнутый ответ, дабы знать что и как следует делать правильно.

Munin:
socpult.ru/_munin/Munin.html

Конфиг:

# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
# 
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients


# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
#
# * Basic Settings
#
user        = mysql
pid-file    = /var/run/mysqld/mysqld.pid
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
lc-messages-dir = /usr/share/mysql
wait_timeout = 30
interactive_timeout = 30
tmp_table-size = 200M
max_heap_table_size = 200M
#skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer      = 256M
key_buffer_size = 10M
max_allowed_packet  = 8M
thread_stack        = 192K
thread_cache_size       = 16
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover         = BACKUP
max_connections        = 1200
open_files_limit = 4000
character-set-server = utf8
table_cache            = 2048
read_buffer_size = 64K
read_rnd_buffer_size = 2M
sort_buffer_size = 8M
thread_concurrency     = 10
#
# * Query Cache Configuration
#
query_cache_limit   = 400M
query_cache_size        = 300M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
general_log_file        = /var/log/mysql/mysql.log
general_log             = 8
#
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
#
# Here you can see queries with especially long duration
log_slow_queries    = /var/log/mysql/mysql-slow.log
long_query_time = 1
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id      = 1
#log_bin            = /var/log/mysql/mysql-bin.log
expire_logs_days    = 10
max_binlog_size         = 100M
#binlog_do_db       = include_database_name
#binlog_ignore_db   = include_database_name
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

innodb_buffer_pool_size = 50GB
innodb_additional_mem_pool_size = 20485760
innodb_thread_concurrency = 6
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_log_file_size = 64M
innodb_log_buffer_size = 32M
[mysqldump]
quick
quote-names
max_allowed_packet  = 16M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

[isamchk]
key_buffer      = 16M

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/

[mysqldump]
quick
quote-names
max_allowed_packet  = 16M

Что такое представления VIEWS в базах данных? И зачем они нужны? | Info-Comp.ru

Многие начинающие администраторы и программисты баз данных, да и просто системные администраторы, которые обслуживают некую базу данных, не знают что такое представление или VIEWS, и зачем вообще они нужны. Сейчас мы попробуем разобраться, что же это такое.

Начнем с небольшой теории.

Что такое VIEWS?

VIEWS – представление, или например в PostgreSQL они называются «Видами» (т.е. Вид), русские админы часто называют их вьюхами, т.е. одно представление это вьюшка. Она представляет собой хранимый запрос к базе данных, также ее можно назвать виртуальная таблица, но в этой таблице данные не хранятся, а хранится только сам запрос. Но, тем не менее, к вьюшке можно обращаться как к обычной таблице и извлекать данные из нее.

Мы с Вами говорим о базах данных, в которых используется язык SQL, исходя из этого, можно сделать вывод, что VIEWS можно создать на данном языке. Это очень распространенный объект в базе данных, поэтому во всех СУБД есть возможность создавать представления в графическом интерфейсе путем нажатия кнопки «Создать представление» или «Создать новый вид», а также, конечно же, с использованием инструкции «CREATE VIEW».

Но перед тем как учиться создавать вьюшки, давайте поговорим о том, зачем они нужны и какие преимущества они нам дадут.

Зачем нужны представления?

Одним из главных достоинством представлений является то, что они сильно упрощают взаимодействие с данными в базе данных. Допустим, Вам необходимо каждый раз делать сложную по своей структуре выборку, а как Вы знаете, запрос на выборку может быть, ну просто очень сложный и этому нет предела. И если не было бы вьюшек, то Вам приходилось бы каждый раз запускать этот запрос, или даже его модифицировать, например, для вставки условий. А так как у нас есть такие объекты как представления, нам этого делать не придется. Мы просто на всего создадим одну вьюшку, и потом уже к ней будем обращаться с помощью уже простых запросов, которые также можно делать сложными, если это необходимо.  Например, вьюшки также можно объединять с другими таблицами или другими представлениями.

К представлениям можно обращаться и из приложений, например, Вам нужно вывести какой-нибудь отчет, формирование которого требует каких-то расчетов, это легко можно реализовать путем написания необходимого запроса (в котором и будут рассчитываться данные, например из разных таблиц) и вставке этого запроса во вьюшку. А потом уже обращаться к этой вьюшке, например с помощью такого простого запроса как:

   
   SELECT * FROM TableName


Как создать представление VIEWS?

Теперь давайте поговорим о том, как создавать эти самые вьюшки. Во-первых, сразу скажу, что для этого необходимы знания SQL (для построения сложных запросов). Во-вторых, Вы за ранее должны определиться, что Вам необходимо вывести в результате того или иного запроса. Рассматривать процесс создания представления путем нажатия кнопок мы не будем, так это достаточно просто. Мы рассмотрим создание VIEWS с использованием языка SQL (хотя и это тоже просто).

Например, в PostgreSQL запрос создания представления будет выглядеть так:

   
   CREATE VIEW MyView 
   AS
        SELECT id, name, org
        FROM work.TableName


где,

  • CREATE VIEW – команда создания представления;
  • MyView – название Вашей будущей вьюшки;
  • SELECT id, name, org  FROM work.TableName – запрос на выборку.

Здесь мы использовали простой запрос на выборку, Вы в свою очередь можете писать любой запрос, даже с объединением нескольких таблиц и условий к ним.

Полный синтаксис команды CREATE VIEW (в PostgreSQL) выглядит следующим образом:

   
   CREATE [OR REPLACE]
        [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        VIEW view_name [(column_list)]
   AS select_statement
   [WITH [CASCADED | LOCAL] CHECK OPTION]


После того, как Вы создали представление, Вы можете к нему обращаться. А данные, которые будет выводить вьюшка, будут изменяться в зависимости от изменений данных в исходных таблицах, так как данные во вьюшке формируются при обращении к этому представлению. Исходя из этого, можно сделать вывод, что данные, которые выводит вьюшка, будут всегда актуальные.

У меня все, надеюсь, теперь у Вас есть представление о том, что такое VIEWS, пока!

Практический опыт обновления MySQL 5.7 до версии 8.0 / Habr

Недавно мы обновили свои сервера с MySQL 5.7 на 8.0.

Оставим за рамками этой статьи зачем и какие новые плюшки появились в MySQL 8.0, а вместо этого расскажем о том, с какими сложностями мы столкнулись в процессе обновления.

Во-первых, перед обновлением стоит посмотреть на список изменений и поправить свой конфиг-файл.

Как минимум, удалены следующие параметры:

innodb_file_format, innodb_file_format_check, innodb_file_format_max,innodb_large_prefix
query_cache_limit, query_cache_min_res_unit, query_cache_size, query_cache_type, query_cache_wlock_invalidate.

В параметре sql_mode удалён в частности NO_AUTO_CREATE_USER — что особенно важно, т.к. в MySQL 5.7 он был включен по-умолчанию.

Инструкция по in-place upgrade есть у Percona. И в общем случае можно следовать ей, однако нам удалось так обновить только один кластер, у остальных попытка такого обновления заканчивалась неудачно с подобной ошибкой:

2019-06-22T05:04:18.510888Z 1 [ERROR] [MY-011014] [Server] Found partially upgraded DD. Aborting upgrade and deleting all DD tables. Start the upgrade process again.
2019-06-22T05:04:23.115018Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2019-06-22T05:04:23.115655Z 0 [ERROR] [MY-010119] [Server] Aborting

Поэтому остальные кластеры мы обновляли путем поднятия нового пустого инстанса и восстановления дампа БД с предыдущей версии.

Чтобы сделать такое, во-первых, потребуется дамп БД. И тут поджидает опасность #1 — сделанный стандартным образом дамп:

mysqldump -u root -p --hex-blob --default-character-set=utf8mb4 --all-databases --triggers --routines --events > dump.sql

не восстанавливается, выдавая ошибку:
ERROR 3554 (HY000) at line 15915: Access to system table 'mysql.innodb_index_stats' is rejected.

Описание есть в багтрекере MySQL (со статусом Not a bug :), там же есть и совет как делать дамп, чтобы его таки можно было восстановить:
mysqldump -u root -p --hex-blob --default-character-set=utf8mb4 --all-databases --triggers --routines --events --ignore-table=mysql.innodb_index_stats --ignore-table=mysql.innodb_table_stats > dump.sql

Но при попытке использовать такой дамп, если в нём присутствовали триггеры (а у нас они были), может поджидать опасность #2, в виде вот такой ошибки:
ERROR 1231 (42000) at line 54: Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'

Причина этого в том, как MySQL использует sql_mode для триггеров, а именно: MySQL сохраняет значение sql_mode для триггера в момент его создания и выполняет его потом всегда с этим значением. И соответственно сохраняет это значение в дамп.

Описание этого в справке:

dev.mysql.com/doc/refman/8.0/en/create-trigger.html
MySQL stores the sql_mode system variable setting in effect when a trigger is created, and always executes the trigger body with this setting in force, regardless of the current server SQL mode when the trigger begins executing.

Что же нам делать? Мы просто с помощью sed вырезали NO_AUTO_CREATE_USER из готового дампа. Подобной командой:
sed "s/50003 SET sql_mode              = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER/50003 SET sql_mode              = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO/g" dump.sql > dump2.sql

После этого дамп успешно восстанавливается, но нас поджидает опасность #3 (вполне ожидаемая правда) — системные таблицы восстановлены в состоянии от версии 5.7 и в логах у нас следующие ошибки:
[ERROR] [MY-013143] [Server] Column count of mysql.user is wrong. Expected 51, found 45. The table is probably corrupted

По опыту работы с прошлыми версиями это лечится запуском mysql_upgrade — но начиная с версии 8.0.16 — это не работает, т.к. mysql_upgrade объявлен deprecated и ничего не делает.

Теперь, чтобы вызвать обновление системных таблиц, необходимо запустить MySQL с опцией upgrade=FORCE.

На свежей ubuntu это можно сделать следующим образом:

systemctl set-environment MYSQLD_OPTS="--upgrade=FORCE"

После чего перезапустить MySQL. Ну и после успешного обновления удалить её:
systemctl unset-environment MYSQLD_OPTS

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *