Что такое база данных mysql – Создание базы данных MySQL | IT-блог о веб-технологиях, серверах, протоколах, базах данных, СУБД, SQL, компьютерных сетях, языках программирования и создание сайтов.

Содержание

Работа с базой данных MySQL

Перечень статей раздела Работа с БД MySQL:

Статья 1 сборника 2017-06-21

Создаем базу данных MySQL

  • Зачем нужна база данных
  • Что из себя представляет база данных MySQL
  • Создаем базу данных на локальном веб-сервере Denwer
  • Создаем базу данных на хостинге

Здравствуйте уважаемый посетитель!

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

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

А для того, чтобы в дальнейшем иметь возможность полноценно развивать сайт нам будет не обойтись без рассмотрения такого важного вопроса, как работа с базой данных MySQL (в дальнейшем для обозначения базы данных MySQL будет также встречаться аббревиатура «БД»).

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

Дальше, по ходу работ, будем формировать необходимые таблицы и скрипты, которые будут выполнять функцию хранения и обработки данных, получаемых при работе определенных блоков сайта.

Статья 2 сборника
2017-06-27

Подключаем базу данных MySQL с использованием процедурного и объектно-ориентированного стиля MySQLi

  • Общие вопросы по подключению к БД
  • Отличие в подключении к БД на локальном веб-сервере и на хостинге
  • Подключение к базе данных с использованием процедурного интерфейса
  • Подключение к базе данных объектно-ориентированным стилем
  • Исходные файлы сайта

Здравствуйте уважаемый посетитель!

Сегодня будем заниматься подключением базы данных MySQL, которую создали в прошлой статье, через PHP с помощью современного модуля MySQLi. Особенность этого расширения в том, что в отличие от устаревшего MySQL, оно поддерживается всеми актуальными версиями PHP, включая последнюю 7.0.

Причем делать это будем двумя вариантами, используя, как привычной процедурный интерфейс (наподобие функций, которые использовались в старом расширении MySQL), так и объектно-ориентированный стиль взаимодействия с MySQL.

Оба эти варината рабочие, а каким пользоваться, может каждый выбрать для себя самостоятельно, кому какой будет удобнее…

Статья 3 сборника 2017-07-02

Создаем таблицы MySQL c помощью phpMyAdmin, SQL-команд и в PHP

  • Определение основных параметров создаваемой таблицы
  • Создание таблицы с помощью интерфейса phpMyAdmin
  • Создание таблицы с помощью SQL-запросов
  • Создание таблицы MySQL в PHP
  • Исходные файлы сайта

Здравствуйте уважаемый посетитель!

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

В данной статье будут рассмотрены три возможных способа создания таблиц MySQL, а именно: с использованием интерфейса phpMyAdmin, c помощью SQL-запросов, а также используя модуль MySQLi PHP.

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

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

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

Третий способ — через PHP, встречается значительно реже, в основном, при необходимости создания таблиц программно, при выполнении каких-либо алгоритмов.

Также следует учесть, что порядок создания таблиц MySQL на локальном веб-сервере Denwer аналогичен и, практически, ничем не отличается от тех процедур, которые выполняются на хостинге. Поэтому, все выполняемые здесь действия будут проводиться на локальном веб-сервере. Повторения же подобных операций на хостинге рассматриваться не будет.

Наверное, такой значительный объем материала следовало бы разбить на три отдельных статьи. Но, собранная информация по этой теме в одном месте, думаю, будет более удобна для ее использования…

Статья 4 сборника 2017-07-10

Вводим и копируем данные в БД  MySQL с помощью phpMyAdmin

  • Ввод данных в таблицу с помощью интерфейса phpMyAdmin
  • Создание копии таблицы MySQL на локальном веб-сервера
  • Импорт таблицы MySQL в БД хостинга
  • Исходные файлы сайта

Здравствуйте уважаемый посетитель!

Сегодня будем вводить данные в таблицы MySQL с использованием интерфейса phpMyAdmin на локальном веб-сервере Denwer самым простым способом, в ручную, выбирая с помощью клавиатуры необходимые поля и записывая в них нужную информацию.

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

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

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

Статья 5 сборника 2017-07-16

Записываем данные MySQL с использованием SQL-запросов

  • Формирование SQL-запроса
  • Выполнение SQL-запроса в phpMyAdmin
  • Исходные файлы сайта

