Как восстановить / восстановить базу данных mysql по умолчанию mysql - PullRequest
32 голосов
/ 18 января 2012

Когда я установил mysql, он поставляется с двумя базами данных, mysql и информационной схемой.Я случайно удалил базу данных MySQL.Можно ли как-нибудь его воссоздать?

Кроме того, поскольку он содержит таблицу, содержащую информацию о пользователях, есть ли способ просмотреть информацию о пользователях без нее?

Ответы [ 6 ]

33 голосов
/ 18 января 2012

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

mysqldump --routines databasename > outfile.sql

База данных MySQL может быть воссоздана с помощью команды

# Most MySQL versions
mysql_install_db

# MySQL 5.7 and later
mysqld --initialize

Документация MySQL здесь

4 голосов
/ 05 декабря 2015

подробнее на: http://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html

В Windows используйте одну из следующих команд:

C:\> bin\mysqld --initialize
C:\> bin\mysqld --initialize-insecure
3 голосов
/ 10 мая 2018

Я недавно установил mysql 8, и, похоже, возникла проблема с базами данных mysql по умолчанию.Во всяком случае, это сработало для меня:

mysql_upgrade -u root -p
2 голосов
/ 05 октября 2017

Я случайно удалил базу данных mysql и mysqld --initialize мне не помог.Не было ошибок, даже служба mysql запустилась нормально, но папка mysql не была создана и mysql не использовался - я не смог даже создать новые базы данных.

Потратив много времени на попытки разных вариантов, я заметил, что яустарели опция innodb_additional_mem_pool_size = 20M, которая вызвала mysqld --initialize

После исправления конфигурации mysql - все заработало.

1 голос
/ 23 января 2019

У меня была эта ошибка:

root@ubuntu-2gb-nbg1-1 ~ # mysqld --initialize
2019-01-23T15:11:22.428139Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-01-23T15:11:22.435428Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2019-01-23T15:11:22.435653Z 0 [ERROR] Aborting

Решение (это удалит все ваши базы данных и таблицы, сделайте резервную копию!):

/etc/init.d/mysql stop
rm /var/lib/mysql -rf
mkdir /var/lib/mysql
chown mysql:mysql /var/lib/mysql
mysqld --initialize

Теперь добавьте skip-grant-tables в ваш /etc/mysql/mysql.conf.d/mysqld.cnf, потому что пароль root недействителен, поэтому нам нужно как-то войти в систему и установить новый.

/etc/init.d/mysql start
mysql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> use mysql;

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

Итак, теперь у вас есть новая база данных mysql с таблицей пользователей, но пароль «испорчен». Поэтому вам нужно установить действительный пароль:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepass');
FLUSH PRIVILEGES;
ctrl+d

Теперь удалите skip-grant-tables из вашей конфигурации, иначе ваша установка небезопасна.

Теперь вы можете войти "нормально": mysql -u root -p (введите somepass)

1 голос
/ 18 февраля 2016

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

Если у вас все еще есть копия старого mysql_install_db (как у нас), не используйте ее. Поскольку MySQL 5.6.8 , это скрипт на Perl. Принимает подобные параметры для mysqld_safe. у нас хорошо получилось - запустил восстановление InnoDB на нашей восстановленной базе данных, установил системные базы данных, вернул наш подчиненный сервер в действие

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