Репликация mysql в виде master/slave

Шаг 3 — (Опционально) Настройка аутентификации и привилегий

На серверах с Ubuntu, использующей MySQL 5.7 (и более поздние версии), пользователь root в MySQL по умолчанию аутентифицируется с помощью плагина , а не по паролю. Это в целом более безопасно и удобно во многих случаях, но не в случае, когда вам необходимо организовать доступ к MySQL со стороны сторонней программы, например, phpMyAdmin.

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

Далее проверьте, какой метод аутентификации используется для каждого из ваших пользователей MySQL:

В этом примере ваш пользователь root использует аутентификацию с помощью плагина . Для изменения этой настройки на использование пароля используйте следующую команду . Не забудьте изменить на ваш сильный пароль:

Далее выполните команду , которая применит внесённые изменения:

Проверьте методы авторизации для пользователей ещё раз для того, чтобы убедиться, что пользователь root более не использует плагин для авторизации:

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

В некоторых случаях бывает полезно использовать для входа в MySQL отдельного пользователя. Для создания такого пользователя войдите в оболочку MySQL:

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

Далее создайте нового пользователя и задайте для него надёжный пароль:

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

Обратите внимание на то, что в этом случае вам нет необходимости выполнять команду. Эта команда необходимо только тогда, когда вы изменяете таблицы доступа (grant tables) используя команды , или

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

После этого, выйдите из оболочки MySQL:

Теперь мы можем протестировать нашу установку MySQL.

Общее

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

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

Шаг 3: настройка аутентификации и привилегий

В ОС Ubuntu c MySQL 5.7 (и более поздними версиями) аутентификация суперпользователя MySQL по умолчанию настроена на использование плагина auth_socket, а не пароля. С точки зрения безопасности это хороший вариант, однако могут быть некоторые проблемы, особенно в тех случаях, когда вам нужно дать другой программе (например, phpMyAdmin) доступ к пользователю.

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

$ sudo mysql

Далее проверьте, какой метод аутентификации используется для каждого из ваших пользовательских аккаунтов MySQL:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Например, вывод может быть вот таким:

+------------------+-------------------------------------------+-----------------------+-----------+

| user          | authentication_string                  | plugin             | host   |

+------------------+-------------------------------------------+-----------------------+-----------+

| root          |                                        | auth_socket        | localhost |

| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |

| mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |

| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |

+------------------+-------------------------------------------+-----------------------+-----------+

4 rows in set (0.00 sec)

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

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

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

mysql> FLUSH PRIVILEGES;

Еще раз запросите, какие аутентификационные методы используются:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Вывод должен выглядеть теперь вот так:

+------------------+-------------------------------------------+-----------------------+-----------+

| user          | authentication_string                  | plugin             | host   |

+------------------+-------------------------------------------+-----------------------+-----------+

| root          | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |

| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |

| mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |

| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |

+------------------+-------------------------------------------+-----------------------+-----------+

4 rows in set (0.00 sec)

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

mysql> exit

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

$ sudo mysql

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

$ mysql -u root -p

Теперь создайте нового пользователя и задайте надежный пароль:

mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

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

mysql> GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

В данном случае использовать команду FLUSH PRIVILEGES не нужно — она используется только в тех случаях, когда вы изменяете таблицы представлений с использованием INSERT, UPDATE или DELETE.

Поэтому просто выйдите из консоли MySQL:

mysql> exit

Теперь перейдем к тестированию MySQL.

Grant all privileges

The newly created user does not have any privilege on any database. In fact, you would not be able to access the MySQL shell either. Then, the root user has to grant certain privileges to this new user.

There are several privileges, and their assignment will depend on the server administrator. Some of them are:

  • ALL PRIVILEGES: Assigns all permissions on the chosen database.
  • CREATE: This privilege allows you to create new tables or databases.
  • DROP: In this case, it allows you to delete tables and databases.
  • DELETE: It allows deleting records from the tables.
  • INSERT: With this privilege, you can create records in the tables.
  • SELECT: This privilege is required to read the records from the tables.
  • UPDATE: It allows you to update the records of a table.
  • GRANT OPTION: With this privilege, the user can remove privileges from certain users.

