Как восстановить/воссоздать базу данных mysql по умолчанию mysql
Когда я установил mysql, он пришел с двумя базами данных, mysql и информационной схемой. Я случайно удалил базу данных mysql. Есть ли способ воссоздать его?
Кроме того, поскольку в нем содержится таблица, содержащая пользовательскую информацию, можно ли каким-либо образом просматривать информацию пользователей без нее?
Ответы
Ответ 1
Если вы все еще можете войти в систему (я полагаю, что у вас ее нет, поскольку у вас нет пользовательской таблицы) и у вас есть базы данных для сохранения, сбросьте их с помощью
mysqldump --routines databasename > outfile.sql
База данных MySQL может быть воссоздана с помощью команды
# Most MySQL versions
mysql_install_db
# MySQL 5.7 and later
mysqld --initialize
Документация MySQL здесь
Ответ 2
читать больше на: 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
Я недавно установил 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
)