Здравствуйте уважаемый посетитель!

Сегодня, в отличие от предыдущей статьи, будем записывать на локальном веб-сервере аналогичную информацию в таблицу MySQL не в ручную в веб-приложении phpMyAdmin, а с помощью специальных команд на языке SQL (SQL-запросы).

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

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

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

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

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

Поэтому, все рассматриваемые здесь способы записи данных хороши каждый по-своему, и каждый способ в какой-то момент может быть использован при работе с базой данных MySQL.

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

Учитывая, что объем материала при таком довольно подробном рассмотрении не позволяет изложить его в одной статье, то данную тему по записи данных в таблицы MySQL пришлось разбить на три отдельные статьи…

Статья 6 сборника 2017-07-21

Записываем данные MySQL с использованием PHP

  • Записываем данные одной строки в таблицу MySQL
  • Составляем PHP-скрипт для записи всех строк таблицы
  • Составляем отдельную функцию записи данных в таблицу url_php
  • Исходные файлы сайта

Здравствуйте уважаемый посетитель!

В предыдущих статьях мы рассмотрели возможность ввода данных MySQL в веб-интефейсе phpMyAdmin двумя способами — в ручную, записывая информацию в каждую ячейку таблицы и с помощью подготовленного SQL-запроса. Сегодня же рассмотрим еще один вариант, используя для этого PHP.

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

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

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

А в завершении, преобразуем полученный PHP-скрипт, выделив из него фрагмент запроса к базе данных в отдельную функцию.

Такое подробное рассмотрение обусловлено тем, что при практической реализации составления различных программ, связанных с работой сайта, нередко приходится использовать подобные решения.

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

Статья 7 сборника 2017-07-26

Выводим данные из БД MySQL с помощью SQL-запросов

  • Выборка одиночной уникальной строки с заданным условием
  • Получение набора нескольких строк с сортировкой по заданному полю

Здравствуйте уважаемый посетитель!

В предыдущих статьях мы рассмотрели возможность записи данных в БД MySQL тремя разными способами:

  1. в веб-интефейсе phpMyAdmin, записывая в ручную информацию в каждую ячейку таблицы;
  2. с помощью подготовленных SQL-запро

Как перечислить все базы данных в MySQL

Мы покажем вам, как перечислять все базы данных в MySQL. MySQL – это система управления реляционными базами данных с открытым исходным кодом, обычно используемая с веб-приложениями, такими как WordPress, Magento и т. Д. В этом уроке мы покажем вам, как перечислять все базы данных в MySQL на Linux VPS .

Прежде чем вы начнете перечислять все таблицы в MySQL, убедитесь, что у вас есть полный доступ к вашему серверу Linux, или, по крайней мере, у вас есть системный пользователь с привилегиями sudo, которые вы можете использовать для подключения к вашему серверу. После подключения к серверу через SSH выполните следующую команду, чтобы проверить, установлен ли сервер базы данных MySQL на вашем VPS, и какова версия:

mysql -V

 

Результат команды должен быть аналогичен выходу:

# mysql -V
mysql  Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using  EditLine wrapper

 

Затем, чтобы подключиться к серверу базы данных MySQL через командную строку, как пользователь root, выполните следующую команду:

mysql -u root -p

 

MySQL попросит вас ввести пароль для пользователя root. Введите пароль и нажмите Enter. Если вы еще не настроили пароль для пользователя root, вы можете использовать следующую команду:

mysql -u root

 

Конечно, всегда рекомендуется поддерживать безопасность ваших сервисов, поэтому, если вы еще не настроили пароль для root в MySQL, вы можете сделать это сейчас, используя команду mysql_secure_installation без аргументов:

mysql_secure_installation

 

Затем ответьте на вопросы безопасности следующим образом:

Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No: y

Please set the password for root here.
New password:

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

All done!

 

Затем подключитесь к серверу базы данных MySQL с помощью пользователя root и введите новый пароль root.

Чтобы перечислить все базы данных в MySQL, выполните следующую команду:

mysql> show databases;

 

Эта команда будет работать для вас независимо от того, есть ли у вас Ubuntu VPS или CentOS VPS.

Результат команды должен быть аналогичен выходу:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

 

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

mysql> use mysql;

 

