Создание и удаление баз в mysql/mariadb

Добавление базы в MariaDB

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

Добавление базы с параметрами

MariаDB > CREATE DATABASE `base` CHARACTER SET utf8 COLLATE utf8_general_ci;
= вывод команды =
Query OK, 1 row affected (0.00 sec)

Просмотр пользователей с выводом их прав

MariaDB > SELECT User,Host FROM mysql.user;
= вывод команды =
+--------+-----------+
| User   | Host      |
+--------+-----------+
| root   | localhost         |
| mysql  | localhost |
+--------+-----------+
2 rows in set (0.005 sec)

Права пользователя баз данных MariaDB

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

Права на доступ к серверу баз данных делается в двух местах:

  1. Параметр bind-address=0.0.0.0 в конфигурационном файле самого сервера баз MariaDB разрешающий подключатся с любого адреса (или укажите конкретный IP) в разделе  ;
  2. Права пользователя на возможность удаленного подключения к базе данных.

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

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

MariaDB > GRANT ALL PRIVILEGES ON *.* to 'имя пользователя'@'%';

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

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

mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.4.8-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB > CREATE USER `sevo44`@`%` IDENTIFIED BY 'ПАРОЛЬ';
Query OK, 0 rows affected (0.008 sec)

MariaDB > GRANT ALL PRIVILEGES ON *.* to 'sevo44'@'%';
Query OK, 0 rows affected (0.017 sec)

MariaDB > FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)

MariaDB > exit
Bye

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

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

# Команда смены прав доступа пользователя на подключение с любого адреса (параметр %)
MariaDB > UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='имя_пользователя';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

# Команда смены прав доступа на базы
MariaDB > UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='имя_пользователя';
Query OK, 0 rows affected (0.03 sec)
Rows matched: 0 Changed: 0 Warnings: 0

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

# Права на доступ только с localhost
MariаDB > CREATE USER `base_user`@localhost IDENTIFIED BY 'ПАРОЛЬ';

# Права на доступ с любого адреса (при использовании знаков в названиях код заключается в кавычки! 
MariаDB > CREATE USER `base_user`@`%` IDENTIFIED BY 'ПАРОЛЬ';

# Права на доступ с адреса 10.10.0.2 (при использовании знаков в названиях код заключается в кавычки!
MariаDB > CREATE USER `base_user`@`10.10.0.2` IDENTIFIED BY 'ПАРОЛЬ';

= правильный вывод команды для любой команды =
Query OK, 0 rows affected (0.10 sec)

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

# При назначении прав выставляем пользователя с нужными правами!
MariaDB > GRANT ALL PRIVILEGES ON base.* to base_user@localhost;
= вывод команды =
Query OK, 0 rows affected (0.04 sec)

После всех манипуляция с базами необходимо обновить права доступа

MariаDB > FLUSH PRIVILEGES;
= вывод команды =
Query OK, 0 rows affected (0.02 sec)

Подключение к СУБД

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

а) В Linux вводим команду:

mysql -uroot -p

* где root — пользователь, под которым мы будем подключаться к оболочке; ключ -p потребует ввода пароля.

б) В Windows запускаем командную строку — в меню пуск или найдя ее в поиске. Переходим в каталог, с установленной СУБД и запускаем одноименную команду mysql, например:

cd «%ProgramFiles%\MySQL\MySQL Server 5.5\bin\»

* в данном примере предполагается, что у нас установлена MySQL версии 5.5. 

mysql -u root -p

* здесь, как и в Linux, идет подключение к mysql/mariadb под учетной записью root с запросом пароля.

Возможные ошибки

1. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

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

> SHOW VARIABLES LIKE ‘validate_password%’;

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

+—————————————+———+
| Variable_name | Value |
+—————————————+———+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+—————————————+———+

* где:

  • validate_password_check_user_name — пароль не должен совпадать с именем пользователя.
  • validate_password_dictionary_file — использовать специальный файл со словарем запрещенных паролей.
  • validate_password_length — минимальная длина пароля.
  • validate_password_mixed_case_count — сколько, как минимум, должно быть символов в малой и большой раскладках.
  • validate_password_number_count — какое минимальное количество цифр использовать в пароле.
  • validate_password_policy — позволяет задать определенный набор правил. Доступны значения LOW (или 0), MEDIUM (1), STRONG (2).
  • validate_password_special_char_count — минимальное количество специальных символов (например, # или !).

Решение:

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

> SET GLOBAL validate_password_number_count = 0;

2. ERROR 1728 (HY000): Cannot load from mysql.tables_priv. The table is probably corrupted

Причина: система считает, что таблица tables_priv в базе mysql неисправна.

Решение: чаще всего, ошибка возникает при переносе баз с одного сервера в другой. Если версии СУБД разные, таблица tables_priv может работать со сбоями. Для исправления необходимо выполнить команду mysql_upgrade — она проверяет все таблицы на совместимость с текущей версией MySQL/MariaDB и вносит исправления. Применение команды:

mysql_upgrade -u root -p

Option Prefixes

MariaDB supports certain prefixes that can be used with options. The supported option prefixes are:

Option Prefix Description
Sets the option value automatically. Only supported for certain options. Available in MariaDB 10.1.7 and later.
For all boolean options, disables the setting (equivalent to setting it to ). Same as .
For all boolean options, enables the setting (equivalent to setting it to ).
Don’t produce an error if the option doesn’t exist.
Sets the maximum value for the option.
For all boolean options, disables the setting (equivalent to setting it to ). Same as .

For example:

...
# determine a good value for open_files_limit automatically
autoset_open_files_limit

# disable the unix socket plugin
disable_unix_socket

# enable the slow query log
enable_slow_query_log

# don't produce an error if these options don't exist
loose_file_key_management_filename = /etc/mysql/encryption/keyfile.enc
loose_file_key_management_filekey = FILE:/etc/mysql/encryption/keyfile.key
loose_file_key_management_encryption_algorithm = AES_CTR

# set max_allowed_packet to maximum value
maximum_max_allowed_packet

# disable external locking for MyISAM
skip_external_locking

Checking Program Options

You can check which options a given program is going to use by using the command-line argument:

Option Description
Read options from option files, print all option values, and then exit the program.

This command-line argument can be used with most of MariaDB’s command-line tools, not just . It must be given as the first argument on the command-line. For example:

$ mysqldump --print-defaults
mysqldump would have been started with the following arguments:
--ssl_cert=/etc/my.cnf.d/certificates/client-cert.pem --ssl_key=/etc/my.cnf.d/certificates/client-key.pem --ssl_ca=/etc/my.cnf.d/certificates/ca.pem --ssl-verify-server-cert --max_allowed_packet=1GB

You can also check which options a given program is going to use by using the utility and providing the names of the option groups that the program reads. For example:

$ my_print_defaults mysqldump client client-server client-mariadb
--ssl_cert=/etc/my.cnf.d/certificates/client-cert.pem
--ssl_key=/etc/my.cnf.d/certificates/client-key.pem
--ssl_ca=/etc/my.cnf.d/certificates/ca.pem
--ssl-verify-server-cert
--max_allowed_packet=1GB

The utility’s command-line option provides a shortcut to refer to all of the :

$ my_print_defaults --mysqld
--log_bin=mariadb-bin
--log_slave_updates=ON
--ssl_cert=/etc/my.cnf.d/certificates/server-cert.pem
--ssl_key=/etc/my.cnf.d/certificates/server-key.pem
--ssl_ca=/etc/my.cnf.d/certificates/ca.pem

Install MySQL default package

Update your package version in order to install latest possible version. Then install MySQL server by installing the default package. Optionally you can install additional libraries for MySQL like workbench. The last command is needed if you want to configure your server security. This script will delete test data, password levels will be set up and root account password will be changed:

sudo apt-get update sudo apt-get install mysql-server sudo apt-get install mysql-clientsudo apt-get install mysql-workbenchsudo mysql_secure_installation

Testing MySQL

After the successful installation MySQL should start automatically. You can test it by:

systemctl status mysql.service

You’ll see output similar to the following:

Output:

mysql.service – MySQL Community ServerLoaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en Active: active (running) since Wed 2016-11-23 21:21:25 UTC; 30min agoMain PID: 3754 (mysqld)

If you are able to see it then this means MySQL is up and running.

Connect to MySQL

Connection to MySQL with user root and password with(you will be prompted for the password) : mysql -u -p

mysql -u root -p

After successful connection you can start running queries.

Пример — использование ключевого слова VALUES

Давайте посмотрим, как использовать в MariaDB оператор INSERT с помощью ключевого слова VALUES.
Например:

PgSQL

INSERT INTO sites
(site_id, site_name)
VALUES
(1, ‘Google.com’);

1
2
3
4

INSERTINTOsites
(site_id,site_name)
VALUES
(1,’Google.com’);

Этот оператор приведет к вставке одной записи в таблицу sites. Эта новая запись будет иметь site_id 1 и site_name «Google.com».
Вы можете использовать приведенный выше синтаксис для вставки более одной записи одновременно.
Например:

PgSQL

INSERT INTO sites
(site_id, site_name)
VALUES
(1, ‘Google.com’),
(2, ‘Bing.com’);

1
2
3
4
5

INSERTINTOsites
(site_id,site_name)
VALUES
(1,’Google.com’),
(2,’Bing.com’);

В этом примере две записи будут вставлены в таблицу sites. Первая запись будет иметь site_id 1 и site_name «Google.com». Вторая запись будет иметь site_id 2 и site_name «Bing.com».
Это будет эквивалентно следующим двум операторам INSERT:

PgSQL

INSERT INTO sites
(site_id, site_name)
VALUES
(1, ‘Google.com’);

INSERT INTO sites
(site_id, site_name)
VALUES
(2, ‘Bing.com’);

1
2
3
4
5
6
7
8
9

INSERTINTOsites
(site_id,site_name)
VALUES
(1,’Google.com’);
 

INSERTINTOsites
(site_id,site_name)
VALUES
(2,’Bing.com’);

7.4. Как сделать импорт или экспорт базы данных через SSH? Работа с БД по SSH

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

mysql -u пользователь_БД -p имя_БД < файл_дампа_БД

В случае неудачи всегда будет указанна ошибка из за которой импорт не удался или прервался.

Для экспорта существует утилита, которая позволяет сделать бэкап базы данных в традиционном SQL-формате – mysqldump. Общий вид в командной строке:

mysqldump –u пользователь_БД -p имя-БД > файл_дампа_БД

Также утилита имеет много опций и ключей, рассмотрим несколько основных полезных примеров по использованию mysqldump.

mysqldump -–all-databases -uUSER -pPASSWORD > /path/mysql-db-server.sql

Команда с опцией -–all-databases сохраняет все базы данных пользователя USER на MySQL-сервере.

mysql -uUSER -pPASSWORD < /path/mysql-db-server.sql

Восстанавливает все БД mysql пользователя USER. Если USER — root — то все БД.

mysqldump -uUSER -pPASSWORD DATABASE table1 table2 table3 > /path/ DATABASE_t1-t2-t3.sql

Сохраняет таблицы table1, table2, table3, из базы DATABASE в файле DATABASE_t1-t2-t3.sql.

mysqldump —no-data -uUSER -pPASSWORD DATABASE > /path/DATABASE-schema.sql

Указав опцию —no-data команда сохранит структуру таблиц (без данных) в файле DATABASE_schema.sql.

mysqldump —add-drop-table -uUSER -pPASSWORD DATABASE > /path/DATABASE.sql

Опция —add-drop-table добавит команду DROP TABLE (удаление таблицы) перед созданием таблиц.

mysqldump —databases -uUSER -pPASSWORD DATABASE > /path/DATABASE.sql

Опция —databases добавит команду CREATE DATABASE перед созданием базы данных. Это позволяет не создавать и не задавать базу данных при восстановлении.

mysqldump -uUSER –pPASSWORD –h192.168.0.1 DATABASE > /path/DATABASE.sql

Команда сделает бэкап базы DATABASE с сервера с ip-адресом 192.168.0.1

mysqldump —max_allowed_packet=8M -uUSER –pPASSWORD DATABASE > /path/DATABASE.sql

Опция —max_allowed_packet=8M принудительно изменит размер пакета считываемых данных в оперативную память размером в 8 мегабайт.

mysqldump —quick -uUSER –pPASSWORD DATABASE > /path/DATABASE.sql

Опция —quick заставляет команду записывать данные непосредственно на диск.

mysqldump —default-character-set=cp1251 -uUSER –pPASSWORD DATABASE > /path/DATABASE.sql

Принудительно указываем кодировку cp1251.

mysqldump -uUSER –pPASSWORD DATABASE | gzip -c /path/DATABASE.sql.gz

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

Заливаем архив бекапа в базу
gunzip < /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE
или так
zcat /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE

Создаём новую базу данных
mysqladmin -u USER -pPASSWORD create NEWDATABASE

Для просмотра списка баз данных можно использовать команду:
mysqlshow -u USER -pPASSWORD

А так же можно посмотреть список таблиц базы:
mysqlshow -u USER -pPASSWORD DATABASE

где:

USER — это имя пользователя базы данных;

PASSWORD — пароль пользователя;

SERVER — это имя (или ip-адрес) сервера базы данных;

DataBase — наименование базы данных;

NameFile.sql — имя файла, в который будет помещен дамп базы данных.

Удаление строк с опцией LIMIT

Даже тогда, когда соответствует много записей, вы все еще можете ограничить, сколько записей следует удалить с помощью опции LIMIT.

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

Например, следующая команда удаления без какой-либо опции LIMIT будут удалять все соответствующие записи. т.е. этот удалила 5 записей.

MariaDB > DELETE FROM worker WHERE id > 1 ;


Query OK, 5 rows affected (0.00 sec)

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

MariaDB > DELETE FROM worker WHERE id > 1 LIMIT 2;


Query OK, 2 rows affected (0.01 sec)

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

MariaDB > DELETE FROM worker WHERE id > 1 LIMIT 2;


Query OK, 2 rows affected (0.00 sec)

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

MariaDB > DELETE FROM worker WHERE id > 1 LIMIT 2;


Query OK, 1 row affected (0.00 sec)

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

MariaDB > DELETE FROM worker WHERE id > 1 LIMIT 2;


Query OK, 0 rows affected (0.00 sec)

Установка сервера MariaDB MySQL

Установите пакет сервера MariaDB MySQL, как показано ниже, с помощью yum install.

# yum install mariadb-server

В этом случае, на этом сервере, был установлен MariaDB-server вместе со следующими зависимыми пакетами.

  • mariadb-server.x86_64 1:5.5.52-1.el7
  • mariadb-libs.x86_64 1:5.5.52-1.el7
  • mariadb.x86_64 1:5.5.52-1.el7
  • libaio.x86_64 0:0.3.109-13.el7
  • perl-DBD-MySQL.x86_64 0:4.023-5.el7
  • perl-DBI.x86_64 0:1.627-4.el7
  • perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7
  • perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7
  • perl-Data-Dumper.x86_64 0:2.145-3.el7
  • perl-IO-Compress.noarch 0:2.061-2.el7
  • perl-Net-Daemon.noarch 0:0.48-5.el7
  • perl-PlRPC.noarch 0:0.2020-14.el7

Убедитесь в том, чтобы было установлено три важных пакеты MariaDB MySQL.

# rpm -qa | grep -i maria
mariadb-5.5.52-1.el7.x86_64
mariadb-server-5.5.52-1.el7.x86_64
mariadb-libs-5.5.52-1.el7.x86_64

Если вы новичок в MySQL/MariaDB, вы можете пройти курс молодого бойца: Как создать таблицу в MySQL, сделать вставку и выбрать записи

Удаление строк с опцией LOW_PRIORITY

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

Ключевое слово LOW_PRIORITY будет эффективным только на этих двигателях хранения: MyISAM, MEMORY и MERGE. т.е. Вы можете использовать эту функцию только на двигателях для хранения базы данных, которые реализуют блокировки на уровне таблицы.

MariaDB > DELETE LOW_PRIORITY 
FROM worker 
WHERE dept IN ('Sales', 'Marketing');


Query OK, 2 rows affected (0.01 sec)

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

Подключение и проверка сервера MariaDB

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

# mysql -u root
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.52-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB >

Следующая команда базы данных покажет базу данных для MySQL по умолчанию.

MariaDB > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

Удалить строки с опцией IGNORE

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

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

MariaDB > DELETE IGNORE 
FROM contractorbenefits 
WHERE id > 200;


Query OK, 3 rows affected, 1 warning (0.01 sec)

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

Пример — использование подзапроса

Далее давайте посмотрим, как использовать оператор INSERT в MariaDB с помощью подзапроса.
Например:

PgSQL

INSERT INTO contacts
(contact_id, contact_name)
SELECT site_id, site_name
FROM sites
WHERE site_name = ‘Google.com’;

1
2
3
4
5

INSERTINTOcontacts
(contact_id,contact_name)

SELECTsite_id,site_name

FROMsites

WHEREsite_name=’Google.com’;

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

PgSQL

SELECT COUNT(*)
FROM sites
WHERE site_name = ‘Google.com’;

1
2
3

SELECTCOUNT(*)

FROMsites

WHEREsite_name=’Google.com’;

Настройка подчиненного сервера

Мы внесем те же изменения на подчиненном сервере, что и на главном:

  • Настройте сервер MySQL на прослушивание частного IP-адреса.
  • Установите уникальный идентификатор сервера.
  • Включите двоичное ведение журнала.

Откройте файл конфигурации MariaDB и отредактируйте следующие строки:

slave:/etc/mysql/mariadb.conf.d/50-server.cnf

Перезапустите службу MariaDB:

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

Начните с остановки подчиненных потоков:

Выполните следующий запрос, чтобы настроить репликацию Master / Slave:

Убедитесь, что вы используете правильный IP-адрес, имя пользователя и пароль. Имя и позиция файла журнала должны совпадать со значениями, полученными от главного сервера.

После этого запустите подчиненные потоки.

Бэкап отдельной таблицы или базы

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

Для того, чтобы этот способ бэкапа отдельной базы mysql работал, необходим параметр innodb_file_per_table в настройка сервера баз данных.

# xtrabackup --backup --databases "sitemanager" --target-dir=/root/backupdb/sitemanager

Восстановление отдельной базы mysql будет выглядеть так.

# xtrabackup --prepare --databases "sitemanager" --target-dir=/root/backupdb/sitemanager
# systemctl stop mysqld
# mkdir -p /var/lib/mysql.old/sitemanager
# mv /var/lib/mysql/sitemanager /var/lib/mysql.old
# mv /root/backupdb/sitemanager/sitemanager /var/lib/mysql
# chown -R mysql. /var/lib/mysql
# systemctl start mysql

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

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

Готовим бэкап к восстановлению:

# xtrabackup --prepare --export --target-dir=/root/backupdb/full

Идем в консоль mysql и выбираем там таблицу для восстановления. В моем примере это будет таблица b_user_access из базы sitemanager. Смотрим, заполнена ли таблица данными.

mysql> SELECT COUNT(*) FROM sitemanager.b_user_access;
+----------+
| COUNT(*) |
+----------+
|        6 |
+----------+
1 row in set (0.00 sec)

Делаем DISCARD этой таблицы.

mysql> ALTER TABLE sitemanager.b_user_access DISCARD TABLESPACE;
Query OK, 0 rows affected (0.00 sec)

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

# cp /root/backupdb/full/sitemanager/b_user_access.* /var/lib/mysql/sitemanager
# chown mysql. /var/lib/mysql/sitemanager/b_user_access.*

Возвращаемся в консоль mysql и импортируем данные.

mysql> ALTER TABLE sitemanager.b_user_access IMPORT TABLESPACE;
Query OK, 0 rows affected (0.03 sec)

Смотрим, что получилось.

> SELECT COUNT(*) FROM sitemanager.b_user_access;
+----------+
| COUNT(*) |
+----------+
|        6 |
+----------+
1 row in set (0.00 sec)

Данные восстановлены. Вернулись те же 6 строк, что и были до этого.

8 ответов

Чтобы полностью удалить Mysql из Ubuntu:

sudo apt-get remove –purge mysql-server mysql-client mysql-commonsudo apt-get autoremovesudo apt-get autoclean

после этого, если у вас возникли проблемы с переустановкой, попробуйте удалить файлы Mysql в:

sudo rm -rf /var/lib/mysql

Надеюсь, это поможет.

ответил

Redaa 11 августа 2014, 17:41:10

У меня возникла похожая проблема в Ubuntu 14.04 LTS после обновления MySQL.

Я начал получать сообщение об ошибке: «Неустранимая ошибка: невозможно открыть и заблокировать таблицы привилегий: неверный формат файла« пользователь »» в /var/log/mysql/error.log

MySQL не может запуститься.

Я решил это, удалив следующий каталог: /var /lib /mysql /mysql

sudo rm -rf /var/lib/mysql/mysql

При этом другие файлы, связанные с БД, остаются на месте, удаляются только файлы, связанные с mysql.

После запуска этих:

sudo apt-get remove –purge mysql-server mysql-client mysql-commonsudo apt-get autoremovesudo apt-get autoclean

Затем переустановите mysql:

sudo apt-get install mysql-server

Это сработало отлично.

ответил

Grant 23 января 2015, 18:44:28

Отличное решение для тех, у кого все еще есть проблемы. Надеюсь, я могу помочь тем, кто пытается переустановить Mysql

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

Предполагая ваш корень:

apt-get purge mysql*apt-get purge dbconfig-common #the screen used for mysql passwordfind / -name *mysql* #delete any traces of mysql#insert apt-get cleanups, autoremove,updates etc.

Изначально что-то еще мешало моему запуску mysqlserver-5.5. Эти команды в конечном итоге решили проблему для себя.

Следующие работы:

sudo apt-get –purge remove mysql-client mysql-server mysql-commonsudo apt-get autoremove

ответил

Warsum 12 августа 2014, 16:45:48

Удалите файл /etc/my.cnf и повторите установку, у меня это сработало точно так же. : -)

sudo apt-get remove –purge mysql *

Полностью удалите пакеты MySQL из целевой системы.

sudo apt-get purge mysql *

Удалите все связанные с MySQL файлы конфигурации.

sudo apt-get autoremove

Очистите неиспользуемые зависимости с помощью команды autoremove.

sudo apt-get autoclean

Очистить все локальные репозитории в целевой системе.

sudo apt-get remove dbconfig-mysql

Если вы также хотите удалить свои локальные /конфигурационные файлы для dbconfig-mysql, тогда это будет работать.

У меня была такая же проблема. Оказывается для меня, mysql уже был установлен и работает. Я просто не знал, как проверить.

$ ps aux | grep mysql

Это покажет вам, если mysql уже запущен. Если это так, он должен вернуть что-то вроде этого:

mysql 24294 0.1 1.3 550012 52784 ? Ssl 15:16 0:06 /usr/sbin/mysqldgwang 27451 0.0 0.0 15940 924 pts/3 S+ 16:34 0:00 grep –color=auto mysql

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

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