The syntax for granting a privilege is as follows:

> GRANT  ON . TO ''@'localhost';

For example:

> GRANT CREATE ON test.* TO 'user'@'localhost';

In this case, the user can only create tables in the database called test.

On the contrary, if you want to grant all permissions on all tables in a single call for the test database, the best option is ALL PRIVILEGES. This is an example:

> GRANT ALL PRIVILEGES ON test.* TO 'user'@'localhost';

In this way, privileges are assigned to a user in MySQL.

CRUD operations

CRUD operations to a database table are other very basic data manipulation operations. So, we need to learn how to do them.

CRUD stands for:

C: Create a table.

R: Read data from the database.

U: Update database.

D: Delete data from the database.

Create a new record (Insert)

Once the table is created, it is time to insert records into it. To do this, it is necessary to know which types the columns of the table are.

For this example, we will use the same table that we have created before. The basic syntax to create a record with the insert statement is as the following:

> INSERT INTO table_name (column1, column2, column3,..) VALUES ( value1, value2, value3,..);

So, it would be something like this:

> INSERT INTO Person (Id, name, last_name) VALUES (1,'Richard','Winters');

Read data from the Table (Select)

Once the data has been saved, it is time to read it. The statement is select. The basic syntax is as follows:

> SELECT column1, column2, ... FROM table_name;

If you want to read all the data in the table, use this one:

> SELECT * FROM table_name;

However, it is usually required to set a condition to read the data we need. You may have millions or billions of records, and it’s highly advisable not to return all this amount of data at once.

To do this, add the Where clause along with the condition.

> SELECT * FROM table_name WHERE 

For example, if I wanted to read all the fields where the id is 1, I would use the following statement:

> SELECT * FROM Person WHERE Id=1;

Update data

You may have inserted an incorrect data, so you need to update it. To do this, we need to use the Update statement.

First, you need to know which record needs to be updated; it is necessary to add a small condition. Otherwise, it will update all records. So you need to be careful.

The basic syntax is as follows:

> UPDATE table_name SET column1 = value1, column2 = value2 WHERE ;

Continuing with the previous example, if you want to update the “last_name” column of the data whose Id is “1”, you would do it in the following way:

> UPDATE Person SET last_name = 'Clark' WHERE Id=1;

Now, run the select statement again to see the changes:

> SELECT * FROM Person;

Delete a record

If you want to delete records, you can use the delete statement. Also, you have to use a condition to know which record to delete.

The basic syntax of the delete command is as follows:

> DELETE FROM table_name WHERE condition;

For example, if you want to delete a record whose Id has a value of 1, the statement would be as follows:

> DELETE from Person WHERE Id=1;

Initialization

The alpine package of MySQL/MariaDB are like normal tarball of MySQL one, admins must be know what they want.. there’s no automatic window-like here.

The datadir are located to must be owned by the mysql user and group. You can modify this behavior but must edit the service file at directory. Also, you need to set under section at the config file.

  1. Initialize the main mysql database, and the data dir as standardized to by the rc script
  2. Then initialize the service, root account and socket connection are enabled without password at this point
  3. Setup the root account by asignes a proper password, this are purely paranoid. due next step already do that!
  4. Setup and init the installation by running the
  5. Setup permissions for manage others users and databases

mysql_install_db --user=mysql --datadir=/var/lib/mysql

rc-service mariadb start

mysqladmin -u root password toor

After that, all are initializated to proceed with configuration, now can be done using the script at the next section:

Настройка MySQL в Kali Linux