Чтобы перечислить таблицы, вы можете использовать следующую команду:

mysql> show tables

 

Таблицы будут перечислены в следующем формате:

mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
32 rows in set (0.00 sec)

 

Если вы хотите узнать о структуре конкретной таблицы, вы можете использовать инструкцию DESCRIBE в MySQL:

mysql> DESCRIBE user;

 

На выходе будет отображаться информация о каждом из столбцов в таблице.

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Основы репликации в MySQL / Habr

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

Небольшое введение

Репликация (от лат. replico -повторяю) — это тиражирование изменений данных с главного сервера БД на одном или нескольких зависимых серверах. Главный сервер будем называть мастером, а зависимые — репликами.
Изменения данных, происходящие на мастере, повторяются на репликах (но не наоборот). Поэтому запросы на изменение данных (INSERT, UPDATE, DELETE и т. д.) выполняются только на мастере, а запросы на чтение данных (проще говоря, SELECT) могут выполняться как на репликах, так и на мастере. Процесс репликации на одной из реплик не влияет на работу других реплик, и практически не влияет на работу мастера.
Репликация производится при помощи бинарных логов, ведущихся на мастере. В них сохраняются все запросы, приводящие (или потенциально приводящие) к изменениям в БД (запросы сохраняются не в явном виде, поэтому если захочется их посмотреть, придется воспользоваться утилитой mysqlbinlog). Бинлоги передаются на реплики (бинлог, скачанный с мастера, называется «relay binlog «) и сохраненные запросы выполняются, начиная с определенной позиции. Важно понимать, что при репликации передаются не сами измененные данные, а только запросы, вызывающие изменения.
При репликации содержимое БД дублируется на нескольких серверах. Зачем необходимо прибегать к дублированию? Есть несколько причин:
  • производительность и масштабируемость. Один сервер может не справляться с нагрузкой, вызываемой одновременными операциями чтения и записи в БД. Выгода от создания реплик будет тем больше, чем больше операций чтения приходится на одну операцию записи в вашей системе.
  • отказоустойчивость. В случае отказа реплики, все запросы чтения можно безопасно перевести на мастера. Если откажет мастер, запросы записи можно перевести на реплику (после того, как мастер будет восстановлен, он может принять на себя роль реплики).
  • резервирование данных. Реплику можно «тормознуть » на время, чтобы выполнить mysqldump, а мастер — нет.
  • отложенные вычисления. Тяжелые и медленные SQL-запросы можно выполнять на отдельной реплике, не боясь помешать нормальной работе всей системы.

Кроме того, есть некоторые другие интересные возможности. Поскольку на реплики передаются не сами данные, а запросы, вызывающие их изменения, мы можем использовать различную структуру таблиц на мастере и репликах. В частности, может отличаться тип таблицы (engine) или набор индексов. Например, для осуществления полнотекстового поиска мы можем на реплике использовать тип таблицы MyISAM, несмотря на то, что мастер будет использовать InnoDB.
Настройка репликации

Допустим, у нас есть работающая база данных MySQL, уже наполненная данными и включенная в работу. И по одной из причин, описанных выше, мы собираемся включить репликацию нашего сервера. Наши исходные данные:
  • IP-адрес мастера 192.168.1.101, реплики — 192.168.1.102.
  • MySQL установлен и настроен
  • требуется настроить репликацию БД testdb
  • мы можем приостановить работу мастера на некоторое время
  • у нас, разумеется, есть root на обеих машинах

Настройки мастера

Обязательно укажем уникальный ID сервера, путь для бинарных логов и имя БД для репликации в секции [mysqld]:
server-id = 1
log-bin = /var/lib/mysql/mysql-bin
replicate-do-db = testdb

Убедитесь, что у вас достаточно места на диске для бинарных логов.

Добавим пользователя replication, под правами которого будет производится репликация. Будет достаточно привилегии «replication slave «:
mysql@master> GRANT replication slave ON "testdb".* TO "replication"@"192.168.1.102" IDENTIFIED BY "password";

Перезагрузим MySQL, чтобы изменения в конфиге вступили в силу:
root@master# service mysqld restart

Если все прошло успешно, команда «show master status » должна показать примерно следующее:
mysql@master> SHOW MASTER STATUS\G
File: mysql-bin.000003
Position: 98
Binlog_Do_DB:
Binlog_Ignore_DB:

