Простое обновление mysql-сервера в ubuntu и debian

Анализ медленных запросов

Для профилирования запросов MySQL используется инструмент pt-query-digest. Перед его использованием убедитесь, что включен лог медленных запросов в my.cnf:

Для того, чтобы провести анализ log файла, нужно выполнить:

pt-query-audit /var/log/mysql/mysql-query.log > digest; cat digest

После этого будет сгенерирован достаточно длинный отчет. Сверху будет приведена общая информация о всех медленных запросах:

# Attribute          total     min     max     avg     95%  stddev  median
# ============     ======= ======= ======= ======= ======= ======= =======
# Exec time           634s      1s     54s      4s      8s      6s      2s
# Lock time            7ms       0   953us    48us   167us   151us       0
# Rows sent        107.62M       0   1.52M 720.30k   1.46M 619.39k 462.39k
# Rows examine     107.62M       0   1.52M 720.30k   1.46M 619.38k 462.39k
# Query size        70.38k      45  10.94k  471.04   88.31   1.93k   49.17

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

Ниже можно посмотреть общий профиль всех медленных запросов:

# Rank Query ID           Response time  Calls R/Call V/M   Item
# ==== ================== ============== ===== ====== ===== ==============
#    1 0x67A347A2812914DF 440.2687 69.5%   119 3.6997  1.61 SELECT stats_min
#    2 0x0212FEF8C81EF1B6  78.2438 12.3%     8 9.7805 27.12 UPDATE files
#    3 0x2D2411FF42855142  67.4195 10.6%    10 6.7419 33.64 UPDATE projects
#    4 0xE5418AFB28BC18CF  25.1232  4.0%     7 3.5890  2.62 INSERT UPDATE files

Все запросы отсортированы по общему времени выполнения time. Оптимизировать запросы нужно в таком же порядке — это даст наибольший эффект

Кроме этого обратите внимание на колонку R/Call — там указано среднее время выполнения одного запроса. В примере у второго запроса это время больше 9 секунд, следует выяснить причины

После этого в отчете можно увидеть детальный профиль каждого запроса:

# Query 1: 0.00 QPS, 0.00x concurrency, ID 0x67A347A2812914DF at byte 98907
# Scores: V/M = 1.61
# Time range: 2014-12-12 01:00:40 to 2015-02-03 01:01:22
# Attribute    pct   total     min     max     avg     95%  stddev  median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count         77     119
# Exec time     69    440s      1s      9s      4s      8s      2s      2s
# Lock time      0       0       0       0       0       0       0       0
# Rows sent     99 107.52M   1.19k   1.52M 925.21k   1.46M 565.37k 462.39k
# Rows examine  99 107.52M   1.19k   1.52M 925.21k   1.46M 565.37k 462.39k
# Query size     8   5.68k      46      54   48.89   51.63    1.51   49.17
# String:
# Hosts        localhost
# Users        root
# Query_time distribution
#   1us
#  10us
# 100us
#   1ms
#  10ms
# 100ms
#    1s  ================================================================
#  10s+

# Tables
#    SHOW TABLE STATUS FROM `t` LIKE 'stats_min'\G
#    SHOW CREATE TABLE `t`.`stats_min`\G
SELECT * FROM `stats_min`\G

# Converted for EXPLAIN
# EXPLAIN SELECT * FROM `stats_min`\G

Эти данные покажут детальное распределение ресурсов

Следует обратить внимание на Lock time, Rows sent, Rows examine. Чем больше эти значения, тем хуже

Differences Between mysql_upgrade in MariaDB and MySQL

This is as of MariaDB 5.1.50:

  • MariaDB will convert long table names properly.
  • MariaDB will convert InnoDB tables (no need to do a dump/restore or ).
  • MariaDB will convert old archive tables to the new 5.1 format.
  • «mysql_upgrade —verbose» will run «mysqlcheck —verbose» so that you get more information of what is happening. Running with 3 times —verbose will in MariaDB 10.0 print out all CHECK, RENAME and ALTER TABLE commands executed.
  • The mysql.event table is upgraded live; no need to restart the server to use events if the event table has changed (MariaDB 10.0.22 and MariaDB 10.1.9).
  • More descriptive output.

1: Добавление репозитория MySQL

Разработчики MySQL предоставляют файл .deb, который отвечает за настройку и установку официальных репозиториев MySQL. Добавив репозиторий, вы сможете установить новую версию MySQL с помощью стандартного пакетного менеджера системы (в данном случае это apt). Загрузите файл .deb с помощью curl и установите его с помощью команды dpkg.

Теперь можно загрузить файл. Откройте каталог:

Загрузите файл с помощью команды curl. Вставьте в команду скопированную ссылку на пакет.

Флаг -O помещает вывод команды в файл, а –L включает поддержку переадресации HTTP (это необходимо, потому что скопированный адрес пакета перенаправит вас в другое место, прежде чем загрузить файл).

Файл будет загружен в текущий каталог. Просмотрите содержимое каталога:

Теперь можно установить полученный файл:

Команда dpkg используется для установки, удаления и проверки пакетов программного обеспечения .deb. Флаг –i указывает компоненты, которые нужно установить.

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

После этого репозиторий будет добавлен на сервер. Обновите индекс пакетов:

Чтобы не засорять пространство сервера ненужными файлами, удалите этот файл:

Репозиторий MySQL добавлен. Теперь с его помощью можно установить последнюю версию MySQL. Чтобы обновить конфигурацию этих репозиториев, просто запустите:

Затем выберите новые параметры и обновите индекс пакетов:

Синтаксис

Простая форма синтаксиса для оператора UPDATE при обновлении одной таблицы в MySQL:

UPDATE table SET column1 = expression1, column2 = expression2, … ;

Теперь полный синтаксис для MySQL оператора UPDATE при обновлении одной таблицы:

UPDATE table SET column1 = expression1, column2 = expression2, … ] ;

ИЛИ Синтаксис оператора UPDATE при обновлении одной таблицы данными из другой таблицы в MySQL:

UPDATE table1 SET column1 = (SELECT expression1 FROM table2 WHERE conditions) ;

ИЛИ Синтаксис MySQL оператора UPDATE при обновлении нескольких таблиц:

UPDATE table1, table2, … SET column1 = expression1, column2 = expression2, … WHERE table1.column = table2.column AND conditions;

Параметры или аргументы

LOW_PRIORITY — необязательный. Если указан LOW_PRIORITY, обновление будет отложено до тех пор, пока не будет процессов читающих из таблицы. LOW_PRIORITY может использоваться с таблицами MyISAM, MEMORY и MERGE, которые используют блокировку на уровне таблицы.IGNORE — необязательный. Если предоставляется IGNORE, все ошибки, возникающие во время обновления, игнорируются. Если обновление в строке приведет к нарушению первичного ключа или уникального индекса, обновление в этой строке не будет выполнено.column1, column2 — столбцы, которые вы хотите обновить.expression1, expression2 — новые значения для назначения column1, column2. Таким образом, column1 присваивается значение expression1, column2 присваивается значение expression2 и т. д.WHERE conditions — необязательный. Условия, которые должны выполняться для выполнения обновления.ORDER BY expression — необязательный. Он может использоваться в сочетании с LIMIT для сортировки записей соответствующим образом при ограничении количества записей, подлежащих обновлению.LIMIT number_rows — необязательный. Если указан LIMIT, он контролирует максимальное количество записей для обновления в таблице. Максимальное количество записей, указанных в файле number_rows, будет обновляться в таблице.

Описание функцииFeature description

Кластерное обновление — это автоматизированная функция, которая позволяет обновлять серверы в отказоустойчивом кластере с незначительной потерей доступности в процессе обновления.Cluster-Aware Updating is an automated feature that enables you to update servers in a failover cluster with little or no loss in availability during the update process. Во время прогона обновления кластерное обновление прозрачно выполняет следующие задачи:During an Updating Run, Cluster-Aware Updating transparently performs the following tasks:

  1. Помещает каждый узел кластера в режим обслуживания узла.Puts each node of the cluster into node maintenance mode.
  2. Перемещает кластерные роли за пределы узла.Moves the clustered roles off the node.
  3. Устанавливает обновления и все зависимые обновления.Installs the updates and any dependent updates.
  4. При необходимости выполняет перезагрузку.Performs a restart if necessary.
  5. Переводит узел в режим обслуживания.Brings the node out of maintenance mode.
  6. Восстанавливает кластерные роли на узле.Restores the clustered roles on the node.
  7. Переходит к обновлению следующего узла.Moves to update the next node.

Для многих кластерных ролей в кластере процесс автоматического обновления вызывает плановую отработку отказа.For many clustered roles in the cluster, the automatic update process triggers a planned failover. Это может привести к временному прерыванию обслуживания подключенных клиентов.This can cause a transient service interruption for connected clients. Однако в случае непрерывных доступных рабочих нагрузок, таких как Hyper-V с динамической миграцией или файлового сервера с прозрачной отработкой отказа SMB, обновление с поддержкой кластера может координировать обновления кластера без влияния на доступность службы.However, in the case of continuously available workloads, such as Hyper-V with live migration or file server with SMB Transparent Failover, Cluster-Aware Updating can coordinate cluster updates with no impact to the service availability.

Облицовка и разделение

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

Существуют абстракционные рамки, которые могут помочь в обработке данных, например Hibernate Shards, расширение для ORM Hibernate (которое, к сожалению, находится в Java. Я использую PHP). HiveDB является еще одним таким решением, которое также поддерживает перебалансировку осколков.

3 ответа

6

Я нашел идеальный способ сделать это без каких-либо побочных эффектов, а также отлично работает с панелью управления xampp …

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

Шаг 1: Загрузите новую версию MySQL или версию zip (установите версию предпочтительнее, поскольку она значительно меньше)

Шаг 2. Установите MySQL в C: \ TEMP. Установите только сервер MySQL

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

Шаг 4: Перейдите в C: \ TEMP, найдите установку и скопируйте следующие папки «bin, include, lib, share, support-files». быть абсолютно уверенным, чтобы не копировать папку с данными .
После копирования перейдите в папку xampp, переименуйте папку mysql в mysql_old. создайте новую папку mysql, затем вставьте содержимое, которое было скопировано

Шаг 5. Перейдите в mysql_old и скопируйте папку с данными и вставьте ее в новую папку mysql, а также

Шаг 6: Перейдите в папку bin в mysql, которая находится в xampp и создайте пустой файл my.ini.
Если вы обновляетесь до версии 5.6.11, и это то, что я сделал, тогда все, что вам нужно сделать, это написать несколько команд, которые у меня есть в нижней части этой инструкции

Шаг 7: Нажмите «Пуск» рядом с MySQL на панели управления xampp, и он должен начать нормально, полагая, что вы правильно следуете инструкциям.
После этого вы можете удалить пакет mysql, который вы установили, в C: \ TEMP.

Любые вопросы или проблемы, напишите мне или отправьте сообщение!

ПО ПУТЬМ, ключ имеет правильный файл my.ini

вот мой:

3

Я попробовал решение @Seul Shahkee, отлично работает, но в моем случае я также скопировал файл my.ini из старой папки bin в новую папку mysql. Некоторые переменные конфигурации больше не поддерживаются, хотя кажется, поэтому я просто прокомментировал их и, похоже, работает .. до сих пор ..
Нет гарантии 100%, хотя ..

Загрузите последнюю версию MySQL, но загрузите zip-файл, а не MSI (установщик).
Разархивируйте zip-файл в папку.
Отключить процесс Mysql (нет необходимости удалять службу) с панели управления XAMPP.
Перейдите в папку XAMPP, переименуйте папку mysql в mysql_old
Скопируйте новую распакованную папку mysql в папку XAMPP, в ней удалите папку с данными.
Скопируйте папку данных из mysql_old в новую папку mysql.
Скопируйте файл my.ini в mysql_old /bin в mysql /bin.
Измените параметр (comment out) table_cache = 64 из файла my.ini

Обратите внимание, что в зависимости от версии могут быть другие параметры, которые могут потребоваться для комментариев, и вам может потребоваться установить новые параметры, чтобы компенсировать устаревшие. Скопировать поверх других ini и исполняемых файлов из корневой папки mysql_old в mysql (файлы XAMPP ini,
my-huge.ini, my-small.ini и т

д.).
Запустите mysql-процесс с панели управления XAMPP. Должно сработать. (Возможно, вам сначала нужно будет убить XAMPP).
(ДОПОЛНИТЕЛЬНО) Запустите , чтобы обновить таблицы в локальных базах данных, которые могут иметь проблемы из-за изменения версии.

Я сделал то, что

  1. Удаление службы mysql xampp и ее остановка
  2. установка сервера mysql из dev.mysql.com/downloads/installer
  3. добавление пользователей root & pma без пароля (сделать это при установке будет проще)

Теперь у меня есть полностью функциональный phpmyadmin: D

Проверка репликации данных

На одном из узлов создадим базу данных, таблицу и вставим данные в нее:

$ mysql -uroot 

MariaDB > create database test;
Query OK, 1 row affected (0.121 sec)

MariaDB > create table test.test (id INT PRIMARY KEY, name VARCHAR(32));
Query OK, 0 rows affected (0.195 sec)

MariaDB > insert into test.test values(1, "name");
Query OK, 1 row affected (0.003 sec)

Убедимся, что репликация произошла на оставшиеся узлы, выполнив на каждом из них команду запроса данных:

$ mysql -uroot -e 'select * from test.test;'
+----+------+
| id | name |
+----+------+
|  1 | name |
+----+------+

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

Кластеризация

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

MySQL кластер NDB

MySQL NDB Cluster-это распределенный, находящийся в памяти, ничем не разделяемый механизм хранения данных с синхронной репликацией и автоматическим разделением данных (извините, что я буквально заимствую из книги о высокой производительности, но они там очень красиво написали). Это может быть высокопроизводительное решение для некоторых приложений, но веб-приложения, как правило, не работают хорошо на нем.

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

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

Непрерывная Секвойя

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

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

Федерация

Федерация похожа на кластеризацию, так что я потянул ее и сюда. MySQL предлагает Федерацию через механизм федеративного хранения. Подобно кластерному решению NDB, он хорошо работает только с простыми запросами — но еще хуже кластер для сложных (так как задержка сети намного выше).

Обновление MySQL

Приступаем к самому обновлению.

Внимание: при обновлении с MySQL 5 до MySQL 8 требуются дополнительные действия. Смотрите подробности в статье: «Как обновиться с MySQL 5 до MySQL 8».. Подразумевается, что MySQL установлена в папку c:\Server\bin\mysql-8.0 — если у вас другой путь, то используйте последующие инструкции в соответствии с вашими условиями.

Подразумевается, что MySQL установлена в папку c:\Server\bin\mysql-8.0 — если у вас другой путь, то используйте последующие инструкции в соответствии с вашими условиями.

Последовательность действий:

  1. Скачайте архив с новой версией MySQL.
  2. Скопируйте в безопасное место файл c:\Server\bin\mysql-8.0\my.ini.
  3. Остановите и удалите службу MySQL:
net stop mysql
c:\Server\bin\mysql-8.0\bin\mysqld --remove
  1. Удалите папку C:\Server\bin\mysql-8.0\.
  2. Распакуйте новый архив в C:\Server\bin\. Переименуйте папку в mysql-8.0.
  3. Скопируйте сохранённый ранее файл my.ini в c:\Server\bin\mysql-8.0\my.ini.
  4. Запустите службу MySQL:
C:\Server\bin\mysql-8.0\bin\mysqld --install
net start mysql

Резервное копирование базы данных

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

Если у вас базы данных в другой папке, не внутри установочной директории, то вам беспокоиться не о чем. В противном случае начните с создания их резервной копии. Если вы не знаете где они расположены, то обратитесь к статье «Как узнать путь до файлов базы данных MySQL/MariaDB в Linux и Windows».

Далее остановите MySQL/MariaDB, поскольку в противном случае файлы баз данных скопируются некорректно:

net stop mysql

Теперь скопируйте папку data в безопасное место.

Настройка

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

mysqladmin -u root password newpass

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

$ mysql -p -u root

Добавление пользователя

Создание нового пользователя состоит из двух действий: создание пользователя; установка прав. Пример: создадим пользователя monty с паролем some_pass.

$ mysql -u root -p
MariaDB> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
MariaDB> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
   ->     WITH GRANT OPTION;
MariaDB> quit

Включение удалённого доступа

Если Вы хотите подключаться к Вашему серверу MySQL удалённо с других хостов, то Вам необходимо раскомментировать (убрать символ #) следующие строки в файле :

  ...
  #skip-networking
  bind-address = 
  ...

Таким образом Вы позволите удалённо подключаться любом пользователю (в том числе и root):
Подключить к базе с правами пользователя root:

$ mysql -u root -p -h IPorHOSTNAME

Проверка прав пользователей на удаленное подключение:

SELECT User, Host FROM mysql.user WHERE Host  'localhost';

Предоставить права удаленного доступа пользователю (в данном случе root):

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%' IDENTIFIED BY 'my_optional_remote_password' WITH GRANT OPTION;

При необходимости шаблон ‘%’ можно заменить на конкретное значение хоста. Пароль пользователя в базе может отличаться от пароля пользователя в системе.

Отключение удаленного доступа

MySQL-сервер по умолчанию доступен из внешней сети. Если вы используете MySQL локально, то можно усилить безопасность, отключив прослушивание TCP-порта 3306. Для отключения удаленного доступа раскомментируйте в файле строку:

skip-networking

Теперь вы сможете соединиться с MySQL-сервером только через localhost.

Режим автодополнения

Примечание: Активация этого режима может увеличить время инициализации MySQL-клиента.

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

Использование кодировки UTF-8

В файле добавьте к настройкам секции следующие параметры:

init_connect                = 'SET collation_connection = utf8_general_ci,NAMES utf8'
collation_server            = utf8_general_ci
character_set_client        = utf8
character_set_server        = utf8

Разделение операций чтения/записи с помощью HAProxy

HAProxy как балансировщик нагрузки MySQL работает на уровне TCP. Он не понимает запросы MySQL, которые работают на более высоком уровне и пересылаются серверам MySQL. В связи с этим HAProxy пользуется особой популярностью в рамках установок с репликацией multi-master, таких как Galera Cluster и MySQL Cluster, где все бэкенд-серверы MySQL равнодоступны. Все серверы MySQL могут обрабатывать перенаправленные операции чтения/записи. Работа на транспортном уровне также требует меньше вычислительных затрат по сравнению с балансировкой нагрузки обратным прокси, понимающим запросы SQL, таким как MaxScale или ProxySQL.

Все же это не означает, что HAProxy не подходит для установок с репликацией master-slave. Однако, распределение операций в этом случае происходит сложнее. Операции записи направляются только на Master, в то время как операции чтения могут быть направлены любому узлу, пока узел не начинает отставать.

Чтобы HAProxy мог обрабатывать операции чтения и записи по отдельности, необходимо:

  • Настроить проверку на доступность и роль сервера MySQL. Скрипт проверки должен:
    • сообщить о роли в репликации (master, slave или none);
    • сообщить об отставании узла slave (если есть slave);
    • должен быть доступен через HAProxy (настраивается через xinetd или порт пересылки).
  • Создать два обработчика HAProxy, один для чтения и один для записи:
    • обработчик операций чтения служит для передачи всем узлам запросов чтения;
    • обработчик операций записи служит для передачи операций записи единственному Master.
  • Модифицировать приложение, для поддержки отправки операции чтения и записи соответствующему обработчику:
    • создайте/измените приложение, чтобы отправлять операции чтения и записи соответствующим обработчикам;
    • используйте коннектор приложения, который поддерживает встроенное разделение для операций чтения/записи. Для Java можно использовать Connector/J, для PHP — php-mysqlnd для master-slave. Это сведет к минимуму изменения на стороне приложения.

Обновление

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

Вот как обновить phpMyAdmin в Denwer:

  1. Скачайте архив с модулем. Лучше ставить актуальную версию с официальной страницы разработчиков. 
  2. Распакуйте его.
  3. Откройте в диске Денвера папку Home. Зайдите в неё через браузер или через каталоги.
  4. Создайте в ней новую директорию для модуля. Можете назвать её, как угодно. Например, phpMyAdminNew. Вводите только латинские символы и цифры. И лучше не вписывайте слишком сложное имя — вам с ним ещё работать.
  5. Внутри этой папки создайте ещё одну. Назовите её — www. Тут нельзя использовать другие имена.
  6. Скопируйте в неё файлы обновления. Можете изначально распаковать архив в ней.
  7. Перезапустите сервер. Для этого перейдите в корень виртуального диска, откройте каталог Denwer и запустите Restart.exe. 
  8. В адресной строке обозревателя введите phpMyAdminNew. Если вы дали другое название папке, впишите его.
  9. Нужно напечатать имя пользователя и пароль. Логин — root.

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

  1. В папке «phpMyAdminNew/www» (которую вы сами и создали), найдите файл «config.sample.inc.php».
  2. Переименуйте его — уберите sample. Должно получиться «config.inc.php». 
  3. Откройте его.
  4. Отыщите там строчку, в которой есть параметр AllowNoPassword. Рядом с ней будет значение false. Поменяйте его на true.
  5. Сохраните.

Теперь вы можете зайти с пустым паролем.

  1. Снова откройте phpMyAdminNew через браузер.
  2. Введите логин — root. 
  3. Нажмите OK.
  4. Вы увидите интерфейс phpMyAdmin.

На этом обновление закончено. И буквально за несколько минут.

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

5 ответов

10

Основываясь на моем опыте, я бы использовал LOAD DATA INFILE для импорта ваш файл CSV.

Пример, который я нашел в Интернете Пример загрузки данных . Я проверил этот пример на моем ящике и отлично работал

Таблица примеров

Пример файла CSV

Операция импорта для запуска из консоли MySQL

Результат

IGNORE просто игнорирует первую строку, которая является заголовками столбцов.

После IGNORE мы указываем столбцы (пропуск столбца2) для импорта, который соответствует одному из критериев в вашем вопросе.

Вот еще один пример непосредственно из Oracle: Пример загрузки LOAD DATA INFILE

Этого должно быть достаточно, чтобы вы начали.

11

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

АСПЕКТ # 1: размер буфера объединения

По всей вероятности, ваш , вероятно, слишком низкая.

В соответствии с документацией MySQL на Использование MySQL Буфер буфера соединения

В этом случае заставьте ключи буфера соединения оставаться в ОЗУ.

У вас есть 10 миллионов строк по 4 байта для каждого ключа. Это около 40 миллионов.

Попробуйте поднять его в сеансе до 42M (чуть больше 40M)

Если это делает трюк, добавьте его в

Перезапуск mysqld не требуется для новых подключений. Просто запустите

АСПЕКТ # 2: Операция соединения

Вы можете манипулировать стилем операции соединения, tweeking оптимизатор

Согласно документации MySQL на Блокировать вложенную петлю и Присоединено к пакетному доступу к ключам

Эта же страница рекомендует сделать это:

ASPECT # 3: Запись обновлений на диск (необязательно)

Большинство забудьте увеличить быстрее писать грязные страницы из пула буферов.

Вам потребуется перезагрузить MySQL для этого изменения

ДАЙТЕ ЭТО ПОВРЕЖДЕНИЕ !!!

3

  1. , который соответствует CSV
  2. в эту таблицу

Шаг 3 будет намного быстрее, чем строка за строкой, но он по-прежнему будет блокировать все строки в таблице для нетривиального количества времени

Если это время блокировки более важно, чем время, которое длится весь процесс, ..

Если ничего не записывается в таблицу, то …

  1. , который соответствует CSV; нет индексов, кроме того, что необходимо в в . Если он уникален, сделайте его .
  2. в эту таблицу
  3. скопируйте в ()

Шаг 3 быстрее, чем обновление, особенно если ненужные индексы не указаны.
Шаг 5 является «мгновенным».

2

Вы сказали:

  • Обновления влияют на 6-25% вашей таблицы.
  • Вы хотите сделать это как можно быстрее (
  • без блокировки
  • он не должен находиться в одной транзакции.
  • пока (в комментарии к ответу Рика Джеймса), вы выражаете озабоченность по поводу условий гонки.

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

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

Избегать условий гонки

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

Это освобождает вас от пошаговых обновлений (как вы это делаете сейчас), но с помощью autocommit или более разумных пакетов транзакций.

Вы избегаете условий гонки (при обновлении по очереди), выполняя проверку того, что более позднее обновление еще не произошло (

И, что важно, это позволяет запускать обновления parallel. Выполнение как можно быстрее — Параллелизация

Выполнение как можно быстрее — Параллелизация

С этой отметкой времени отметьте теперь:

  1. Разделите пакетный файл на несколько разумных размеров (скажем, 50 000 строк /файлов)
  2. Параллельно, скрипт читается в каждом файле и выводит файл с 50 000 инструкциями UPDATE.
  3. Параллельно, один раз (2) заканчивается, запускает каждый sql-файл.

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

Чтобы быстро выполнить , вам нужно

Он может быть на обеих таблицах. Три поля могут быть в любом порядке.

Это облегчит возможность быстрого совпадения строк между двумя таблицами.

И сделать эти типы одинаковыми в двух таблицах (оба или оба ).

Пример обновления таблицы данными из другой таблицы

Рассмотрим пример UPDATE, который показывает, как обновить таблицу данными из другой таблицы в MySQL.

MySQL

UPDATE customers
SET city = (SELECT city
FROM suppliers
WHERE suppliers.supplier_name = customers.customer_name)
WHERE customer_id > 5000;

1
2
3
4
5

UPDATEcustomers

SETcity=(SELECTcity

FROMsuppliers

WHEREsuppliers.supplier_name=customers.customer_name)

WHEREcustomer_id>5000;

В этом примере UPDATE будет обновляться только таблица customers для всех записей, где customer_id больше 5000. Когда supplier_name из таблицы suppliers совпадает с именем customer_name из таблицы customers, city из таблицы suppliers будет скопирован в поле city таблицы customers.

Сброс пароля root MySQL

Прописываем в файл /etc/my.cnf опцию skip-grant-tables
Запускаем mysql-сервер

В Centos 6/Debian/Ubuntu:

/etc/init.d/mysql restart

В Centos 7:

systemctl restart mariadb

или

systemctl restart mysqld

Меняем пароль root

mysql
use mysql;
UPDATE user SET Password=PASSWORD("new_password") WHERE User='root';
FLUSH PRIVILEGES;

Если версия MySQL 5.7

mysql
use mysql;
UPDATE user SET authentication_string=PASSWORD("new_password") WHERE User='root';
FLUSH PRIVILEGES;

Убираем опцию skip-grant-tables из /etc/my.cnf, перезагружаем MySQL.

В Centos 6/Debian/Ubuntu:

/etc/init.d/mysql restart

В Centos 7:

systemctl restart mariadb

или

systemctl restart mysqld

Теперь с заданным паролем MySQL создайте сервер баз данных в ISPmanager. Если сервер есть, то в Серверы баз данных открываем сервер и нажимаем кнопку Ок, таким образом мы проверяем, что подключение к серверу продходит корректно.
Проверьте в разделе базы данных, что БД на месте и вы можете ими управлять.
Если Базы данных удалились, вам следует восстановить БД из бэкапа

Обратите внимание, что в разных версиях MySQL разная структура системных таблиц, например в MySQL 5.7 поле Password заменено на поле authentication_strings, поэтому в дампе БД , перед восстановлением, поля системных таблиц следует привести в соответствие или не восстанавливать их.

Установка MariaDB

  • в Debian 9;
  • в Ubuntu 18.04;
  • в Ubuntu 16.04;
  • в CentOS 7.

Установка в Debian 9

Произведем базовую установку MariaDB 10.3, рекомендованную поставщиком для Debian 9 Stretch:

sudo apt-get install -y software-properties-common dirmngr
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb  http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.3/debian stretch main'

sudo apt update
sudo apt install -y mariadb-server

Проверьте корректность установки, соединившись с MariaDB с помощью клиента командной строки:

mysql -uroot -e 'SELECT version();'

+---------------------------------------------+
| version()                                   |
+---------------------------------------------+
| 10.3.13-MariaDB-1:10.3.13+maria~stretch-log |
+---------------------------------------------+

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

Установка в Ubuntu 18.04

Произведем базовую установку MariaDB 10.3, рекомендованную поставщиком для Ubuntu Linux 18.04:

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb  http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.3/ubuntu bionic main'

sudo apt update
sudo apt install -y mariadb-server

Проверьте корректность установки, соединившись с MariaDB с помощью клиента командной строки:

mysql -uroot -e 'SELECT version();'
+--------------------------------------------+
| version()                                  |
+--------------------------------------------+
| 10.3.13-MariaDB-1:10.3.13+maria~bionic-log |
+--------------------------------------------+

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

Установка в Ubuntu 16.04

Произведем базовую установку MariaDB 10.3, рекомендованную поставщиком для Ubuntu Linux 16.04:

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb  http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.3/ubuntu xenial main'

sudo apt update
sudo apt install -y mariadb-server

Проверьте корректность установки, соединившись с MariaDB с помощью клиента командной строки:

mysql -uroot -e 'SELECT version();'
+--------------------------------------------+
| version()                                  |
+--------------------------------------------+
| 10.3.13-MariaDB-1:10.3.13+maria~xenial-log |
+--------------------------------------------+

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

Установка в CentOS 7

Произведем базовую установку MariaDB 10.3, рекомендованную поставщиком для CentOS 7. Сначала необходимо добавить репозиторий пакетов MariaDB 10.3 в Yum:

sudo nano /etc/yum.repos.d/mariadb.repo

со следующим содержимым:

# MariaDB 10.3 CentOS repository list - created 2019-03-28 19:13 UTC
# http://downloads.mariadb.org/mariadb/repositories/

name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Теперь можно выполнить установку пакетов:

sudo yum install -y MariaDB-server MariaDB-client && 
      sudo systemctl enable mariadb && 
      sudo systemctl start mariadb

Проверьте корректность установки, соединившись с MariaDB с помощью клиента командной строки:

mysql -uroot -e 'SELECT version();'
+-----------------+
| version()       |
+-----------------+
| 10.3.13-MariaDB |
+-----------------+

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

Ссылка на основную публикацию