Конфигурационные файлы MySQL:

  • /etc/mysql/my.cnf (ссылка на /etc/alternatives/my.cnf)
  • /etc/mysql/debian.cnf (устаревший файл, будет удалён в будущих версиях)
  • /etc/mysql/conf.d/mysql.cnf
  • /etc/mysql/conf.d/mysqldump.cnf
  • /etc/mysql/mariadb.conf.d/50-client.cnf
  • /etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf
  • /etc/mysql/mariadb.conf.d/60-galera.cnf
  • /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
  • /etc/mysql/mariadb.conf.d/50-server.cnf

Большинство настроек собраны в файле 50-server.cnf. По умолчанию служба MySQL прослушивает входящие подключения только на localhost (невозможны подключения с других компьютеров).

Языки программирования

При выборе ОС для виртуального выделенного сервера администратор в первую очередь должен думать о том, на каком языке программирования написан проект, который планируется запускать на этом сервере. И Windows, и Linux в одинаковой степени хорошо работают с основными языками, вроде JavaScript или HTML, но так происходит далеко не всегда. Например, для проекта, целиком написанного на языке PHP, целесообразнее выбрать Linux, так как для данной ОС это язык программирования является «родным». Несмотря на то, что на Windows PHP-скрипты тоже могут запускаться и выполняться, скорость их работы в среде Linux при прочих равных условиях всегда будет выше. Для проектов же, созданных с использованием разработанной Microsoft технологии ASP.NET, альтернативы просто не существует – она поддерживается только ОС Windows.

Using the —safe-updates Option

For beginners, a useful startup option is
—safe-updates
(or
—i-am-a-dummy, which has the same effect). It is helpful for cases when you might have issued a
DELETE FROM tbl_name
statement but forgotten the
WHERE
clause. Normally, such a statement deletes all rows from the table. With
—safe-updates, you can delete rows only by specifying the key values that identify them. This helps prevent accidents.

When you use the
—safe-updates
option,
mysql
issues the following statement when it connects to the MySQL server:

SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;