Значение position должно увеличиваться по мере того, как вносятся изменения в БД на мастере.

Настройки реплики

Укажем ID сервера, имя БД для репликации и путь к relay-бинлогам в секции [mysqld] конфига, затем перезагрузим MySQL:
server-id = 2
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
replicate-do-db = testdb

root@replica# service mysqld restart

Переносим данные

Здесь нам придется заблокировать БД для записи. Для этого можно либо остановить работу приложений, либо воспользоваться установкой флажка read_only на мастере (внимание: на пользователей с привилегией SUPER этот флаг не действует). Если у нас есть таблицы MyISAM, сделаем также «flush tables»:
mysql@master> FLUSH TABLES WITH READ LOCK;
mysql@master> SET GLOBAL read_only = ON;

Посмотрим состояние мастера командой «show master status» и запомним значения File и Position (после успешной блокировки мастера они не должны изменятся):
File: mysql-bin.000003
Position: 98

Делаем дамп БД, и после завершения операции снимаем блокировку мастера:
mysql@master> SET GLOBAL read_only = OFF;

Переносим дамп на реплику и восстанавливаем из него данные.
Наконец, запускаем репликацию командами «change master to» и «start slave» и посмотрим, все ли прошло хорошо:
mysql@replica> CHANGE MASTER TO MASTER_HOST = "192.168.1.101 ", MASTER_USER = "replication ", MASTER_PASSWORD = "password ", MASTER_LOG_FILE = "mysql-bin.000003 ", MASTER_LOG_POS = 98;
mysql@replica> start slave;

Значения MASTER_LOG_FILE и MASTER_LOG_POS мы берем с мастера.

Посмотрим, как идет репликация командой «show slave status «:
mysql@replica> SHOW SLAVE STATUS\G
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.101
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 98
Relay_Log_File: mysql-relay-bin.001152
Relay_Log_Pos: 235
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: testdb,testdb
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 98
Relay_Log_Space: 235
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 5

Наиболее интересные сейчас значения я выделил. При успешном начале репликации их значения должны быть примерно такими, как в листинге (см. описание команды «show slave status » в документации). Значение Seconds_Behind_Master может быть любым целым числом.
Если репликация идет нормально, реплика будет следовать за мастером (номер лога в Master_Log_File и позиция Exec_Master_Log_Pos будут расти). Время отставания реплики от мастера (Seconds_Behind_Master), в идеале, должно быть равно нулю. Если оно не сокращается или растет, возможно, что нагрузка на реплику слишком высока — она просто не успевает повторять изменения, происходящие на мастере.
Если же значение Slave_IO_State пусто, а Seconds_Behind_Master равно NULL, репликация не началась. Смотрите лог MySQL для выяснения причины, устраняйте её и заново запускайте репликацию:
mysql@replica> start slave;

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

  • заблокировать запись в мастер флагом read_only, запомнить позицию и остановить MySQL.
  • после этого скопировать файлы БД на реплику и включить мастер.
  • начать репликацию обычным способом.

Существует несколько способов создать реплику без остановки мастера вообще, но они срабатывают не всегда.
Добавляем реплики

Пусть у нас уже есть работающие мастер и реплика, и нам нужно добавить к ним еще одну. Сделать это даже проще, чем добавить первую реплику к мастеру. И гораздо приятнее то, что нет необходимости останавливать для этого мастер.
Для начала настроим MySQL на второй реплике и убедимся, что мы внесли нужные параметры в конфиг:
server-id = 3
replicate-do-db = testdb

Теперь остановим репликацию на первой реплике:
mysql@replica-1> stop slave;

Реплика продолжит работать нормально, однако данные на ней уже не будут актуальными. Посмотрим статус и запомним позицию мастера, до которой реплика дошла перед остановкой репликации:
mysql@replica-1> SHOW SLAVE STATUS\G

Нам нужные будет значения Master_Log_File и Exec_Master_Log_Pos:
Master_Log_File: mysql-bin.000004
Exec_Master_Log_Pos: 155

Создадим дамп БД и продолжим репликацию на первой реплике:
mysql@replica-1> START SLAVE;

Восстановим данные из дампа на второй реплике. Затем включим репликацию:
mysql@replica-2> CHANGE MASTER TO MASTER_HOST = "192.168.1.101 ", MASTER_USER = "replication ", MASTER_PASSWORD = "password ", MASTER_LOG_FILE = "mysql-bin.000004 ", MASTER_LOG_POS = 155;
mysql@replica-2> START SLAVE;

Значения MASTER_LOG_FILE и MASTER_LOG_POS — это соответственно значения Master_Log_File и Exec_Master_Log_Pos из результата команды «show slave status » на первой реплике.
Репликация должна начаться с той позиции, на которой была остановлена первая реплика (и соответственно, создан дамп). Таким образом, у нас будет две реплики с идентичными данными.

Объединяем реплики

Иногда возникает такая ситуация: на мастере существует две БД, одна из которых реплицируется на одной реплике, а вторая — на другой. Как настроить репликацию двух БД на обеих репликах, не делая их дампы на мастере и не выключая его из работы? Достаточно просто, с использованием команды «start slave until «.
Итак, у нас имеется master с базами данных testdb1 и testdb2, которые реплицируются соответственно на репликах replica-1 иreplica-2. Настроим репликацию обеих БД на replica-1 без остановки мастера.
Остановим репликацию на replica-2 командой и запомним позицию мастера:
mysql@replica-2> STOP SLAVE;
mysql@replica-2> SHOW SLAVE STATUS\G
Master_Log_File: mysql-bin.000015
Exec_Master_Log_Pos: 231

Создадим дамп БД testdb2 и возобновим репликацию (на этом манипуляции с replica-2 закончились). Дамп восстановим на replica-1.

Ситуация на replica-1 такая: БД testdb1 находится на одной позиции мастера и продолжает реплицироваться, БД testdb2 восстановлена из дампа с другой позиции. Синхронизируем их.

Остановим репликацию и запомним позицию мастера:
mysql@replica-1> STOP SLAVE;
mysql@replica-1> SHOW SLAVE STATUS\G
Master_Log_File: mysql-bin.000016

Exec_Master_Log_Pos: 501

Убедимся, что в конфиге на replica-1 в секции [mysqld] указано имя второй БД:
replicate-do-db = testdb2

Перезагрузим MySQL, чтобы изменения в конфиге вступили в силу. Кстати, можно было просто перезагрузить MySQL, не останавливая репликацию — из лога мы бы узнали, на какой позиции мастера репликация остановилась.

Теперь проведем репликацию с позиции, на которой была приостановлена replica-2 до позиции, на которой мы только что приостановили репликацию:
mysql@replica-1> CHANGE MASTER TO MASTER_HOST = "192.168.1.101 ", MASTER_USER = "replication ", MASTER_PASSWORD = "password ", MASTER_LOG_FILE = "mysql-bin.000015 ", MASTER_LOG_POS = 231;
mysql@replica-1> start slave until MASTER_LOG_FILE = "mysql-bin.000016 ", MASTER_LOG_POS = 501;

Репликация закончится, как только реплика дойдет до указанной позиции в секции until, после чего обе наши БД будут соответствовать одной и той же позиции мастера (на которой мы остановили репликацию на replica-1). Убедимся в этом:
mysql@replica-1> SHOW SLAVE STATUS\G
mysql@replica-1> START SLAVE;
Master_Log_File: mysql-bin.000016
Exec_Master_Log_Pos: 501

Добавим в конфиг на replica-1 в секции [mysqld] имена обеих БД:
replicate-do-db = testdb1
replicate-do-db = testdb2

Важно: каждая БД должна быть указана на отдельной строке.
Перезагрузим MySQL и продолжим репликацию:
mysql@replica-1> CHANGE MASTER TO MASTER_HOST = "192.168.1.101 ", MASTER_USER = "replication ", MASTER_PASSWORD = "password ", MASTER_LOG_FILE = "mysql-bin.000016 ", MASTER_LOG_POS = 501;
После того, как replica-1 догонит мастер, содержание их БД будет идентично. Объединить БД на replica-2 можно или подобным образом, или сделав полный дамп replica-1.

Рокировка мастера и реплики

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

Включим ведение бинарных логов (дополнительно к relay-бинлогам) в конфиге в секции [mysqld]:
log-bin = /var/lib/mysql/mysql-bin

И добавим пользователя для ведения репликации:
mysql@master> GRANT replication slave ON ’testdb’.* TO ’replication’@’192.168.1.101′ IDENTIFIED BY "password ";

Пассивный мастер ведет репликацию как и обычная реплика, но кроме этого создает бинарные логии — то есть, мы можем начать репликацию с него. Убедимся в этом командой «show master status «:
mysql@replica> SHOW MASTER STATUS\G
File: mysql-bin.000001
Position: 61
Binlog_Do_DB:
Binlog_Ignore_DB:

Теперь, чтобы перевести пассивный мастер в активный режим, необходимо остановить репликацию на нем и включить репликацию на бывшем активном мастере. Чтобы в момент переключения данные не были утеряны, активный мастер необходимо заблокировать на запись.
mysql@master> FLUSH TABLES WITH READ LOCK
mysql@master> SET GLOBAL read_only = ON;
mysql@replica> STOP SLAVE;
mysql@replica> SHOW MASTER STATUS;
File: mysql-bin.000001
Position: 61
mysql@master> CHANGE MASTER TO MASTER_HOST = "192.168.1.102 ", MASTER_USER = "replication ", MASTER_PASSWORD = "password ", MASTER_LOG_FILE = "mysql-bin.000001 ", MASTER_LOG_POS = 61;
mysql@master> start slave;

Все, так мы поменяли активный мастер. Можно снять с бывшего мастера блокировку.

Заключение

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

  • устранение единичных точек отказа (SPF, Single Points of Failure). При использовании единственного сервера MySQL, его отказ приводил к отказу всей системы. При использовании нескольких серверов, отказ любого из них приведет к отказу системы, если только мы специально не позаботимся об этом. Нам нужно предусмотреть обработку ситуации с отказом мастера и реплики. Одно из существующих средств — MMM, однако, требует доработки напильником.
  • балансировка нагрузки. При использовании нескольких реплик нам было бы удобно использовать прозрачный механизм балансировки, особенно если производительность реплик неодинакова. Под Linux возможно использовать стандартное решение — LVS.
  • изменение логики работы приложения. В идеальной ситуации, запросы на чтение данных надо направлять на реплики, а на изменение — на мастер. Однако, из-за возможного отставания реплик, такая схема часто неработоспособна и необходимо выявлять такие запросы на чтение, которые все же должны выполнятся на мастере.

Надеюсь осветить эти вопросы в дальнейших статьях.
Спасибо за внимание!

Создание базы данных MySQL | IT-блог о веб-технологиях, серверах, протоколах, базах данных, СУБД, SQL, компьютерных сетях, языках программирования и создание сайтов.

Здравствуйте, уважаемые посетители блога ZametkiNaPolyah.ru. Продолжаем разговор о базах данных, сегодня будем разбираться с тем, как создать базу данных MySQL. Как вы уже знаете, минимальной информационной единицей любой реляционной базы данных является таблица – неделимое целое базы данных. Сегодня мы рассмотрим процесс создания базы данных. Для создания базы данных MySQL используется SQL запрос CREATE DATABASE, с его синтаксисом мы и ознакомимся в данной статье подробно.

Помимо создания базы данных можно создавать таблицы и наполнять их, для этого есть два оператора: CREATE TABLE и INSERT. Для создания таблицы MySQL – CREATE TABLE. Для наполнения таблицы используется оператор INSERT. На самом деле, на этом можно было бы и закончить описание создания базы данных MySQL, поскольку на официальном  сайте есть подробная техническая документация по созданию таблиц и баз данных сервера MySQL, но есть несколько моментов, которые необходимо объяснить более подробно. О создании таблицы базы данных MySQL мы поговорим отдельно в одной из следующих публикаций.

Как хранится база данных MySQL

Содержание статьи:

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

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

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

//
//

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

c:\ProgramData\MySQL\MySQL Server 5.6\data\

c:\ProgramData\MySQL\MySQL Server 5.6\data\

В этом каталоге находятся папки, имена которых полностью совпадают с именами баз данных MySQL, которые были отображены в консоли. Вывод: чтобы создать базу данных MySQL достаточно создать папку в каталоге data. Поэтому имена баз данных MySQL могут иметь ограничения. Максимальная длина имени базы данных MySQL не может превышать 64 символов. Для именования базы данных MySQL можно использовать все символы, разрешенные в операционной системе. MySQL сервер не разрешает использовать в именах баз данных следующие символы: слэш(/), точка, ASCII (0) и ASCII (255).

Если создать папку в каталоге data, то база данных MySQL автоматически будет создана, попробуйте создать папку в этом каталоге, а затем выполнить запрос SHOW DATABASES. Рассматривать содержимое папок (баз данных MySQL) сейчас не имеет смысла, поскольку каждый движок MySQL будет хранить таблицы по-своему.

Создание базы данных MySQL

Перейдем теперь к созданию базы данных MySQL. Создать базу данных MySQL позволяет запрос CREATE DATABASE, вот его полный синтаксис:

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] … create_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name

 

[create_specification] …

 

create_specification:

 

[DEFAULT] CHARACTER SET [=] charset_name

 

| [DEFAULT] COLLATE [=] collation_name

Давайте попробуем создать базу данных MySQL с именем test1. Я вам не рекомендую копировать код, лучше набирайте его сами, так все команды запомнятся быстрее. Итак, создаем базу данных с именем test1:

Все, база данных с именем test1 создана, повторное создание базы данных с таким же именем приведет к ошибке: ERROR 1007 (HY000) Can’t create database ‘test1’; database exists. По-русски: не могу создать базу данных с именем ‘test1’; база данных уже существует. Чтобы таких ошибок не возникало, создавайте базы данных MySQL с добавлением конструкции [IF NOT EXISTS] (если не существует), в этом случае ошибки не будет, но будет предупреждение:

CREATE DATABASE IF NOT EXISTS test1;

CREATE DATABASE IF NOT EXISTS test1;

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

Создадим базу данных MySQL с именем test2, кодировкой utf8 и сравнением utf8_general_ci:

CREATE DATABASE IF NOT EXISTS test2 CHARACTER SET = utf8 COLLATE utf8_general_ci;

CREATE DATABASE IF NOT EXISTS test2

 

CHARACTER SET = utf8

 

COLLATE utf8_general_ci;

На заметку. Если вы создаете сайт с использованием CMS (установка Drupal, установка Joomla, установка WordPress), то при ее установки потребуется вручную создать базу данных, конечно, база данных будет заполнена автоматически установочным скриптом, но ее нужно уметь создать. Здесь вы сможете ознакомиться с архитектурой базы данных WordPress сайта.

Конструкция CHARACTE SET определяет кодировку созданной базы данных MySQL (в какой кодировки данные будут храниться). COLLATE определяет порядок сравнения данных в базе данных (с учетом регистра символов или нет и прочее). Думаю, с вопросом создания базы данных MySQL мы разобрались, давайте разберемся с кодировкой базы данных, этот вопрос актуален и для каждой таблицы в отдельности.

Я уже говорил, что кодировку для таблицы можно задавать точно так же, как и для всей базы данных, если кодировка не задана явно, то она будет точно такой же, как и кодировка всей базы данных MySQL. Если вы указали кодировку базы данных, но не задали порядок сравнения, то он будет использован по умолчанию. Если задан порядок сравнения, то он определяет кодировку все сущности: либо таблицы, либо базы данных. Обратите внимание: порядок сортировки (COLLATE), должен быть допустимым для текущей кодировки (CHARACTER SET).

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

 

Введение в MySQL | Что такое база данных?

Определение базы данных

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

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

Для управления базами данных используется специальное программное обеспечение — СУБД (Система управления базами данных).

Терминология баз данных

Перед началом работы с базами данных важно знать несколько, часто используемых, терминов:

  • База данных — набор реляционных таблиц с данными.
  • Таблица — схожа с обычными таблицами, имеет столбцы и строки.
  • Колонка — группа полей, содержащих одинаковый формат данных.
  • Строка (запись) — группа полей, которые содержат данные из нескольких не повторяющихся колонок.
  • Поле — ячейка таблицы.
  • Первичный ключ — уникальное значение поля, которое не может повторятся. Часто в качестве первичного ключа используют поле с номером строки (id).
  • Вторичный ключ — значения полей по которым одна таблица связана с другой.
  • Индекс — уникальный идентификатор строки, в большинстве случаях это номер строки.

MySQL — это …

MySQL — быстрая, легкая в использовании, система управления базами данных, которая часто применяется как в малых, так и в крупных веб-приложениях. MySQL была разработана шведской компанией MySQL AB, однако вскоре выкуплена компанией Oracle.

Архитектура клиент-сервер

MySQL использует клиент-серверную архитектуру. Сервер mysqld призван управлять базами данных. Однако для подключения к MySQL серверу используется клиент, который с помощью SQL-запросов посылает команды серверу, чтобы тот знал что и как ему делать в базах данных. 

Клиент-серверная архитектураКлиент-серверная архитектура работы MySQL

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

MySQL сервер и MySQL клиент могут также работать на одном и том же компьютере.

Наиболее распространенными mysql-клиентами являются:

  • mysql-client — запускается и работает в терминале
  • workbench — устанавливается как обычная программа
  • phpmyadmin — клиент, который доступен удаленно и работает в окне браузера.

Почему MySQL?

MySQL очень популярная СУБД и вот почему:

  • Бесплатность — MySQL распространяется под свободной лицензией и не требует оплаты за ее использование.
  • Стандартный SQL — MySQL использует стандартный синтаксис языка запросов — SQL (с некоторыми исключениями).
  • Кроссплатформенность — MySQL работает на многих операционных системах и взаимодействует с разными серверными языками программирования, такие как PHP, Perl, C, C++, Java и др.
  • Производительность — MySQL работает с высокой скоростью даже с большим набором данных.
  • Отличная поддержка PHP — MySQL часто используется с PHP — одним из самых популярных серверных языков программирования.
  • Расширяемость — MySQL может работать с базами данных огромных размеров и позволяет хранить более 50 миллионов строк в одной таблице. Размер одной таблицы может достигать 4Гб и более.

СУБД MySQL — что это такое, где используется.

MySQL – система управления базами данных (СУБД) для работы с БД SQL.

Базы данных — что это такое?

База данных (БД) — совокупность таблиц, которые взаимосвязаны частью столбцов между собой. Например, в одну таблицу заносятся имя пользователя и дата его регистрации, а в другую – имя пользователя и его комментарии. В таком случае имена пользователей должны быть строго идентичны в обеих таблицах, иначе база будет работать не верно.

Существуют реляционные и нереляционные базы данных. Реляционные — проще в формировании и требуют минимум навыков. Нереляционные чаще используются для решения специфических задач. Для работы с реляционными базами используется формальный язык программирования SQL.

Что такое СУБД вообще и СУБД MySQL в частности?

СУБД – система управления базой данных. Она предназначена для изменения, поиска, добавления и удаления информации в БД. Есть множество СУБД, разработанных для похожих целей с разными особенностями. Одна из самых популярных – СУБД MySQL.

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

Виртуальный хостинг сайтов для популярных CMS:

Как хранится информация в базах данных?

В реляционных базах данные хранятся в таблицах. Простейшим примером является справочник с колонками: «имя», «фамилия», «номер телефона». Могут быть заранее заданы типы полей – числовой, текстовый, дата / время и другие.

Данные могут храниться в открытой или зашифрованной форме.

Для чего нужны базы данных на сайте?

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

Другим плюсом является автоматизация изменений информации. Например, в код сайта на PHP можно внести буквально пару строк, которые будут без участия человека избегать, к примеру, повторной регистрации с одного и того же e-mail адреса. Кроме того, возможно с помощью функций экспорта и импорта данных быстро и без потерь переместить всю собранную информацию.

Бесплатные MySQL хостинги — Программирование и не только

Иногда возникает необходимость в использовании бесплатного MySQL-хостинга, например, для тестирования. Конечно же, не стоит много ожидать от подобных сервисов. Однако, сегодня как раз хотелось бы рассказать о некоторых таких.

Free Remote MySQL

Хороший бесплатный хостинг для вашей MySQL базы данных. Конечно же, здесь сильно не разгуляешься. У данного хостинга есть требования на размер единственной базы данных не более 100 Мб, запись в базу данных должна осуществляться как минимум раз в 30 дней. Также они могут ограничить количество подключений, разрешенных для базы данных. Если вы не используете свою базу данных в течение 10 дней с момента первоначального создания или она пуста, то она будет просто удалена.

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

Free MySQL database

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

Db4free

Этот сервис больше всего подходит для тестирования MySQL баз данных. Не стоит здесь сохранять данные для более длительного использования. А вот что-то проверить и испытать — самое то!

Спасибо за внимание и до новых встреч!

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

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