Подтвердить что ты не робот

Как восстановить/воссоздать базу данных mysql по умолчанию mysql

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

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

4b9b3361

Ответ 1

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

mysqldump --routines databasename > outfile.sql

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

# Most MySQL versions
mysql_install_db

# MySQL 5.7 and later
mysqld --initialize

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

Ответ 3

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

mysql_upgrade -u root -p

Ответ 4

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

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

Ответ 5

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

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

После исправления mysql config - он работал хорошо.

Ответ 6

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

[email protected] ~ # 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)