See
Section 5.1.4, \(lqServer System Variables\(rq.

The
SET
statement has the following effects:

o

Tag Description
o

You are not permitted to execute an
UPDATE
or
DELETE
statement unless you specify a key constraint in the
WHERE
clause or provide a
LIMIT
clause (or both). For example:

Tag Description
 
UPDATE tbl_name SET not_key_column=val WHERE key_column=val;
UPDATE tbl_name SET not_key_column=val LIMIT 1;

o

Tag Description
o

The server limits all large
SELECT
results to 1,000 rows unless the statement includes a
LIMIT
clause.

o

Tag Description
o

The server aborts multiple-table
SELECT
statements that probably need to examine more than 1,000,000 row combinations.

To specify limits different from 1,000 and 1,000,000, you can override the defaults by using the
—select_limit
and
—max_join_size
options:

shell> mysql --safe-updates --select_limit=500 --max_join_size=10000

Start MySQL & enable on startup

Now MySQL is installed but still not running. So how to start MySQL?

Since previous versions of Linux, the systemd is in charge of managing the system services. As we may already know, MySQL is a system service.

To start running the MySQL service, type the following command in the terminal:

$ sudo systemctl start mysql

If you are using CentOS, use this command as the root user:

$ systemctl start mysqld

As we can see, no output. That means the service started successfully.

If you reboot the system, you will notice that MySQL is not running. So we need to enable it to run on system startup.

To do this, use the systemctl command but add the enable option:

$ sudo systemctl enable mysql

In the case you are using CentOS:

$ systemctl enable mysqld

Now, if you reboot the system, you will note that MySQL is running. Let’s see how to ensure that.

Шаг 4 — Тестирование MySQL

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

Вы увидите вывод, похожий на этот:

Если MySQL не запущена, вы можете запустить её с помощью команды .

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

Вы увидите вывод, похожий на этот:

Это означает, что MySQL запущена и работает.

Системы управления базами данных

Наиболее популярная среди разработчиков веб-приложений СУБД MySQL доступна для обеих ОС, но, учитывая популярность «классической» связки PHP+MySQL, ее можно считать чуть боле близкой к Linux. Тем более что связка из MySQL, языка PHP и веб-сервера Apache является на сегодняшний день «стандартным» комплексом серверного программного обеспечения LAMP для ОС Linux. СУБД MS SQL, часто использующаяся разработчиками сложных корпоративных порталов с повышенными требованиями к надежности и стабильности, работает только в среде Windows. Это же относится и к базам данных Microsoft Access.

Настройка MySQL

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

sudo mysql_secure_installation

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

После, нажав « Y » и « Ввод », примутся значения по умолчанию. При этом анонимные пользователи и тестовая база данных будут удалены. Это также отключит удаленный вход в систему для root и активирует новые правила безопасности, установленные скриптом.

Для инициализации каталога данных MySQL применяйте команду « mysql_install_db » для предыдущих версий 5.7.6, а для версий после этого используйте « mysqld –initialize» . Если MySQL установлен из дистрибутива Debian, каталог данных инициализируется по умолчанию. Никаких дополнительных действий не требуется.

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

Make MySQL case insensitive

When developing independent applications, the names of the tables are usually a problem. By default, MySQL is case sensitive in table names.

Therefore, in some cases, you need to revert this behavior.

To make this change, it is necessary to add a directive in the MySQL configuration file. First, stop the MySQL service.

$ sudo systemctl stop mysql

If we use CentOS, the command is as follows:

$ systemctl stop mysqld

After this, edit the following specific configuration file. So open it with root user permissions:

On Ubuntu:

$ sudo nano  /etc/mysql/mysql.conf.d/mysqld.cnf

If we use CentOS, the path will be different. The path will be

/etc/my.cnf

Then, under the section add the following directive:

lower_case_table_names = 1

Then save the changes and close the file.

Next, we need to start the MySQL service again.

$ sudo systemctl start mysql

Or on CentOS:

$ systemctl start mysqld

And that is enough. You can create tables with upper and lower case, and MySQL will treat them the same way.

Оптимизация MySQL

Конфигурация MySQL достаточно сложная, но, к счастью, вам не нужно в нее сильно углубляться. Есть специальный скрипт под названием MySQLTunner, который анализирует работу MySQL и дает советы какие параметры нужно изменить и какие значения для них установить. Скрипт поддерживает большинство версий MariaDB, MySQL и Percona XtraDB. Нам понадобится загрузить три файла с помощью wget:

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

Буквально за несколько минут скрипт выдаст полную статистику по работе MySQL. Количеству запросов, занимаемому объему памяти и эффективности работы буферов. Вы можете ознакомиться со всем этим, чтобы лучше понять в чем причина проблем. Проблемные места обозначены красными восклицательными знаками. Например, здесь мы видим, что размер буфера движка таблиц InnoDB (InnoDB buffer pool) намного меньше, чем должен быть для оптимальной работы:

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

Все параметры нужно добавлять в /etc/my.cnf. Еще раз замечу, что вы не копируете статью, а смотрите что вам выдала утилита. Начнем с query-cache.

Скрипт рекомендует отключить кэш запросов. Query Cache — это кэш вызовов SELECT. Когда базе данных отправляется запрос, она выполняет его и сохраняет сам запрос и результат в этом кэше. И все бы ничего, но при использовании его вместе с InnoDB при любом изменении совпадающих данных кэш будет перестраиваться, что влечет за собой потерю производительности. И чем больше объем кэша, тем больше потери. Кроме того при обновлении кэша могут возникать блокировки запросов. Таким образом, если данные часто пишутся в базу данных — его надежнее отключить.

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

Но важно чтобы оба значения совпадали, иначе будет использоваться минимальное

Этот параметр отвечает за количество потоков, которые будут закэшированны. После того, как работа с подключением будет завершена, база данных не разорвет его, а закэширует, если количество кэшированных потоков не превышает ограничение. Утилита рекомендует больше четырех, например, 16.

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

Этот параметр определяет размер буфера InnoDB в оперативной памяти, от этого размера очень сильно зависит скорость выполнения запросов. Значение зависит от размера ваших таблиц и количества данных в них. Если памяти недостаточно, запросы будут обрабатываться дольше. У меня используется стандартный объем 128, а нужно больше 652.

Размер файла лога innodb должен составлять 25% от размера буфера. В случае 800 мегабайт это будет 200М. Но тут есть одна проблема. Чтобы изменить размер лога нужно выполнить несколько действий. Поскольку мы изменили все нужные параметры перейдем к перезагрузке сервера. Для нашего лога нужно остановить сервис:

Затем переместите файлы лога в /tmp:

И запустите сервис:

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

Шаг 4: тестирование MySQL

Вне зависимости от того, как вы установили MySQL, СУБД должна запуститься автоматически.

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

$ systemctl status mysql.service

Вывод должен быть примерно вот таким:

mysql.service - MySQL Community Server

   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en

   Active: active (running) since Wed 2018-06-20 21:21:25 UTC; 30min ago

Main PID: 3754 (mysqld)

Tasks: 28

   Memory: 142.3M

 CPU: 1.994s

   CGroup: /system.slice/mysql.service

           └─3754 /usr/sbin/mysqld

Если же MySQL по какой-то причине не работает, ее можно запустить командой:

$ sudo systemctl start mysql

Дополнительно можно выполнить проверку, используя mysqladmin, который позволяет использовать административные команды. Например, при помощи команды ниже можно подключиться к MySQL в качестве суперпользователя (-u root), запросить пароль (-p) и показать версию:

$ sudo mysqladmin -p -u root version

Вывод будет примерно вот таким:

mysqladmin  Ver 8.42 Distrib 5.7.21, for Linux on x86_64

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Server version   5.7.21-1ubuntu1

Protocol version 10

Connection   Localhost via UNIX socket

UNIX socket  /var/run/mysqld/mysqld.sock

Uptime:      30 min 54 sec

Threads: 1  Questions: 12  Slow queries: 0  Opens: 115 Flush tables: 1  Open tables: 34 Queries per second avg: 0.006

Значит, MySQL запущена и работает.

Заказывайте VDS для своих проектов в компании Timeweb: https://timeweb.com/ru/services/vds/

Restore root password


rc-service mysql stop

kill  `cat /run/mysqld/mysqld.pid`

/usr/bin/mysqld --datadir=/var/lib/mysql --pid-file=/run/mysqld/mysqld.pid --skip-grant-tables --skip-networking &

mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';FLUSH PRIVILEGES;ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';FLUSH PRIVILEGES;set password = password('MyNewPass');"

kill  `cat /run/mysqld/mysqld.pid`

rc-service mariadb restart

MariaDB vs MySQL

It is more a matter of compatibility than of performance and characteristics (with the arrival of MySQL v8) .. and it depends on whether there is a purely business and support approach «zero concern».

MySQL, being from Oracle, establishes limits if a license is not purchased, MariaDB has a large connection pool, more than 200,000 connections, while MySQL has a smaller connection pool if it is not licensed.

However, MariaDB does not support data masking and dynamic column while MySQL supports it, also MariaDB although it has 12 new storage engines while MySQL has less these are very new and MySQL’s are widely known and tested.

In terms of performance, MariaDB is only a little faster than MySQL, this is because MySQL implements more business features, but this is only noticeable using these many features.

Which is more optimal this is not clear .. in general MySQL should be less, and MariaDB faster, there is a third option which is Percona which is the same MySQL service but with special aggressive optimization patches for servers. Percona mysql code must be compiled in Alpine linux.

Создание дампа базы данных

Базы данных MySQL хранятся на диске в двоичном виде в файлах с данными, индексных файле и файлах, описывающих структуру таблиц. Таким образом, каждая БД MySQL хранится в своём каталоге, расположенном в /var/lib/mysql, плюс три файла для каждой таблицы и файл .opt, содержащий параметры БД.

Конечно, можно организовать резервное копирование баз данных, путём простого копирования двоичных файлов, описанных выше, однако гораздо удобнее работать с дампами БД. Как это делается? Очень просто. MySQL имеет утилиту, называемую mysqldump. Например, чтобы сделать дамп БД wordpress_db, вы можете использовать команду:

mysqldump -u username -p wordpress_db > wordpress.sql

которая сделает дамп БД wordpress_db в текстовом виде и сохранит его в файле wordpress.sql. Созданный текстовый файл будет содержать SQL-инструкции, выполнив которые, можно будет воссоздать базу данных, и будет иметь больший размер, нежели размер двоичных файлов БД. Например, размер моей БД WordPress составляет 39 мегабайт, в то время как дамп этой БД получился размером в 41 мегабайт. Это несколько больше размера БД в двоичном виде, поскольку дамп содержит некоторую избыточную информацию.

Также mysqldump может создавать дампы не всей БД, а отдельных таблиц.

Восстановить БД из дампа ещё проще. Давайте представим, что необходимо восстановить базу данных с именем wordpress_db из файла wordpress.sql, который мы создали ранее.  Всё, что нам понадобится для этого, это имя базы данных, путь к файлу дампа и имя пользователя MySQL, имеющего достаточные привилегии для этого:

mysql -u user -p wordpress_db < wordpress.sql

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

Создание и настройка пользователя

Прежде, чем начать, вы должны знать пароль пользователя root в вашей инсталляции MySQL. Это не тот же самый root, который присутствует в вашей операционной системе. Чтобы не использовать учётную запись root для работы со всеми БД в вашей системе, вы можете создать отдельного пользователя. Например, чтобы работать с БД моего WordPress, я использую отдельного пользователя, наделённого не столь высокими привилегиями, как пользователь root.

Создать пользователя очень просто. Войдите в оболочку MySQL и дайте команду:

CREATE USER 'bob'@'localhost' IDENTIFIED BY 'password';

заменив bob на имя нужного вам пользователя, а password на пароль пользователя.

Однако, созданный пользователь не сможет делать ничего полезного до тех пор, пока ему не предоставить необходимые привилегии в базам данных. Например, если вы хотите дать пользователю bob полный доступ к базе данных wordpress_db, достаточно дать команду:

GRANT ALL PRIVILEGES ON wordpress_db.* to 'bob'@'localhost';

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

Установка MySQL в Kali Linux

Если вы уже работали с производными Debian (Linux Mint, Ubuntu), то в них присутствуют два пакета:

  • mysql-server — сервер MySQL
  • mysql-client — клиент MySQL

По умолчанию MySQL уже предустановлена в Kali Linux, но если у вас минимальная сборка, то вам может понадобиться установить СУБД вручную. Если вы попытаетесь установить пакет mysql-server, то получите следующую ошибку:

Пакет mysql-server недоступен, но упомянут в списке зависимостей другого
пакета. Это может означать, что пакет отсутствует, устарел или
доступен из источников, не упомянутых в sources.list

E: Для пакета «mysql-server» не найден кандидат на установку

Дело в том, что в Kali Linux (и видимо в свежих Debian, а также во всех её производных) этот пакет называется по-другому:

  • default-mysql-server (исполнимые файлы СУБД и настройка системной базы данных)
  • default-mysql-server-core (только исполнимые файлы СУБД)

Поэтому для установки MySQL используйте следующую команду:

sudo apt install default-mysql-server

WARNING

It is extremely important for you to fully understand each change
you make to a MySQL database server. If you don’t understand portions
of the script’s output, or if you don’t understand the recommendations,
you should consult a knowledgeable DBA or system administrator
that you trust. Always test your changes on staging environments, and
always keep in mind that improvements in one area can negatively affect
MySQL in other areas.

It’s also important to wait at least a day of uptime to get accurate results. In fact, running
mysqltuner on a fresh restarted server is completely useless.

Seriously — please review the FAQ section below.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: